2013-05-01 381 views
0

我已經爲我的GameObject的GameManager Monobehaviour設置了Mode(一個枚舉)「模式」的公共屬性,但有時,特別是在回調中,將一個值賦值給所述屬性doesn'採取任何動作:Unity3d:腳本更改屬性的值,但什麼也沒有發生

例如:

public class GameManager : uLink.MonoBehaviour { 
    public static GameManager instance; 

    public bool dedicated = false; 
    public Mode mode = Mode.MainMenu; 
    public List<Player> players = new List<Player>(); 
    public Player localPlayer; 


    // Use this for initialization 
    void Start() 
    { 
     GameManager.instance = this; 
    } 

    #region Server 
     #region Network 

    void uLink_OnServerInitialized() 
    { 
     Debug.Log ("Server successfully started on port " + uLink.Network.listenPort); 
     new Authenticator ("127.0.0.1", 1234, "DB", "dbUser", "dbPassword"); 
     mode = Mode.ServerDone; 
    } 
    (...) 
    public enum Mode 
    { 
     MainMenu, // 
     ServerInit, //Server start 
     ServerStarting, //Server is starting 
     ServerDone, //Server done loading 
     ClientInit, //Client starting up 
     ClientConnected, //Client connected 
     ClientAwaitAuth, 
     ClientAuthed, //Client authenticated 
     ClientAuthFailed, 
     Client //Client mode 
    } 
} 

(這種情況都使用Unity3D的網絡及宇聯網絡時)

回調發生和日誌被放置在控制檯上,驗證單是也創造了,但是模式不會改變。我試過調試並在mode = Mode.ServerDone;上放置了一個斷點,但它只是說「值未加載」

如果我使用編輯器手動將模式更改爲Mode.ServerDone,那麼我的代碼完美工作。

我最好的猜測是,發生這種情況是因爲回調被一個沒有能力寫入屬性的協程所調用,但我不知道如何解決它。

+0

你是怎麼聲明你的'Mode'枚舉的?你有代碼嗎? – Joetjah 2013-05-02 06:47:01

+0

沒想到那會很重要,把它添加到問題 – Meoiswa 2013-05-02 07:33:14

+0

我只是想知道你是否真的宣佈了「模式」,但你做到了。它似乎沒問題,所以當你聲明'mode'時,你的'Enum'函數還沒有加載。也許你應該在'Start()'或者'OnLevelWasLoaded'中給'mode'初始值。 – Joetjah 2013-05-02 07:48:50

回答

0

我發現答案,事實證明StartServer()不是異步,因此我的模式正在被取代。

相關問題