🈳
【Unity】未割り当てのSerializeが完全nullになる条件
はじめに
インスペクタで未割り当てのUnityオブジェクト系変数は 偽装null(非null) となる認識でしたが
TextMeshPro変数が完全なnull になってて気になったので少し検証してみました。
環境:Unity 6000.0.52f1(エディタでプレイ)
結論
軽く検証した結果どうやら MonoBehaviourから派生したクラスは完全なnull となるようでした。
※TextMeshProはMonoBehaviourから派生している
また、ScriptableObject派生も完全なnull となっていました。
検証コード
TestBehaviour.cs
public class TestBehaviour : MonoBehaviour
{
[SerializeField] private GameObject _gameObject;
[SerializeField] private Object _object;
[SerializeField] private Component _component;
[SerializeField] private Behaviour _behaviour;
[SerializeField] private MonoBehaviour _monoBehaviour;
[SerializeField] private MeshRenderer _meshRenderer;
[SerializeField] private Image _image;
[SerializeField] private TextMeshProUGUI _text;
[SerializeField] private Animator _animator;
[SerializeField] private InputActionAsset _inputActionAsset; // ScriptableObject派生
private void Awake()
{
CheckNull(_gameObject, nameof(_gameObject));
CheckNull(_object, nameof(_object));
CheckNull(_component, nameof(_component));
CheckNull(_behaviour, nameof(_behaviour));
CheckNull(_monoBehaviour, nameof(_monoBehaviour));
CheckNull(_meshRenderer, nameof(_meshRenderer));
CheckNull(_image, nameof(_image));
CheckNull(_text, nameof(_text));
CheckNull(_animator, nameof(_animator));
CheckNull(_inputActionAsset, nameof(_inputActionAsset));
}
private static void CheckNull(Object obj, string name)
{
var result = obj is null ? "<color=green>null</color>" : "<color=red>not null</color>";
Debug.Log($"{name} is {result}.");
}
}
ログ出力

ちなみにめちゃくちゃどうでもいいんですが、ComponentやBehaviourを継承したクラスは自作してもAddComponentできないようです。
※ AddComponent asking for "MyBehaviour" which is not a Unity engine type.と言われる。
※AddComponentできないくせにシリアライズ変数にしたら 非null でした。
Discussion