Interface 가 붙은 gameObject를 널체크할때 항상 true가 리턴되는 문제가 있다.
유니티 gameObject는 Destroy 되면 실제 null이 아닌 fake null 을 넣기때문에, null체크시 항상 유니티Object의 오버라이딩 된 == 를 사용해야 한다.
그러나 인터페이스로 참조된 gameObject는 fake null이 들어갔지만 연산자 == 를 c# 꺼로 사용해서 항상 true가 나오는 것
아래 코드를보자. (작동하는 코드는 아니고 개념만 보는용도)
public interface Unit
{
}
public class Monster : Monobehavior, Unit
{
}
void Start()
{
var monster = Instanciate(monsterPrefab);
Unit unit = (Unit)monster;
Destroy(monster.gameObject); // 여기서 fake null이 들어감
if(unit == null){ // 항상 true. c#의 == 연산자 사용
}
if((UnityEngine.Object)unit == null){ // 올바른 null 체크법. 유니티 Object의 오버라이딩된 == 연산자 사용
}
}
UnityEngine.Object 로 캐스팅해서 오버라이딩 된 유니티 == 연산자를 쓰도록 하면 된다.
'프로그래밍 > 유니티 (unity)' 카테고리의 다른 글
unity) check internet connection with google.com (0) | 2023.02.12 |
---|---|
unity) script missing. 스크립트 이동시 주의사항 (0) | 2023.01.20 |
unity 플레이팹 사용중 TitleId 입력하라는 에러 (0) | 2022.12.23 |
unity 애니메이션 transition Exit time 의미와 사용법 (0) | 2022.12.19 |
unity) SendMessage cannot be called during Awake, CheckConsistency, or OnValidate 해결법 (0) | 2022.12.11 |