【问题标题】:Scripts order issue in Unity 5 NetworkingUnity 5 Networking 中的脚本顺序问题
【发布时间】:2016-11-09 10:30:01
【问题描述】:

我刚开始在 Unity5 中使用新的统一网络系统。今天我发现了一件我无法理解的奇怪事情。

我制作了 2 个新脚本并将“Debug.Log”添加到 Start() 和 Update() 中,然后将 2 个脚本添加为组件禁用游戏对象,一旦游戏开始,我启用游戏对象,检查控制台窗口,一切正常。

然后如果我添加 NetworkManager 游戏对象并将“NetworkIdentity”添加到以前的日志游戏对象,启动游戏,托管游戏,日志游戏对象将自动启用,然后您将在控制台窗口中看到这一点。

Start() 和 Update() 函数似乎与它们应有的不同,我对 Unity Networking 有什么误解吗??


感谢提醒,所以我在测试中添加了“Awake()”,然后发生了更多奇怪的事情。 具有“NetworkIdentity”的游戏对象将在 StartHost() 之前调用其“Awake”以在编辑器模式下启用该游戏对象,但是一旦您进行构建,“Awake”将在 StartHost() 之后调用。这让我更加困惑。 :(

【问题讨论】:

  • 尝试唤醒而不是开始

标签: networking unity3d


【解决方案1】:

每个网络身份游戏对象在场景开始时被禁用,然后由场景管理器自动激活,如统一文档所述:

场景中具有 NetworkIdentity 组件的所有对象都将 加载场景时禁用;在客户端和服务器上。 然后,当场景完全加载时, NetworkServer.SpawnObjects() 是 调用以激活这些联网的场景对象。这将完成 服务器场景完成时由 NetworkManager 自动执行 loading - 或者可以通过用户代码直接调用(more)。

所以根据我的理解,对象是一个一个启用的,所以你的代码的登录顺序并不奇怪(每个对象一个一个启用,它们的脚本开始以相同的顺序执行)。

【讨论】:

  • 来自 Unity 论坛,他们告诉我这是一个错误,将在未来修复
  • 请参考你的答案并在这里给出答案。
  • 你可能误解了我的说法,问题是编辑器和内置播放器之间的 Awake() 行为不一致,这是不可接受的,人们必须非常小心并仔细编码以避免出现奇怪的问题游戏。
  • 好的,谢谢,但我仍在寻找网络中的附加场景加载
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多