분류 전체보기 77

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

만일 어떤 함수내에 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

유니티 - 오브젝트에 텍스트 달기

큐브 위에 텍스트가 표시되도록 해보자 그러기 위해선 해당 큐브에 Text - TMP를 달아주면 된다. TextMeshPro가 안깔려있으면 패키지매니저서 검색해 깔면 되고 3D 오브젝트 - Text(TMP) 를 자녀로 생성하면 된다.UI가 아니라 3D Object임을 주의하자  큐브 사이즈와 맞게 사이즈를 설정해도 기본적으론 텍스트가 세워져있기 때문에 로테이션을 수정하여 텍스트를 눕혔고 또한 로테이션을 수정해도 글씨가 아래에 있기에 Text 위치를 올리던 큐브를 내리던 적절한 방법을 써야한다. 큐브의 위치를 내려 텍스트가 위로 올라오게 했다만..  슬프게도 글자가 좀 깨져보인다..  이는 Z-Fighting 으로 Z 버퍼 관련 문제로 큐브의 상단과 텍스트가 똑같은 공간을 차지하려니 발생하는 문제이다. 고로..

카테고리 없음 2024.07.02

유니티 - Grid(그리드) 이동

Grid Plane은 Y축에 대해 체크해야 땅에 그리드가 생기고Opacity를 조절해 그리드를 선명하게 할지를 정한다.  파란색으로 Grid Visual 활성화가 돼야 아래와 같이 그리드가 표시된다.  Grid Snapping서 Grid Size를 키우면 그리드의 간격이 넓어진다. 기본설정은 1이지만 5로 늘리면  훨씬 넓어진 것을 볼 수 있다.  만일 해당 Grid Snapping 을 활성화(파란색)시키면  오브젝트 이동시 그리드 사이즈에 맞게 이동하는 것을 확인 할 수 있다. 주의  스냅 설정이 Local일 땐 사진과 같이 Grid Snapping은 활성화되어 있더라도 비활성화되기 때문에 반드시 Global 에서 사용해야 한다. 그리드 사이즈 말고도 오브젝트를 Ctrl(win)/Cmd(mac) 을 누..

카테고리 없음 2024.07.02