2

会話マッピングのために、複数の異なる 2D 配列にアクセスする必要があるプロジェクトに取り組んでいます。私は2つの異なるクラスを持っています.talkinterfaceは、他の会話クラスbusstaionconvoを呼び出すコードを持つメインクラスです. しかし、それを呼び出してstring[]を表示すると、Nullとして返されます。誰でもこの問題を解決できますか? Unity ゲーム エンジンを使用して、MonoDevelop で C# で書いています。コードは以下のとおりです。

メイン クラスの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
    }
 }

2 番目のクラス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 () {

}

}

どんな助けでも大歓迎です!

4

1 に答える 1

1

Unityのモノビヘイビアーは、Unity独自の初期化スキームを介して実行されます-Unityがオブジェクトを膨らませ、Unityインスペクタービューに入力された関係をフックしているため、コンストラクターまたは静的メソッドを使用してデータを入力することは信頼できません。コードで実行したい初期化は、Start()関数でトリガーする必要があります(コメントにあるように)。

最初のオブジェクトの静的メソッドを介してコードにアクセスしているため、Unityが2番目の動作でStartを実行する前に実行される可能性があります。

于 2013-03-15T15:02:29.400 に答える