実現したいこと
- Unity Editor実行時にCanvasでもImageでもButtonでも
コードでしっかり取得できるようにしたい
Editor実行時にInspector上から外れてしまうので、これがなんでかと、
こうなってもコード上で問題ないようにnullチェック等をやる方法が知りたいです
発生している問題・エラーメッセージ
下のInspector上のオブジェクトが、Editor実行時に必ず外れてnull(None)になってしまいます。
該当のソースコード
次のコードは簡単に作りました。
NullCheckMethods()とNotNullCheckMethods()はコメントアウトして使ってください
尚、このコードは上記画像内では、Managerという空オブジェクトにAttachしています。
もちろん、このままでもインスペクタで直接アタッチしているから各オブジェトも取得できるかなと
思ってデバックログを記載しています。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Sample : MonoBehaviour 7{ 8 [SerializeField] 9 Button m_StartButton = null; 10 [SerializeField] 11 Canvas m_Canvas = null; 12 [SerializeField] 13 Image m_Image = null; 14 15 void Start() 16 { 17 //NullCheckMethods(); 18 NotNullCheckMethods(); 19 } 20 21 private void NullCheckMethods() 22 { 23 if(m_StartButton == null) 24 { 25 m_StartButton = GetComponent<Button>(); 26 Debug.Log(m_StartButton); 27 } 28 if(m_Canvas == null) 29 { 30 m_Canvas = GetComponent<Canvas>(); 31 Debug.Log(m_Canvas); 32 } 33 if(m_Image == null) 34 { 35 m_Image = GetComponent<Image>(); 36 Debug.Log(m_Image); 37 } 38 } 39 40 private void NotNullCheckMethods() 41 { 42 m_StartButton = GetComponent<Button>(); 43 Debug.Log(m_StartButton); 44 m_Canvas = GetComponent<Canvas>(); 45 Debug.Log(m_Canvas); 46 m_Image = GetComponent<Image>(); 47 Debug.Log(m_Image); 48 } 49} 50 51
試したこと
nullチェックをしてnullの場合GetComponent する形にしたりしています。
でもnullチェックしてもインスペクターのオブジェクトはnoneになるんですよね。
補足情報(FW/ツールのバージョンなど)
Unity のバージョンは2019年代からずっと同じなので、
ここは関係ないです。
下記は分かっている上での質問ですか?
- GetComponent<~>();は失敗するとnullが返される
- GetComponent<~>();は対象が同じゲームオブジェクトに無いと失敗する(画像の通りだとSampleしかないので確実に失敗する)
あと、画像では1件エラーが出てますが、それは何ですか?
こちらは全く関係のないスクリプトで発生していたので、非表示にしました。
見えるようにしたほうが、スクリプト名も見えたし分かりやすかったですね💦
- GetComponent<~>();は対象が同じゲームオブジェクトに無いと失敗する(画像の通りだとSampleしかないので確実に失敗する)
>こちらが原因みたいです!
ここを注意してこれからはコードを書いてみます!ありがとうございます。

回答1件
あなたの回答
tips
プレビュー