[Unet] Unity Unet Spwan CallBack功能

时间:2017-06-08 08:32:10

标签: unet

问题是在服务器上,我创建一个obj,然后spwan它,但是在客户端我怎么知道对象何时被Spwaned,我想知道是否有spwan回调函数,我很抱歉我的英文在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

这可能是您正在寻找的: Custom Spawning callbacks

每当您使用它时,您现在负责在所有客户端上实例化新对象,您可以使用简单的Instantiate()来实现,就像给出的示例一样。

然而,有两点需要注意:

  • 由于某种原因,永远不会在主机上调用spawn回调,所以如果你在回调中对对象进行任何初始化,请注意在主机上你可能仍然必须在调用Spawn之后执行此操作()。
  • 我把头撞到了墙上,但似乎调用RegisterSpawnHandler()也注册了预制件,所以如果你觉得它听起来不可思议,那么在代码中的任何其他位置调用RegisterPrefab()作为同一个对象(包括NetworkManager ),您的回调将永远不会被调用。至少这是我在2017年的经历.1。

答案 1 :(得分:0)

我不知道你是否可以直接获得对spawn函数客户端的回调,但你可以将继承NetworkBehaviour的脚本附加到生成的对象,并在脚本中添加:

public class MySpawnedObject : NetworkBehaviour
{
     void Awake()
     {
          if (!isServer)
             //do what you want with your client
     }
}

但是不要忘记,如果当前可执行文件是主机,则isServer返回true,而UNET认为主机是服务器和客户端,您也可以使用将触发主机和客户端的isClient。

if (isClient)

答案 2 :(得分:0)

我不知道有任何直接的方法知道该玩家已经在服务器上生成了但是您可以在实例化您的播放器时从服务器上触发可以在每个客户端上运行的事件。因此,您可以使用ClientRPC属性

  

ClientRpc - 在服务器上调用[ ClientRpc ]属性   在当前连接到的所有客户端上执行   给定对象的服务器。 [ ClientRpc ]最常用于通知   游戏的客户变化就像分数的变化或者他们拥有的变化   死了(在所有玩家和屏幕上播放声音和死亡动画)。

喜欢附加到本地播放器的这个脚本

public class MyLocalPlayer: NetworkBehaviour
{
    int counter;
    [ClientRpc]
    public void PlayerSpawned(int extra)
    {
        Debug.Log("a player has spawned");
    }

}