2016-09-04 5 views
0

オブジェクトをインスタンス化しようとしていますが、uiManagerという変数をインスタンス化すると、オブジェクトuiManagerspawnPlayerからインスタンス化されます。オブジェクトをインスタンス化して変数を設定すると、C言語では機能しません。C#

ゲームをプレイして一時停止し、インスタンス化されたオブジェクトを見ると、変数は設定されません。

コードを修正してください!

using UnityEngine; 
using System.Collections; 

public class playerSpawner : MonoBehaviour { 

    public GameObject[] cars; 
    public uiManager ui; 

    int carSpawned; 

    void Start() 
    { 
     spawn(); 
    } 

    void spawn() 
    { 
     Instantiate (cars [carPicController.next], transform.position, transform.rotation); 
     carPicController.next = carSpawned; 
     Debug.Log ("player spawned"); 
     setuiManager(); 
    } 

    void setuiManager() 
    { 
     //get the thing component on your instantiated object 
     uiManager ui = cars [carSpawned].GetComponent<uiManager>(); 

     //set a member variable (must be PUBLIC) 
     ui = ui; 
    } 
} 
+0

私のパブリックメソッドと変数はすべて大文字で始まり、私のプライベートメソッドと変数はすべて小文字で始まります。 Andrew Shepherdがあなたのコードの下に指摘しているように、基本的にスコープ 'ui'変数をそれ自身に設定しています。あなたのクラス 'ui'変数を' Ui'と定義すると、これを見つけ出すことができ、 'this.ui'の余分な文字を' Ui'に取り除きます – Canvas

答えて

2

問題のスコープは次のとおりです。

これは動作します:

void setuiManager() 
{ 
    //get the thing component on your instantiated object 
    uiManager ui = cars [carSpawned].GetComponent<uiManager>(); 

    //set a member variable (must be PUBLIC) 
    this.ui = ui; 
} 

問題は、あなたのクラスのメンバーと同じ名前の一時変数を作成しています。 setuiManagerの内部では、uiはデータメンバーではなく、一時変数を参照していると仮定します。

関連する問題