• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

GameScene에서 인스턴스화 할때 애니메이션 재생 에러 관련 질문 드립니다!

21.09.28 23:26 작성 조회수 112

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
c++ 서버 수업 듣고 재밌어서 그만 유니티까지 들으러 와버렸습니다ㅎㅎ..

 

질문드릴 게 생겼는데, 이틀동안 여러가지 검색어로도 찾아보고, 혼자서 머리도 굴려봤는데, 답을 찾기가 쉽지 않아서 질문드립니다.

 

Prefabs/knight를 선택해서 드래그로 하이라키로 미리 올려놓은 프리펩은 아무런 문제 없이 애니메이션이 재생되지만, 코드 상에서 Spawn시킨 프리펩들은 인게임 화면에서는 애니메이션이 재생되지 않는 문제입니다.

이게 혹시 초기화할 때 애니메이션 클립이 제대로 세팅되지 않은건가 하고 디버그로 클립을 확인해봐도 제대로 등록이 되어있고, Animator 상에서도 ScanRange에 들어가면 RUN 클립이 제대로 재생되는 것 까지 확인했는데, 정작 인게임 화면에서 애니메이션이 재생되는 게 아니라 아무것도 안 하고 있는 상태로 그냥 speed*_deltaTime 속도로 순간이동 해옵니다.(ATTACK 아무 모션 없이 HP만 감소시킴)

한편, 런타임 중에 그냥 프리펩을 드래그해서 생성시킨 오브젝트 역시 애니메이션이 먹통이 되버립니다. 이 부분에서 저는 '하이라키에 미리 올려둔 프리펩을 제외한 모든 프리펩들, 즉 런타임에 생성한 오브젝트들은 싹 다 먹통이다' 라는 뇌피셜로 검색을 더 해봐서 결국 임시 해결책을 찾긴 했습니다.

바로 animator 컴포넌트를 체크 해제후 다시 체크하는 방법이 유효했습니다.

이 방법대로 Spawn으로 생성시킨 프리펩에 대해서, 플레이어를 락온 하지 않은 상황에서 Animator 컴포넌트를 직접 손으로 체크해제 했다가 다시 체크를 하면 애니메이션이 정상적으로 작동합니다. (락온한 상황에서는 Animator 컴포넌트를 조작해봤자 정상적으로 애니메이션이 작동하지 않습니다)

 

 

이를 자동화 하기 위해서 Spawn함수에서 _monsters.Add(go) 이후 go.GetComponent<Animator>를 anim으로 해주고, anim.enabled = false; anim.enabled = true; 로 추가해주니 잘 작동하는데, 이 방법이 깔끔하다고 생각되지는 않네요...ㅠ

 

이게 해결 방법이야 어찌됐든 억지로 찾아냈지만, 원인 파악이 도저히 안 됩니다. 코드 상의 문제였다면 하이라키에 미리 올려놓은 프리펩만 정상적으로 작동하는 것이 기이하기 때문에 코드 상의 문제는 아닌 것 같고 아무리 봐도 유니티 엔진 자체 초기화 과정 문제이거나 유니티 애니메이션 시스템에 대한 이해부족이 원인인 것 같긴 한데, 이거야 제 뇌피셜일 뿐이고 혹시 비슷한 상황이 있으셨는지 질문드립니다!

답변 1

답변을 작성해보세요.

0

유니티 버전에 따라 가끔 요상한 버그들이 일어날 때가 있긴 합니다.
저도 animator는 아니었지만 다른 애 관련 그런 야메코드를 넣은 기억이 있네요.
전체 프로젝트 압축후 rookiss@naver.com로 보내주시면
말씀하신 문제가 제 환경에서도 발생하는지 살펴보겠습니다.