2017-01-03 8 views
0

私はボールゲームのようなゲームを持っています。私のゲームでは、gameManagerがgameManagerであり、そのgameManagerでボールをインスタンス化します。私のボールが動力を持ってボールを飛ばして別のスクリプトにある数学配列に材料を追加すると、そのスクリプトにアクセスしようとすると、というオブジェクトがインスタンス化されていませんと言います。ここでプレハブスクリプトにアクセスできない:NullReference例外

は、私がアクセスもしたいスクリプトが私のボールプレハブにattechedさMoveBallスクリプトです、私のボールPREFAは、プレーヤーのタグを持っている

public class PowerHit : MonoBehaviour { 
    MoveBall moveBall; 
    Renderer rend; 
    private Material yourMaterial; 
    // Use this for initialization 
    void Start() { 
     moveBall = GameObject.FindWithTag ("Player").GetComponent<MoveBall>(); 
     rend = moveBall.GetComponent<Renderer>(); 
     yourMaterial = (Material)Resources.Load("Tennis",typeof(Material)); 
    } 

    void OnCollisionEnter(Collision other) 
    { 
     Debug.Log (moveBall); 
     if (other.gameObject.tag == "Player") { 
      moveBall.mats [1] = yourMaterial; 
     } 
    } 
} 

をやったことです。

+0

だから...どの行がエラーですか? 'moveBall.mats [1] = yourMaterial;'? – Serlite

+0

'moveBall'はnullではありませんか? **正確**エラーメッセージとは何ですか? – Hellium

+0

NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません PowerHit.Start()(Asset/PowerHit.cs:12) –

答えて

0

Start()の代わりにAwake()関数でボールをインスタンス化します。それはそれからであるあなたはそのプレイヤーを持って、そのプレイヤーに、あなたはそのスクリプトからマット[1]参照を取得することができます「MoveBall」という名前のスクリプトがある場合は、他のオブジェクトをチェックしている

0
void OnCollisionEnter(Collision other) 
{ 
    if (other.gameObject.tag == "Player") { 
     other.gameObject.GetComponent<MoveBall>().mats [1] = yourMaterial;; 
    } 

} 

は、タグを比較することによって、プレイヤーであります。

開始時にやっていることをする必要はありません。単に "yourMaterial"変数参照を割り当てるか、実行時にロードしてください。

関連する問題