前提・実現したいこと
Unity C#で1つのスクリプトにif文でマテリアルを変えられる関数を書き、別のスクリプトからその関数を呼び出し、マテリアルを変えるシステムを作っています。
1つのスクリプト内で関数を呼び出し機能を実現することはできたのですが、別のスクリプトから呼び出す機能を実装中に以下のエラーメッセージが発生しました。
とても初歩的なことだと思われるのですが同じようなことをやって下のエラーが出ているのが見つけられなかったため質問させていただきます。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class chameleon_base : MonoBehaviour 6{ 7 public Material specialMaterial; 8 public Material nomalMaterial; 9 10 GameObject cube; 11 bool i; 12 13 private void Start() 14 { 15 i = false; 16 } 17 18 public void Chameleon(bool enable) 19 { 20 cube = GameObject.Find("Cube"); 21 22 if (enable) 23 { 24 cube.GetComponent<Renderer>().sharedMaterial = specialMaterial; 25 } 26 else 27 { 28 cube.GetComponent<Renderer>().sharedMaterial = nomalMaterial; 29 } 30 } 31 32 /*void Update() 33 { 34 if (Input.GetKeyUp(KeyCode.Space)) 35 { 36 Debug.Log("space"); 37 i = !i; 38 Chameleon(i); 39 } 40 }*/ 41}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class controller : MonoBehaviour 6{ 7 chameleon_base CLbase; 8 bool j; 9 10 private void Start() 11 { 12 CLbase = null; 13 j = false; 14 } 15 16 void Update() 17 { 18 if (Input.GetKeyUp(KeyCode.Space)) 19 { 20 Debug.Log("space"); 21 j = !j; 22 CLbase.Chameleon(j); 23 } 24 } 25}
試したこと
1つ目のstart()に↓を追加すればできると言うサイトを見たので試しましたがうまくいかず。
nomalMaterial = Getcomponent<Renderer>.material; specialMaterial = Getcomponent<Renderer>.material;
同じようなエラーが出ているサイトを見あさりましたが、なかなか役に立つ情報がなくその中で多く見かけた質問サイトがこちらだったので利用している次第です。。。
補足情報(FW/ツールのバージョンなど)
ヒエラルキー側でちゃんと割り当てているのですが、別のスクリプトからはアクセスできずに...みたいな感じなのでしょうか?
環境を変えたらできたみたいなことも見たのですがバージョンを変えるだけでそんなに違うのでしょうか?
環境
Unity 2019.3.0f6 (64-bit)
Visual Studio 2019 comunity
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/15 12:52
2020/12/16 05:35
2020/12/19 02:26