[Unity] Null-conditional Operator throws an exception?

유니티가 C# 6.0을 지원하게 되면서 가장 반가웠던 건 코드 더미에서 나를 구원해 줄 ‘null 조건부 연산자'(?.)와 ‘null 병합 연산자'(??)를 사용할 수 있게 됐다는 점이었다. 하지만 유니티는 그 행복을 쉽게 허락하지 않았다. UnassignedReferenceException과 함께.

유니티는 UnityEngine.Object의 비교 연산을 유저 친화적인? 방향으로 overload 하고 있다. 실제로는 null이 아님에도 null이나 다름없는 상태는 null이라고 결정한다. 그런데 무슨 이유에선지 C#이 ?.와 ??의 overload를 허용하지 않으면서 문제가 생긴다. 수많은 예가 있지만 하나만 꼽자면 ..

우리가 자주 사용하는 GetComponent<>()는 컴포넌트를 찾지 못하더라도 참트루 null이 아닌 default 상태의 컴포넌트를 리턴한다. 이 default 상태를 엔진은 null 이라고 판단한다. 따라서 GetComponent<>()에는 새로운 null 연산자를 절대로 써서는 안된다.

Solution

유니티가 기막힌 해결책을 주지 않는 이상 아래의 방법을 이용해보자.
두 연산자가 주는 편리함을 포기할 수는 없다.

Leave a Reply

Your email address will not be published.