저의 NPC 캐릭터는 씬 Start()시 각자 가지고 있는 패턴을 시작합니다.
패턴 내에는 애니메이션 시작이 있는데, 애니메이션 시작 시 해당 부분에서 에러가 나옵니다.
- 해당 명령의 스크립트
public void PlayFrontViewOnly_HellTakerDanceAnime()
{
currentScaleToFlip.x = scaleToFlip.x;
transform.localScale = currentScaleToFlip;
currentAnimeData = portrait.Play("Front_HellTaker");
}
- 에러 메시지
NullReferenceException: Object reference not set to an instance of an object
AnyPortrait.apPortrait.Play (System.String animClipName, System.Int32 layer, AnyPortrait.apAnimPlayUnit+BLEND_METHOD blendMethod, AnyPortrait.apAnimPlayManager+PLAY_OPTION playOption, System.Boolean isAutoEndIfNotloop) (at Assets/AnyPortrait/Assets/Scripts/apPortrait.cs:2713)
NpcAnime.PlayFrontViewOnly_HellTakerDanceAnime () (at Assets/Script/Npc/NpcAnime.cs:366)
씬의 Play를 누르자마자 찍은 스크린샷입니다.
모든 NPC들이 같은 패턴을 Start()에서 명령 받아 같은 애니메이션을 시작해야 하지만,
맨 왼쪽(파랑색 베레모)과 오른쪽 아래(마녀모자) NPC는 에러 메시지와 함께
ap에 기본으로 설정된 애니메이션만 출력하고 있습니다.
Start()가 몇 초 지난 뒤부터는 어느 애니메이션을 시작하라 명령 받아도
에러 없이 정상적으로 모두 같은 애니메이션을 시작합니다.
이 상황에 특이점이 하나 있는데,
만약 에러나는 NPC 게임 오브젝트를 그대로 복사하고 Play하면
복사된 NPC들은 Start()부터 에러 없이 제대로 작동합니다.
(기존 NPC들은 스샷처럼 Start()에서 에러가 나있는 상황입니다.)
좀 이상한 상황인데 원인을 알 수 있을까요?
안녕하세요!
Start 함수에서 에러가 나는 것이라면, 아마도 "초기화" 함수가 호출되지 않아서 발생하는 것으로 생각됩니다.
AnyPortrait로 생성된 apPortrait는 처음 업데이트하기 전에 초기화를 해야합니다.
기본적으로는 자동으로 초기화가 실행됩니다.
하지만 Instantiate 함수 등으로 게임 중에 임의로 객체를 생성했을 경우, 초기화를 하기 전의 상태가 존재합니다.
만약 apPortrait가 초기화 되기 전에 외부의 스크립트가 참조를 한다면, 에러가 발생할 수 있습니다.
Start 함수 출력 순서에 따라서 운좋게 에러가 발생하지 않을 수도 있지만, 그것은 완전히 랜덤이기 때문에 가능하면 초기화 규칙을 이해하고 문제를 해결해야 합니다.
(에디터에서는 운좋게 Start가 적절한 순서로 호출되어 문제가 없어도 빌드 후에 에러가 발생할 수도 있습니다.)
이 경우, 초기화 함수를 직접 호출하거나, 또는 Start 함수에서는 apPortrait를 제어하는 코드를 제외해야합니다.
대체로 초기화 함수(Initialize)를 직접 호출하는 것이 적절할 것입니다.
초기화에 대한 자세한 내용은 다음의 메뉴얼 페이지에서 확인하실 수 있습니다.
https://rainyrizzle.github.io/kr/AdvancedManual/AD_InitializeScript.html
만약 문제가 해결되지 않는다면 다시 글을 남겨주세요!
감사합니다.
Eng)
Q. An apPortrait error occurs in the Start function.
A. It seems to be an error that occurs because initialization is not executed. Please call the Initialize function first.