unity3d network教程

2015年03月06日 15:37 0 点赞 0 评论 更新于 2025-11-21 16:44

在本教程中,我们将详细介绍 OnNetworkInstantiate 函数。当使用 Network.Instantiate 方法对一个物体进行网络实例化时,会在该物体上调用这个函数。这个函数对于禁用或启用已实例化物体的组件非常有用,因为物体的行为取决于它是在本地客户端还是在远端客户端。

需要注意的是,在 NetworkMessageInfo 里的 networkView 属性不能在 OnNetworkInstantiate 函数中使用。此外,仅使用 OnNetworkInstantiate 函数是不够的,还需要进行本地判断,可通过 NetworkView.isMine 来实现,该属性是布尔类型。更多相关内容可参考 Unity3D 教程手册

下面我们通过代码示例来深入理解:

代码前置说明

  1. 假设我们的移动脚本名为 move.js
  2. 该脚本必须绑定在要使用 Network.Instantiate 进行实例化的对象上,这里我们以预制的 cube 为例。

代码示例

var thisName: String = "playername";

function OnNetworkInstantiate(msg: NetworkMessageInfo) {
// 如果是本地,即该客户端的游戏对象
if (networkView.isMine) {
name = "player";
}
// 如果是其他客户端的游戏对象
else {
thisName = "Remote" + Random.Range(1, 10);
name += thisName;
GetComponent(move).enabled = false;
}
}

在上述代码中,当 OnNetworkInstantiate 函数被调用时,会先判断当前实例化的物体是否属于本地客户端。如果是本地客户端的物体,将其名称设置为 player;如果是其他客户端的物体,会为其生成一个随机名称,并禁用该物体上的 move 脚本组件。

作者信息

boke

boke

共发布了 3994 篇文章