Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
来源:互联网 发布:打开数据漫游会收费没 编辑:程序博客网 时间:2024/06/05 06:43
孙广东 2015.7.12
网络系统 具有网络中执行操作actions 的方法。这些类型的actions 有时是调用远程过程调用(Remote Procedure Calls)。在网络系统中有两种类型的 Rpc :
1、Commands 命令- 从客户端调用 和 运行在服务器上。
2、ClientRpc calls - 并在服务器上调用 和 客户端上运行。
下图显示了远程操作的方向:
Commands:
命令是 从在客户端player对象 发送到服务器上的player对象。为了安全,命令 只能从YOUR player 对象发送,所以你不能控制其他玩家的对象。要使一个函数成为一个命令,将[Command] 自定义特性 添加到它,并添加 "Cmd" 前缀。当它在客户端被调用时,此函数将现在运行在服务器上。任何参数自动将传递到服务器的命令。
Commands 函数 命令功能必须有前缀 "Cmd"。这是一个暗示,当阅读代码调用该命令时,此函数是特殊,并不像正常的函数在本地被调用.
class Player : NetworkBehaviour{ public GameObject bulletPrefab; [Command] void CmdDoFire(float lifeTime) { GameObject bullet = (GameObject)Instantiate( bulletPrefab, transform.position + transform.right, Quaternion.identity); var bullet2D = bullet.GetComponent<Rigidbody2D>(); bullet2D.velocity = transform.right * bulletSpeed; Destroy(bullet, lifeTime); NetworkServer.Spawn(bullet); } void Update() { if (!isLocalPlayer) return; if (Input.GetKeyDown(KeyCode.Space)) { CmdDoFire(); } }}
小心, 它将每一帧从客户端发送命令! 这会导致大量的网络流量。
默认情况下,命令都是zero零 - 默认在可靠信道上发送的。因此,默认情况下所有命令可靠地都发送到服务器。这可以定制 “Channel” 参数的 [Command] 自定义属性。此参数应为一个整数,表示通道数。
Channel 通道 1 是设置在默认情况下、是不可靠的通道,所以要使用这个,使用命令属性 参数的值为 1的 ,: 像这样的
[Command(channel=1)]
ClientRpc Calls:
ClientRpc 调用是,从服务器上的对象发送到客户端上的对象。他们可以从任何服务器对象发送,一个已经产生了的 NetworkIdentity 。因为服务器具有authority授权,然后没有安全性方面的问题,服务器对象能够发送这些调用。 要做成 ClientRpc 调用一个函数,将 [ClientRpc] 自定义特性添加到函数上,并添加 "Rpc" 前缀。它在服务器上调用时,此函数将运行在客户端上。任何参将数自动传递给 ClientRpc 调用客户端。
ClientRpc 函数必须具有前缀 "Rpc" 。这是一个暗示,阅读代码调用该方法时,此函数是特殊,并不像正常的功能在本地调用.
class Player : NetworkBehaviour{ [SyncVar] int health; [ClientRpc] void RpcDamage(int amount) { Debug.Log("Took damage:" + amount); } public void TakeDamage(int amount) { if (!isServer) return; health -= amount; RpcDamage(amount); }}
当作为一个 LocalClient 的主机游戏运行时, ClientRpc 将被将被LocalClient调用 -,即使它是在相同的服务器进程。所以 LocalClients 和 RemoteClients 的行为是相同的, 对于ClientRpc 调用。
- Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
- Unity5.1 新的网络引擎UNET(三) UNET NetworkManager
- Unity5.1 新的网络引擎UNET(五) UNET Network Messages
- Unity5.1 新的网络引擎UNET(六) UNET Multiplayer Lobby
- Unity5.1 新的网络引擎UNET(七) UNET 单人游戏转换为多人
- Unity5.1 新的网络引擎UNET(八) UNET 系统概括
- Unity5.1 新的网络引擎UNET(九) UNET 官方推荐视频教程
- Unity5.1 新的网络引擎UNET(二) UNET 官方推荐Demo案例
- Unity5.1 新的网络引擎UNET(一) 概括1
- Unity5.1 新的网络引擎UNET(一) 概括2
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--上
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--中
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--下
- Unity5网络模块UNet介绍
- Unity5网络模块UNet介绍
- Unity5网络模块UNet介绍
- Unity5网络模块UNet介绍
- [Unity5.1]同步动画UNET
- 设计模式
- Eclipse Java注释模板设置详解
- StringTokenizer类的用法
- 8086cpu中的标志寄存器与比较指令
- maven
- Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
- HDU — 3416 Marriage Match IV(最大流+最短路)
- C语言宏定义
- MySQL新建用户,授权,删除用户,修改密码
- 网络编程Socket
- 王阳明心学感悟1——勇敢地剖析自己的内心
- 25匹马,5个赛道,取前3
- UITableView 表示图学习笔记
- 理解一般指针和指向指针的指针