実現したいこと
2つのクラスがあります。
- Test1.cs
- Test2.cs
今、Test1でフィールド変数に定義したシリアライズ変数とその変数に対応したプロパティの値を
Test2で受け取りたいです。
実現したいのは、
Test1.csではInspector上でPlayerという名前のGameObject を設定しています
Test2.csでTest1をインスタンス化し、
C#
1 var player = _test.Obj; 2 _rb = player.GetComponent<Rigidbody>();
に記載しているような形で、PlayerのRigidbodyコンポーネントを取得したいです
nullになる理由はStart時はnullなので、Test1の値はもちろんnullなのは理解できています💦
こうなると確実にnullってことが分かるので、
- Test2.csでは、普通にシリアライズしたオブジェクトを設定するや
Tagを設定してGameObject を検索して取得する
くらいしか打つ手はないのかなって思いまして。
インスタンス化や継承しても、初期値を取得できるだけで、
毎回値は初期値のままなのか、考え方が全然違うのか教えてください。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object A.Test2.Start () (at Assets/_Sc/Sample/Test2.cs:16)
実際のテスト画像
該当のソースコード
・Test1.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5namespace A 6{ 7 public class Test1 : MonoBehaviour 8 { 9 [SerializeField] 10 GameObject _obj = null; 11 public GameObject Obj { get { return _obj; } set { _obj = value; } } 12 13 private Rigidbody _rb = null; 14 void Start() 15 { 16 _rb = Obj.GetComponent<Rigidbody>(); 17 Debug.Log(_rb); // Player (UnityEngine.Rigidbody) 18 Debug.Log(_rb.name); // Player 19 } 20 } 21} 22
・Test2.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5namespace A 6{ 7 public class Test2 : MonoBehaviour 8 { 9 private Test1 _test = new Test1(); 10 11 private Rigidbody _rb = null; 12 void Start() 13 { 14 var player = _test.Obj; 15 _rb = player.GetComponent<Rigidbody>(); 16 Debug.Log(player.name); // null 17 Debug.Log(player); // null 18 Debug.Log(_rb); // null 19 Debug.Log(player.name); // null 20 } 21 } 22}
以上です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/25 10:27
2022/08/25 12:32