유니티, C#) AES 암호화/복호화 + JSON 데이터 저장/불러오기
·
기능 구현 방법 정리
게임을 꺼도 유지되어야 할 데이터는간단한 싱글게임에서는 PlayerPrefs를 이용해 저장하고는 했습니다. 하지만 이 경우 변조가 매우 쉽기에 최소한의 보안조치로데이터를 암호화하여 세이브 파일로 저장하는 방법을 공부해 보았습니다.해당 내용은 통신용 패킷 암호화/복호화에도 활용이 가능합니다. 그 과정을 간단히 말해보자면, 1) 데이터 저장데이터 > JSON 형식으로 직렬화 > 암호화 > 파일 출력으로 저장 2) 데이터 불러오기파일 불러오기 > 복호화 > JSON에서 데이터 형식으로 변환 > 데이터 저장과 불러오기는 역순으로 진행됩니다.  1. 데이터 타입 클래스 선언여기서는 클래스로 데이터를 담아두고 저장 및 불러오는 형태로 썼습니다.아래 예시 코드의 PlayerData, Container 클래스를 참조하..
유니티 UI 이미지 마스크
·
기능 구현 방법 정리
UI에서 정해진 틀 내에 이미지를 넣어야 하는데 삐져나오는 경우가 있습니다. 안에 들어간 이미지의 크기, 스케일을 줄여서 해결할 수 있기는 하나,그러면 사용할 이미지가 너무 작아지기에삐져나온 부분만 보이지 않게끔 처리하고 싶을 때가 있을 것입니다. 예시로 든 이미지에서는 검이 삐져나오네요 마스크를 씌울 이미지가 있는 오브젝트 char해당 오브젝트를 우클릭하여 Create Empty Parent > 이름을 CharMask로 변경 CharMask 선택 > 인스펙터에서 Add Componenet > Image이러면 None(Sprite) 로 기본으로 흰색 사각형 이미지가 나올 것입니다.다른 모양을 써야하면 해당 모양의 이미지를 구하거나 제작하여 소스 이미지에 넣어주면 됩니다.이 사각형을 마스크 씌울 영역에 맞..
유니티 UI에 스파인 애니메이션 넣기
·
기능 구현 방법 정리
스파인에 포함된 스크립트로 UI에 애니메이션을 쉽게 표시할 수 있도록 제공하고 있습니다  캐릭터 이미지를 넣을 오브젝트의 인스펙터 > 하단의 Add Component > SkeletonGraphic (Unity UI Canvas) 추가 위에서부터 하나씩 항목 설명을 드리겠습니다.1. Skeleton Data Asset : 애니메이션 재생을 위해 생성한 스켈레톤 데이터 에셋을 넣어줍니다.스켈레톤 데이터 에셋을 넣어주면 아래에 세부 항목들이 출현합니다.2. Material : 머티리얼은 디폴트 값으로 Alpha 채널을 추가한 셰이더를 사용하고 있습니다.제대로 출력이 안되는 경우 스켈레톤 데이터 에셋을 생성할 때 제대로 출력되게끔 조정한 머티리얼을 넣어주면 됩니다.여러 애니메이션을 넣어야 할 때 모두 Alph..
유니티 2D) 부모 오브젝트 주위를 자식 오브젝트들이 원형으로 회전하게 하고 싶다면? (RotateAround 사용 버전도 포함)
·
기능 구현 방법 정리
1) 초기 배치,원점(부모 오브젝트 좌표)를 기준으로 (x, y) 만큼 떨어진 지점(자식 오브젝트 위치)을 삼각형으로 그려보면 위의 그림과 같이 나옵니다. 그 빗변의 길이인 r (radius, 반지름)이 동일하게끔 하면 부모 오브젝트와 거리가 동일한 원형의 좌표가 나옵니다. 자식과 부모 오브젝트가 이루는 각도 θ삼각함수의 정의에 따라, cos θ = x / r => x = r * cos θ sin θ = y / r => y = r * sin θ  이렇게 r, θ 가 있다면 자식 오브젝트의 로컬 x, y 좌표를 구할 수 있게 됩니다. 여기서 원의 반지름 r은 개발자가 지정하며각도 θ는자식 오브젝트 수에 따라 초기 각도를 자동으로 부여하게끔 하도록 해보겠습니다.원 한바퀴 360도를 라디안으로 표현하면 2 π..
유니티) 레이어마스크(LayerMask) 사용법, 2D 가장 가까운 적 탐색
·
기능 구현 방법 정리
흔히 오브젝트 간에 분류하기 위해 태그, 레이어를 쓰고는 합니다.CompareTag() 함수나 .Tag 를 통해 태그를 비교하여 그 오브젝트가 적인지, 아이템인지 등을 구분하고는 하지요. 레이어는 보통 레이캐스트에서 구분을 위해 쓰고는 합니다.빛을 쏘아 맞은 오브젝트에 대한 정보를 받아오는 것인데 특정 오브젝트들만 맞게끔 하고 싶다면 이 때 등장하는 것이 레이어마스크 입니다.제일 아래의 Add Layer... 를 통해 원하는 레이어를 추가할 수 있습니다. 사용법은 3가지 방법으로 소개해 드리겠습니다. 되도록이면 1, 2번 방법을 쓰는 것을 권장하며  3번 방법은 게임 개발자가 굳이 여기까지 알아야 하나 싶은 내용까지 들어가 있기에 왜 이렇게 쓰는지 궁금증을 풀 분들만 보셔도 될 내용이니 참고하시길 바랍니..
유니티) 머티리얼(Material) 색상 곱하기
·
기능 구현 방법 정리
머티리얼 혹은 스프라이트 랜더러, 이미지 등 컴포넌트에서 컬러를 설정하면 원 색상에 그 색상 비율대로 곱해져서 표현이 됩니다. 스프라이트 랜더러, 이미지는 해당 컴포넌트에 .Color을 통해 원본 스프라이트에 곱할 색상을 그대로 넣어주면 아주 쉽게 해결이 되지만 머티리얼은 조금 경우가 다릅니다. 작업 환경에 따라 스크립팅으로 해결해야 하는 경우가 생길 수 있는데 아주 쉽게 구현이 가능합니다.1. 해당 동그라미들을 드래그하여 원하는 색상으로2. RGB, HSV 등 값을 이용한 조절도 가능 3. 색상 조절 창을 닫고 색상을 나타내는 항목을 우클릭 > Copy 1) 색상 조절하는 창의 Hexadecimal을 복사하면 RGB 값만 복사2) 창을 닫고 바로 위의 스크린샷처럼 복사하면 RGBA 투명도 값까지 함께 ..
유니티, 스파인) 머티리얼 교체 없이 색상만 바꾸고 싶을 때
·
기능 구현 방법 정리
런타임 도중에 해당 프리팹으로 생성한 적들 중 공격에 맞은 적들만 색상을 바꿔서 표시 해주고 싶었습니다.스파인의 경우 색상 관련한 요소는 머티리얼에 있는데 이를 변경해서 바꿔보려고 했습니다. 하지만 시행착오를 좀 겪었는데,1. 머티리얼의 색상 변경 > 당연히도 동일 프리팹에서 생성한 적은 같은 머티리얼을 사용하기에 모두의 색 변경2. 머티리얼을 복사 > 복사한 머티리얼의 색상 변경 > 맞으면 잠시 색상만 바꾼 머티리얼로 교체 > 중간 중간에 제대로 조립되지 않고 깨진 형상이 출력3.. Mesh Renderer의 Materials에 추가로 넣으면 되지 않을까? > 스파인에 의해 크기가 1로 고정되어 있어 불가  그래서 검색을 돌려보니 당연히 저와 비슷한 고민을 가진 분이 있었고 이에 해결책을 알려주신 선생..
게임 연출 팁 - 총알
·
기능 구현 방법 정리
도트 연출 팁에 대한 이야기였지만 이는 다른 연출에서도 공통이기에 정리해 보겠습니다.내용은 왼쪽 위 > 아래, 오른쪽 위 > 아래 순입니다.총알1. 색상핵심은 테두리 강조점점 따뜻한 색상 혹은 차가운 색상으로점점 밝아지거나 혹은 어두워지게2. 총알 대미지위험한 총알들은 더 주의해야 한다는 표시를 해주는 것이 좋음깜빡이기는 효과적이고 손쉬운 방법3. 속력빠른 총알들은 많은 디테일이나 애니메이션을 필요로 하지 않음빠른 총알들은 보통 이동 방향으로 길게 표현총알을 크게 만들어 플레이어가 그것을 볼 수 있도록4. 피드백? 아마 유저와의 피드백을 말하는 듯합니다.플레이어가 공격했음을 알아차릴 수 있어야 하기에 총구 플래쉬와 맞은 곳의 이펙트는 굉장히 중요특히 총알이 보이지 않는다면 더욱 출처: https://ww..
~초 동안 무적 및 깜빡거림으로 무적 상태 알림
·
기능 구현 방법 정리
게임을 하다 보면 연속으로 공격을 맞는 불합리한 판정을 없애기 위해 피격 대미지 계산 후 일정 시간 동안 무적을 두고는 합니다. 주로 무적 시간 동안 깜빡이는 효과로 플레이어들에게 무적 상태임을 알려주고는 했습니다. 따라서 이를 구현해 보았습니다. 1. 무적은 코루틴으로 처리해주기로 했기에 필요한 아래 네임스페이스가 필요합니다.    using System.Collections; 2. 글로벌 bool 변수를 하나 선언해 줍니다     bool isInvincilbe = false; 3. 무적 상태 진입/해제 및 효과를 아래 메서드 하나로 만들어 줍니다.  // 매개변수(초) 동안 무적 상태 처리 IEnumerator Invincible(float second) { // 무적 ..
스크립트로 스파인 스킨 변경
·
기능 구현 방법 정리
플레이 도중 인스펙터 > SkeletonAnimation > Initial Skin을 변경해줘도 바뀐 스킨이 바로 적용되지 않습니다.Reload 버튼을 누르면 적용이 되지만 스크립팅으로 바꿀 수 있어야 하기에 그 방법을 찾아보았습니다. Reload라는 명칭으로 찾아보려 했지만 자동완성으로 등장하지 않기에이것저것 시도하다 보니 동일한 기능을 하는 명령어를 찾아내었습니다.Spine.Unity 사용 네임스페이스에 추가 > SkeletonAnimation 클래스 타입 선언 > 할당스킨을 바꿔준 다음 적용하는 명령어는 저렇게 쓰면 됩니다.가려둔 자리에는 스킨 이름을 적어주면 됩니다. 애니메이션 변경할 때는 다른 구문 필요없이 바꿔주기만 해도 적용이 되었는데 스킨은 1단계 더 절차를 거쳐야 하네요