【发布时间】:2017-06-08 08:32:09
【问题描述】:
问题是在服务端,我创建了一个obj,然后spwan它,但是在客户端我怎么知道这个对象什么时候Spwaned,我想知道有没有spwan回调函数,很抱歉我的英语。提前感谢您的帮助!
【问题讨论】:
标签: unet
问题是在服务端,我创建了一个obj,然后spwan它,但是在客户端我怎么知道这个对象什么时候Spwaned,我想知道有没有spwan回调函数,很抱歉我的英语。提前感谢您的帮助!
【问题讨论】:
标签: unet
这可能是您正在寻找的: Custom Spawning callbacks
每当您使用它时,您现在都负责在所有客户端上实例化新对象,您可以像给出的示例中那样使用简单的 Instantiate() 来做到这一点。
但是有两个重要的警告:
【讨论】:
我不知道你是否可以直接获取到 spawn 函数客户端的回调,但你可以将一个继承 NetworkBehaviour 的脚本附加到生成的对象,并将其添加到脚本中:
public class MySpawnedObject : NetworkBehaviour
{
void Awake()
{
if (!isServer)
//do what you want with your client
}
}
但不要忘记,如果当前可执行文件是主机,isServer 返回 true,而 UNET 将主机视为服务器和客户端,您也可以使用 isClient 来触发主机和客户端。
if (isClient)
【讨论】:
我不知道任何直接的方法可以知道该玩家已在服务器上生成,但您可以在实例化您的玩家时从服务器触发一个可以在每个客户端上运行的事件。因此,您可以使用 ClientRPC 属性
ClientRpc- 在服务器上调用 [ClientRpc] 属性并且 在当前连接到的所有客户端上执行 给定对象的服务器。 [ClientRpc] 最常用于通知 游戏的客户变化就像分数的变化或他们有 死亡(在所有玩家的屏幕上播放声音和死亡动画)。
喜欢这个脚本附加到你的本地播放器
public class MyLocalPlayer: NetworkBehaviour
{
int counter;
[ClientRpc]
public void PlayerSpawned(int extra)
{
Debug.Log("a player has spawned");
}
}
【讨论】: