Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
孙广东 2015.7.12
网络系统 具有网络中执行操作actions 的方法。这些类型的actions 有时是调用远程过程调用(Remote Procedure Calls)。
在网络系统中有两种类型的 Rpc :
1、Commands 命令- 从client调用 和 执行在server上。
2、ClientRpc calls - 并在server上调用 和 client上执行。
下图显示了远程操作的方向:
Commands:
命令是 从在clientplayer对象 发送到server上的player对象。
为了安全,命令 仅仅能从YOUR player 对象发送。所以你不能控制其它玩家的对象。要使一个函数成为一个命令。将[Command] 自己定义特性 加入到它,并加入 "Cmd" 前缀。当它在client被调用时,此函数将如今执行在server上。不论什么參数自己主动将传递到server的命令。
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();
} }
}
小心, 它将每一帧从client发送命令! 这会导致大量的网络流量。
默认情况下。命令都是zero零 - 默认在可靠信道上发送的。因此。默认情况下全部命令可靠地都发送到server。这能够定制 “Channel” 參数的 [Command] 自己定义属性。此參数应为一个整数,表示通道数。
Channel 通道 1 是设置在默认情况下、是不可靠的通道,所以要使用这个。使用命令属性 參数的值为 1的 。: 像这种
[Command(channel=1)]
ClientRpc Calls:
ClientRpc 调用是,从server上的对象发送到client上的对象。他们能够从不论什么server对象发送。一个已经产生了的 NetworkIdentity 。
由于server具有authority授权。然后没有安全性方面的问题。server对象能够发送这些调用。 要做成 ClientRpc 调用一个函数,将 [ClientRpc] 自己定义特性加入到函数上。并加入 "Rpc" 前缀。它在server上调用时,此函数将执行在client上。
不论什么參将数自己主动传递给 ClientRpc 调用client。
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调用 -。即使它是在同样的server进程。所以 LocalClients 和 RemoteClients 的行为是同样的。 对于ClientRpc 调用。
Unity5.1 新的网络引擎UNET(四) UNET Remote Actions的更多相关文章
- Unity5.1 新的网络引擎UNET(二) UNET 官方推荐Demo案例
http://blog.csdn.net/u010019717/article/details/46873153 视频 http://www.iqiyi.com/playlist391685502.h ...
- Unity5.1 新的网络引擎UNET(九) UNET 官方推荐视频教程
孙广东 2015.7.14 在新的网络引擎出现之前,Unity提供的是 内置 Raknet网络引擎, 这一次Unity想更新UGUI一样,花了大的手笔更新了, UNET. 原来的旧的网络组件 被提示 ...
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--下
孙广东 2015.7.21 本节提供了与网络系统一起使用的组件的具体信息. 10.Network Proximity Checker Suggest a change Success! Than ...
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--中
孙广东 2015.7.21 本节提供了与网络系统一起使用的组件的具体信息. 3.NetworkClient NetworkClient 是一个 HLAPI 类,管理网络连接到服务器 - - 相应着 U ...
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--上
http://blog.csdn.net/u010019717/article/details/46993697 孙广东 2015.7.21 本节提供了与网络系统一起使用的组件的详细信息. 1.Ne ...
- Unity5.1 新的网络引擎UNET(八) UNET 系统概括
孙广东 2015.7.12 Server and Host 在Unity 的 网络系统,游戏有 一个server和多个client. 当没有专用的server时,client之中的一个扮演s ...
- Unity5.1 新的网络引擎UNET(七) UNET 单人游戏转换为多人
单人游戏转换为多人 孙广东 2015.7.12 本文档描写叙述将单人游戏转换为使用新的网络系统的多人游戏的步骤.这里描写叙述的过程是简化,对于一个真正的游戏事实上须要更高级别版本号的实际 ...
- Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- Unity5 的新旧延迟渲染Deferred Lighting Rendering Path
unity5 的render path ,比4的区别就是使用的新的deferred rendering,之前的4的deferred rendering(其实是light prepass)也被保留了下来 ...
随机推荐
- QT5的程序打包发布(将QT5的工程项目打包成一个exe程序)
最近,在学习QT5的过程中,想尝试着把自己写的工程程序给打包发布出来,在任何一台windows系统都能运行,这样就不会限于电脑需不需要安装QT安装包了. 首先,先介绍自己使用的环境.我使用的QT版本是 ...
- windows环境phpstorm调试环境搭建
一:安装设置xdebug 这个一般有两个步骤1:浏览器的xdebug插件安装,一般用firefox的插件,chrome好像不太好使,chrome安装后的 效果 安装后如下图所示,需要配置IDEKEY ...
- Axios使用文档总结
vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios.Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 一.安装 ...
- CCPlatformConfig(设置执行平台 iOS android win32等。。。)
#ifndef __CC_PLATFORM_CONFIG_H__ #define __CC_PLATFORM_CONFIG_H__ /** Config of cocos2d-x project, p ...
- centos下安装pyspider
环境: * CentOS release 6.4 (Final) * Python 2.6.6 pip install pyspider ,发现lxml没有安装好 直接sudo yum insta ...
- C#计算时间间隔的方法小结
初始化两个时间变量用于演示实例. DateTime dt1 = new DateTime(2013, 10, 13, 19, 15, 50); DateTime dt2 = new DateTime( ...
- Deep Learning论文笔记之(三)单层非监督学习网络分析
Deep Learning论文笔记之(三)单层非监督学习网络分析 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感 ...
- 如何更改Docker默认的images存储位置
Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/vda1,当有多个镜像时,/dev/vda1的空间可能不足,我们可以把d ...
- j2ee高并发时使用全局变量需要注意的问题
原文:https://blog.csdn.net/jston_learn/article/details/21617311 开发中,全局变量的使用很频繁,但对于多线程的访问,使用全局变量需要注意的地方 ...
- Python-正确使用Unicode
正确处理文本,特别是正确处理Unicode.是个老生常谈的问题,有时甚至会难倒经验丰富的开发者.并不是因为这个问题很难,而是因为对软件中的文本,开发者没有正确理解一些关键概念及其表示方法.在Stack ...