孙广东   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 调用。



最新文章

  1. Unity 官网教程 -- Multiplayer Networking
  2. jQuery中使用ajax,$.post
  3. docker网络配置方法总结
  4. 【Java每日一题】20161107
  5. android中无限循环滑动的gallery实例
  6. Bridge 桥梁模式 桥接模式
  7. Windows Server 2008 R2 IIS重装
  8. http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000680.html
  9. 编译的依赖不能vs的release工程
  10. Friends and Subsequences
  11. JSP等模板引擎已死,大前端为趋势
  12. 2019 To do List
  13. GitLab 环境搭建【CentOS7】
  14. [PA2014]Iloczyn
  15. ROS 订阅图像节点(1)
  16. 【Java】【图形】
  17. [原创]delphi在win7下创建共享文件夹源代码
  18. 真实的人类第三季/全集Humans迅雷下载
  19. 从Web抓取信息
  20. AngularJs(SPA)单页面SEO以及百度统计应用(上)

热门文章

  1. fragment shader的优化
  2. Java自定义注解Annotation详解
  3. AWK 怎么读取标准输入(STDIN)
  4. Helpers.parallel_bulk in Python not working?
  5. IE测试CSS兼容性测试
  6. JMeter 一:Elements of a Test Plan
  7. 登录首页时报错:java.lang.IllegalArgumentException (不合法的参数异常)
  8. 学会Git玩转Github笔记(二)——Git使用
  9. Struts2中防止表单重复提交,global-results定义全局结果处理
  10. &lt;转&gt;得到其它进程的命令行