質問するログイン新規登録
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4078閲覧

[Unity] Inspectorのオブジェクトが勝手にEditor実行時外れる原因が分かりません。

PotePui

総合スコア69

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/08/22 10:52

0

0

実現したいこと

  • 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年代からずっと同じなので、
ここは関係ないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2022/08/22 11:18

下記は分かっている上での質問ですか? - GetComponent<~>();は失敗するとnullが返される - GetComponent<~>();は対象が同じゲームオブジェクトに無いと失敗する(画像の通りだとSampleしかないので確実に失敗する) あと、画像では1件エラーが出てますが、それは何ですか?
PotePui

2022/08/23 00:41

こちらは全く関係のないスクリプトで発生していたので、非表示にしました。 見えるようにしたほうが、スクリプト名も見えたし分かりやすかったですね💦
PotePui

2022/08/23 00:45

- GetComponent<~>();は対象が同じゲームオブジェクトに無いと失敗する(画像の通りだとSampleしかないので確実に失敗する) >こちらが原因みたいです! ここを注意してこれからはコードを書いてみます!ありがとうございます。
guest

回答1

0

自己解決

  • 実行前
    イメージ説明

  • 実行後
    イメージ説明

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 public GameObject Manager_go = null; 15 16 private GameObject button_go = null; 17 18 void Start() 19 { 20 //button_go = transform.Find("Manager/Button").gameObject; 21 22 button_go = Manager_go.transform.GetChild(0).gameObject; 23 Debug.Log(button_go.name); 24 25 NullCheckMethods(); 26 //NotNullCheckMethods(); 27 } 28 29 private void NullCheckMethods() 30 { 31 if (m_StartButton == null) return; 32 if (m_Canvas == null) return; 33 if (m_Image == null) return; 34 m_StartButton = button_go.GetComponent<Button>(); 35 Debug.Log(m_StartButton); 36 m_Canvas = GetComponent<Canvas>(); 37 Debug.Log(m_Canvas); 38 m_Image = GetComponent<Image>(); 39 Debug.Log(m_Image); 40 } 41 42 private void NotNullCheckMethods() 43 { 44 m_StartButton = GetComponent<Button>(); 45 Debug.Log(m_StartButton); 46 m_Canvas = GetComponent<Canvas>(); 47 Debug.Log(m_Canvas); 48 m_Image = GetComponent<Image>(); 49 Debug.Log(m_Image); 50 } 51} 52

こんな感じで、上で教えてくれたので、
理解できました!
InspectorでObjが外れることもなくなりました。

投稿2022/08/23 01:23

PotePui

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問