다양한 기록

유니티 게임 개발: 연습 프로젝트 #2 / 겪을 수 있는 문제 혹은 버전이 달라 책과 다른 부분 본문

유니티 엔진/연습 프로젝트: 오노 고지의 유니티 2D 게임 공작소

유니티 게임 개발: 연습 프로젝트 #2 / 겪을 수 있는 문제 혹은 버전이 달라 책과 다른 부분

라구넹 2022. 7. 7. 13:02

현재 공부를 위해 사용하고 있는 책인 유니티 2D 게임 공작소는 유니티 4.5.4 버전을 기준으로 작성되어 있습니다.

그런데 현재 제가 사용하고 있는 버전은 2020.2.1f1 입니다. 이에 따라, 혹은 버전과 상관없는 다른 이유로 다양한 문제를 겪어 이를 어떻게 해야 하는 지 정리해두고자 합니다.

 

1. rigidbody2D를 따로 변수에 할당하지 않고 바로 사용하는 경우

rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, 35.0f);

해당 경우는 버전이 달라서 문제가 되는 건지 아니면 책에서 잘못 써둔 건지는 모르겠으나,

일단 현재 버전에서는 사용 불가능합니다. 그러므로 다음과 같은 작업이 필요합니다.

 

rb = GetComponent<RigidBody2D>();
rb.velocoty = new Vector2(rb.velocity.x, 35.0f);

앞에서 따로 RigidBody2 자료형의 변수 rb를 선언해두고 GetComponent한 다음에 사용하면 정상적인 사용이 가능합니다.

 

 

2. Atomic 설정

우선 유니티에서 Atomic 설정이란, On으로 설정되어 있을 시 애니메이션 트랜지션 이행 시 스크립트에서 트리거를 발생 시에도 무시하여 진행하던 트랜지션을 계속 진행하는 설정이고, off일 시 트랜지션 진행 도중에 바뀔 수 있도록 하는 설정입니다.

그런데 문제는 이게 버전이 바뀌면서 설정이 사라졌습니다. 그래서 다른 설정을 바꿔줘야 합니다.

 

Interruption Source에서 None이 Atomic On 이고 Current State 가 Atomic Off 입니다.

 

3. obsolete : 버전이 달라져 안쓰는 코드

- nameHash 가 더이상 사용할 수 없는 경우

AnimationStateInfo의 nameHash가 버전이 달라지며 사용이 불가능해졌습니다.

대신 fullPathHash를 사용하면 됩니다.

 

- Application.LoadLevel(int) 가 더 이상 사용할 수 없는 경우

SceneManager.LoadScene(SceneManager.GetActiveScene().name);
// Application.LoadLevel(Application.loadedLevelName); ->>> obsolete

SceneManager 클래스를 사용하면 됩니다.

 

- LineLenderer의 SetColors() 함수

SetColors(st, ed) 와 같은 방식에서

line.startColor = st;
line.endColor = ed;

와 같은 방식으로 변경합니다.

 

- Rigidbody2D의 fixedAngle이 더 이상 사용할 수 없는 경우

rb.fixedAngle과 같은 방식에서

rb.freezeRotation = fix;

와 같은 방식으로 변경합니다.

 

4. 애니메이션의 프레임을 조정하는 부분이 보이지 않는 경우

애니메이션 이름 옆에 프레임을 조정하는 부분이 보이지 않는 경우입니다.

보이도록 설정을 해주어야 합니다.

 

5. object reference not set to an instance of an object unityeditor.graphs.edge.wakeup () 에러

간혹 이런 에러가 발생할 수 있는데 코드를 찾아봐도 문제를 찾지 못하는 경우가 있습니다.

이 경우 찾아보니 전환이 없는 애니메이터를 삭제하고 다시 만들 때 생기는 오류라고 합니다.

유니티를 재시작하면 해결됩니다.