【发布时间】:2019-04-10 00:30:55
【问题描述】:
我们正在 Unity 上构建实时战略游戏,并尝试通过网络破坏服务器和客户端上的游戏对象。 目前玩家可以随时销毁自己的物品,服务器可以销毁所有物品。但是,当客户端尝试销毁服务器(或其他客户端)的对象时,它只会在该客户端上被销毁。 (因为客户端既没有权限也没有对象是LocalPlayer)
我们尝试了不同的方法:
1。使用 Destroy(gameObject)
这显然行不通,因为它只会在本地被销毁。
2。使用 NetworkServer.Destroy(gameObject)
这失败了,因为我们没有权限。
3。使用命令销毁对象
当我们尝试在我们销毁对象的服务器上调用命令时也会失败。由于权限检查:
试图在没有权限的情况下为对象发送命令。
4。首先分配权限
我们试图通过
GetComponent<NetworkIdentity>().AssignClientAuthority(connectionToClient);
但得到错误消息:
AssignClientAuthority 只能在服务器上调用生成对象。
由于第 3 点,尝试在命令中执行此操作将失败。
还有其他方法可以销毁游戏对象吗? 销毁游戏对象的方法是什么?
编辑:我们在运行时(在命令中)通过NetworkServer.SpawnWithClientAuthority 或NetworkServer.Spawn 生成了大部分对象
【问题讨论】:
-
您是否使用
NetworkServer.Spawn创建您要删除的对象? -
告诉服务器销毁任何东西。实际上,这个问题是我不喜欢 UNet 的原因之一,也是 Unity 弃用它并重新开始的原因之一。
-
@Draco18s Unity 真的弃用 uNet?
-
@Programmer 是的。 support.unity3d.com/hc/en-us/articles/…
-
不知道。就在我真正学习它的过程中,它被弃用了……对于 OP,我建议你使用 Photon。它已经存在很长时间了,我认为它不会很快消失。
标签: unity3d multiplayer game-development