2013-03-15 60 views
2

我正在開發一個項目,需要我訪問多個不同的二維數組,以進行會話映射。我有兩個不同的類,talkinterface是與調用其他的對話類busstaionconvo的代碼的主類。但是,當我調用它並顯示字符串[]時,它將返回爲空值。任何人都可以幫我解決這個問題嗎?我正在用MonoDevelop編寫C#,使用Unity遊戲引擎,代碼如下。二維數組重新調整爲空

主類talkinterface部分代碼:

...public class talkinterface : MonoBehaviour { 



....ai = new string[,]{ 
     {"",""} 
    }; 



public static void eOption(bool eval, string response){ 
    if(response == "bus"){ 
     Debug.Log (ai); //DISPLAYS string[] 
     responses = busstationconvo.responses; 
     ai = busstationconvo.ai; 
     Debug.Log (busstationconvo.responses); //DISPLAYS null 
     Debug.Log (ai); //DISPLAYS null 
    } 
} 

第二類busstationconvo整個代碼:

using UnityEngine; 
using System.Collections; 

public class busstationconvo : MonoBehaviour { 
public static string[,] ai; 
public static string[,] responses; 
// Use this for initialization 
void Start() { 
    ai = new string[,]{ 
     {"Hola, bienvenido al estacion del autobus." , "0"}, 
     {"Estoy bien y tu?", "1"}, 
     {"Esta es el estation de autobuses.","2"}, 
     {"Que necesitas?","3"}, 
     {"Si, tengo un boleto, cuesta dos dolares.","4"}, 
     {"Para usar el autobus, necesitas un boleto.","5"}, 
     {"Gracias, aqui esta tu boleto.","6"} 

    }; 
    responses = new string[,]{ 
     //HOLA 0 
     {"Hola, como estas? ","1"}, 
     {"Que es este lugar?","2"}, 
     {"Necesito ayuda por favor.","3"}, 
     {"Adios.","999"}, 
     //ESTOY BIEN Y TU? 1 
     {"Estoy bien, adios ","999"}, 
     {"Bien, pero que es este lugar?","2"}, 
     {"Bien pero, necesito ayuda por favor.","3"}, 
     {"Adios.","999"}, 
     //THIS IS THE BUS STATION 2 
     {"Claro, adios.","999"}, 
     {"Gracias, pero necesito ayuda por favor","3"}, 
     {"Adios.","999"}, 
     {"","2"}, 
     //WHAT HELP DO YOU NEED 3 
     {"Nada, adios.","999"}, 
     {"Necesito un boleto.", "4"}, 
     {"Necesito un autobus.","5"}, 
     {"Adios.","999"}, 
     //IT COSTS 2 DOLLARS 4 
     {"Que caro, no gracias.","999"}, 
     {"Que ganga! Tengo dos dolares.", "6"}, 
     {"Por su puesto, tengo dos dolares.","6"}, 
     {"Adios.","999"}, 
     //YOU NEED A TICKET 5 
     {"Tienes un boleto?","4"}, 
     {"","5"}, 
     {"","5"}, 
     {"","5"}, 
     //HERE’S YOUR TICKET 6 
     {"Gracias, adios.","999"}, 
     {"","6"}, 
     {"","6"}, 
     {"","6"} 
    }; 
} 

// Update is called once per frame 
void Update() { 

} 

} 

任何幫助將不勝感激!

+2

你確定'Start()'在你訪問'ai'和'respond'之前被調用了嗎? (順便說一句,我不認爲* monodevelop *標籤對於這個問題是有用的,因爲它與MonoDevelop沒有什麼關係。) – 2013-03-15 14:58:18

+1

如果你需要一個字符串字符串字典,你應該使用一個'Dictionary ',而不是一個數組。另外,明智地堅持代碼慣例爲.NET或單聲道,即:公共方法是PascalCase,而不是camelCase。 – istepaniuk 2013-03-15 14:58:34

+0

你打算將'busstationconvo'連接到多個對象嗎?如果是這樣,每個附加的'busstationconvo'將(重新)實例化'ai'和'響應'。另外@ O.R.Mapper說,這將有助於看到eOption呼叫站點。 – Jerdak 2013-03-15 18:48:39

回答

1

Unity中的Monobehaviors通過Unity自己的初始化方案運行 - 使用構造函數或靜態方法向其中填充數據是不可靠的,因爲Unity正在膨脹對象並掛接已在Unity檢查器視圖中填充的關係。你想在代碼中完成的初始化需要在Start()函數中被觸發(就像註釋所說的那樣)。

您正在通過第一個對象的靜態方法訪問代碼,以便Unity運行之前可能會運行開始第二個行爲。