2024/07 13

Action과 UnityAction의 차이

유니티에서 굳이 Action이 있는데 UnityAction을 써야하나라는 고민이 든 적이 있다. 왜냐면 Action 사용에 있어 문제를 못느꼈고 차이점에 대해 알지 못했기 때문이다.하지만 문제 상황을 겪고야 말았다. 바로 아래와 같은 문제이다.버튼에 AddListener를 통해 이벤트를 추가해주는 함수인 AddOnClickEvent를 만들었는데Action으로 이벤트를 받으니 빨간줄이 뜨면서 오류가 난다. AddListener 함수를 들여다보면 유니티 액션을 매개변수로 받고 있음을 알 수 있음 고로 UnityAction으로 수정하면 사용이 가능하다. AddListener와 같이 이벤트로 Action을 받지 못하는 함수의 경우 UnityAction을 쓰게 된다.

유니티 2024.07.28

유니티 - 블록 단위 이동 단축키

만일 어떤 함수내에 for문이 엄청나게 길다고 해보자 만일 for문 블록 맨 끝으로 이동을 하고자 하면 스크롤 하기 번거로울 수가 있다.그럴 때   for문 블록의 시작 지점에 커서를 위치시키고  단축키 Win : Ctrl + Shift + \Mac : CMD + Shift + \ 를 누르면  끝지점으로 이동한다. 반대로 끝지점서 해당 단축키를 누르면 블록의 시작부분으로 이동한다. 매우 유용하니 잘 숙지해두자 블록 단위 이동 Win : Ctrl + Shift + \Mac : CMD + Shift + \

유니티 2024.07.23

유니티 - ArgumentNullException: Value cannot be null 해결법

분명 로직은 맞는데 이와 같은 에러가 뜨고 있다. private로 선언한 rcode에 null 값이 들어가고 있었다. 프로퍼티를 뒀음에도 null값이 들어가는 것이 이상했고 계속 로직이 정말 맞다고 생각해 시간을 낭비했으나 사실은 로직 문제가 맞았다. 오브젝트 타입의 인스턴스를 하나 만든건데 문제는 dt에서는 private 변수들이 접근이 안된다.고로 dt.SetValue로 rcode 변수에 값을 넣어줄 수가 없는 것이다. 고로 null이 될 수밖에 없는것

유니티 2024.07.19

애니메이션 오버라이드 컨트롤러

Animation Override Controller 아주 쉽게 이해하면 그냥 자식 클래스처럼 이용하는 것이다.만일 Knight가 있고 Archer를 만들려하는데 애니메이션 로직에 있어 Knight와 비슷한 부분이 많은 경우가 있을 수 있다.이동 점프 이런 것은 그냥 클립만 바꾸면 되는데 새로운 애니메이션을 만들자니 복잡한 부분이 있다. Knight Animation Controller와 Archer Animation Controller가 공유하는 부분이 있으면  프로젝트창에서 Animation Override Controller를 만들 수 있다.

카테고리 없음 2024.07.12

유니티 - Simulator와 아이폰 노치에 UI 대응해보기

UI 제작 연습을 위해 게임 명일방주를 역기획해서 UI를 만들어보았다. 다만 게임씬에서 보이는 게임 화면은 PC 기준으로 보여주고 있는 것이다. 물론 모바일 비율로 바꿀 수도 있지만 실제 기기에서는 어찌 적용될지 궁금함이 생긴다. 이럴 때 사용할 수 있는 것이 Simulator이다. Simulator 사용 게임씬에서 Game 대신 Simulator를 선택해주면 된다.  Simulator로 바꾸면 여러가지 기기들이 보인다.  실제 기기에서 어떤 식으로 보여지는지 알 게 된다. 아이폰의 경우 다이내믹 아일랜드나 노치로 인해 화면을 일부 영역을 가리고 갤럭시의 경우 펀치홀이 화면을 아이폰보다는 훨씬 덜하지만 화면을 조금이지만 가린다. 아이폰 12의 경우엔 노치가 상당히 큰 편인데 아이폰 12로 설정해보고 확인..

유니티 2024.07.11

유니티 - Destroy 함수 문제

Destroy 함수 설명을 보면 GameObject, component or asset으로 되어있다. 이 말은 즉슨 게임오브젝트만 Destroy를 한다는 것이 아니라 컴포넌트나 에셋까지 파괴가 가능하다는 것이다. 만일 ui 변수가 UIBase 클래스의 객체라하자  Destroy(ui); 단순이렇게 한다면 UIBase 컴포넌트를 파괴한다는 것이다. 그래서 인스팩터창에 들어가보면 UIBase 컴포넌트가 사라져있는 것을 알 수 있다. 그렇기 때문에 게임오브젝트를 파괴하는 것이 목적이였다면 Destroy(ui.gameObject); ui.gameObject 를 파괴를 해야하는 것이다.

카테고리 없음 2024.07.10

유니티 - 프로퍼티를 인스팩터 창에 띄워보자

[SerializeField] public int Life { get; private set; } 이렇게 만들면 뭔가 인스펙터창에 나올 거 같지만 표시되지 않는다.[field:SerializeField] public int Life { get; private set; } 간단하게 SerializeField 앞에 field: 를 붙여주면 된다.  이렇게 하면 private set 으로 설정하더라도 인스팩터창에서 조절이 가능해진다. 혹은 private 변수를 두고 프로퍼티를 만들고 싶다하면 [SerializeField] private int life;public int Life { get { return life; } private set { life = value; } } 이런식으로 해주면 된다. 이게 불..

카테고리 없음 2024.07.09

유니티 - 프리펩 Variant

프리펩 중첩 플레이어 프리펩이 있고 안에 메쉬가 있는데 이 메쉬를 다른 프리펩으로 바꿔보자 이렇게 되면 중첩 프리펩이 되는데이렇게 했을 때 장점은 NewPlayerMesh 프리펩을 수정시 Player 프리펩을 사용하는 모든 애들한테 쉽게 반영이 되도록 할 수 있다. 하지만 해당 중첩 프리펩을 이용한 애들이 온전히 같은 모양을 하고 있을 땐 유용할 지 몰라도 각각에 차이를 줘야할 때가 있을 것이다. 그럴 때 중첩된 프리펩을 각각에서 수정 시엔 Override를 하고 싶지 않은데 아래와 같이 빨간색 -표시, 초록색 +가 뜨는 문제가 있다. 물론 실행에는 문제가 없지만 나에겐 거슬리는 부분이라 개인적으론 중첩프리펩은 잘 사용하지 않고 프리펩을 언팩하여 사용한다. 다만 이렇게한 언팩하여 사용한다면 프리펩 끼리 ..

유니티 2024.07.03