我已经为我的GameObject的GameManager Monobehaviour设置了Mode(一个枚举)“mode”类型的公共属性,但是有时候,特别是在回调中,将值赋予所述属性并没有做任何事情:
例如:
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的网络和uLink的网络时都会发生)
回调发生且日志放在控制台上,也会创建验证器单例,但模式不会更改。我已尝试调试并在mode = Mode.ServerDone;
上放置一个断点,但它只是说“Value not loaded”
如果我使用编辑器手动将模式更改为Mode.ServerDone
,我的代码将完美运行。
我最好的猜测是,这是因为回调是由一个没有能力写入属性的协程调用的,但我不知道如何解决它。
答案 0 :(得分:0)
我找到答案,结果是StartServer()不是异步,因此我的模式被替换了。