2017-08-04 35 views
0

Hellos傢伙我是初學者,有2個班級。 A類有一個我需要在B類中訪問的數組。我在這裏搜索了過去36小時嘗試不同的方法,這就是我最終得到的任何幫助?Array.Indexof混淆

這與陣列

[System.Serializable] 
public class Cli 
{ 
    public string name; 
    public int money; 
}; 

public class BankManager : MonoBehaviour 
{ 
    private static BankManager _instance; 

    public static BankManager Instance 
    { 
     get 
     { 
      if (_instance == null) 
      { 
       GameObject go = new GameObject("BankManager"); 
       go.AddComponent<BankManager>(); 
      } 
      return _instance; 
     } 
    } 

    public GameObject player; 
    private string NaMe; 
    public Bank[] banks = new Bank[1]; 
    public Cli[] clients = new Cli[1]; 

    void Awake() 
    { 
     _instance = this; 
    } 

    void Start() 
    { 
     banks[0] = new Bank("In But Not Out", 10000); 
     player = GameObject.Find("Player"); 
     clients[0].money = 1000; 
    } 

    void Update() 
    { 
     PlayerController pName = player.GetComponent<PlayerController>(); 
     clients[0].name = pName.name; 

    } 
} 

第一類我試圖訪問數組是客戶端[]

public class AccessAtm : MonoBehaviour 
{ 
    public Bank bank; 
    public int clams; 

    private void OnTriggerEnter2D(Collider2D other) 
    { 
     bank = BankManager.Instance.banks[0]; 
     if (other.tag == "Player") 
     { 
      clams = Array.IndexOf(BankManager.Instance.clients, 
       other.GetComponent<PlayerController>().name); 
      Debug.Log(other.GetComponent<PlayerController>().name); 
     } 
    } 
} 

的正確的debug.log告訴我我得到了player.name我相信我的錯誤是要麼獲取該數組的實例或indexof命令

+0

我也許應該澄清蛤蜊是= -1當我運行了這一點應該是件1陣列中 –

+2

無處我看出來你真的* *分配客戶[0]所以'IndexOf'沒有找到它應該被期望。還考慮到數組只有長度1;它*更好*不返回1 :)(順便說一句,這樣的公共字段和靜態引用是*糟糕的*練習) – BradleyDotNET

+0

與你的問題沒有關係,但你真的應該嘗試調用'other.GetComponent ()'只有一次,將結果保存在一個變量中,並在函數中使用該變量兩次。 –

回答

0

問題是IndexOf期望您通過的實例第二個參數爲

clams = Array.IndexOf(BankManager.Instance.clients, 
      other.GetComponent<PlayerController>().name); 

你傳給它一個字符串。

您需要使用別的東西來搜索它,easist解決方案將使用for循環。

var clients = BankManager.Instance.clients; 
var otherName = other.GetComponent<PlayerController>().name; 
int foundAt = -1; 
for(int i = 0; i < clients.Length; i++) 
{ 
    if(clients[i].name == otherName) 
    { 
     foundAt = i; 
     break; 
    } 
} 
claims = foundAt; 
+0

對不起,因爲這樣一個noob,但你可以解釋這(int i = 0;我

+0

我明白這意味着什麼,非常感謝你 –