首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity Unet Spwan CallBack函数

Unity Unet Spwan CallBack函数
EN

Stack Overflow用户
提问于 2017-06-08 16:32:10
回答 3查看 515关注 0票数 0

问题是,在服务器上,我创建了一个obj,并将其spwan,但在客户端,我如何知道对象何时被Spwaned,我想知道是否有spwan回调函数,我很抱歉我的英语。提前感谢您的帮助!

EN

回答 3

Stack Overflow用户

发布于 2017-10-25 15:41:08

这可能就是你要找的:Custom Spawning callbacks

无论何时使用它,您现在都要负责在所有客户机上实例化新对象,您可以使用一个简单的Instantiate()来实现,就像给出的示例一样。

然而,有两个重要的警告:

由于某种原因,派生回调永远不会在主机上被调用,所以如果你在回调中为对象做任何初始化,请注意,在主机上调用

  • ()之后,你可能仍然需要这样做。

  • 这次我的头撞到了墙上,但似乎调用RegisterSpawnHandler()的也注册了预置的,所以听起来很不可思议,如果你在代码中的任何其他地方为同一对象调用RegisterPrefab() (包括 NetworkManager),你的回调将永远不会被调用。至少这是我在2017.1的经历。
票数 1
EN

Stack Overflow用户

发布于 2017-06-08 21:31:36

我不知道您是否可以直接回调到派生函数客户端,但您可以将继承NetworkBehaviour的脚本附加到派生的对象,并在脚本中添加以下内容:

代码语言:javascript
复制
public class MySpawnedObject : NetworkBehaviour
{
     void Awake()
     {
          if (!isServer)
             //do what you want with your client
     }
}

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

代码语言:javascript
复制
if (isClient)
票数 0
EN

Stack Overflow用户

发布于 2017-08-24 19:12:54

我不知道有什么直接的方法可以知道player是在服务器上产生的,但你可以从服务器上触发一个事件,当你实例化你的player时,这个事件可以在每个客户端上运行。因此,您可以使用ClientRPC属性

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

就像这个附加到本地播放器上的脚本

代码语言:javascript
复制
public class MyLocalPlayer: NetworkBehaviour
{
    int counter;
    [ClientRpc]
    public void PlayerSpawned(int extra)
    {
        Debug.Log("a player has spawned");
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44430540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档