오늘도 Unity 팀 프로젝트 작업을 진행했다. 커스터마이징, 도전과제 시스템을 어느정도 완성하였는데, 이 과정에서 몇 가지 문제가 발생했다.
DefaultSkin)으로 게임을 시작하면 정상적으로 Animator가 동작하지만 캐릭터 선택 UI에서 스킨을 변경할 시, 기존 스킨과 변경 스킨이 동시에 보이는 현상이 발생하였다.SkinHolder를 생성하고, 스프라이트를 여기에 넣어주었다.SkinManager.ApplySkin을 통해 스킨을 교체할 시, SkinHolder 내에 있는 모든 오브젝트를 Destroy하고 새 스프라이트 프리팹을 넣어주도록 짰다.PlayerMovement.animator 필드는 이전 Animator 참조를 가리켰다.animator.SetTrigger(...) 호출 시NullReferenceException: Object reference not set to an instance of an objectPlayerMovement.cs/PlayerHealth 스크립트가 animator필드에서 파괴된 애니메이터를 계속 가리키고 있기 때문에 NRE오류가 발생한 것이다. var newAnim = goSkin.GetComponent<Animator>();
if (newAnim != null)
{
var movement = player.GetComponent<PlayerMovement>();
movement.animator = newAnim;
var health = player.GetComponent<PlayerHealth>();
if (health != null)
health.AssignAnimator(newAnim);
if (skin.data.animatorOverride != null)
newAnim.runtimeAnimatorController = skin.data.animatorOverride;
}
를 통해 새로운 애니메이터를 곧바로 PlayerMovement.cs와 PlayerHealth.cs에 할당해주었다.