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
,那麼我的代碼完美工作。
我最好的猜測是,發生這種情況是因爲回調被一個沒有能力寫入屬性的協程所調用,但我不知道如何解決它。
你是怎麼聲明你的'Mode'枚舉的?你有代碼嗎? – Joetjah 2013-05-02 06:47:01
沒想到那會很重要,把它添加到問題 – Meoiswa 2013-05-02 07:33:14
我只是想知道你是否真的宣佈了「模式」,但你做到了。它似乎沒問題,所以當你聲明'mode'時,你的'Enum'函數還沒有加載。也許你應該在'Start()'或者'OnLevelWasLoaded'中給'mode'初始值。 – Joetjah 2013-05-02 07:48:50