博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
阅读量:4920 次
发布时间:2019-06-11

本文共 2187 字,大约阅读时间需要 7 分钟。

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



转载于:https://www.cnblogs.com/wzjhoutai/p/6752212.html

你可能感兴趣的文章
浅谈对MJRefresh(上)下拉刷新控件的理解
查看>>
MapReduce执行WordCount操作
查看>>
青蛙学Linux—Apache的MPM模式和httpd-mpm.conf
查看>>
06-图1 列出连通集 (25 分)
查看>>
mac os ssh远程链接centos提示证书错误解决方法
查看>>
Hadoop-2.9.2单机版安装(伪分布式模式)(一)
查看>>
JS页面打印预览功能
查看>>
Android - 传统蓝牙通信聊天
查看>>
【PHP】创瑞短信接口
查看>>
Final Exam Arrangement
查看>>
Android Metro风格的Launcher开发系列第一篇
查看>>
由MyEclipse内存不足谈谈JVM内存
查看>>
深刻理解一句js
查看>>
java.util.logging.Logger_01
查看>>
最短路径之弗洛伊德算法
查看>>
Less 基础语法
查看>>
GIS-002-gdal2srtmtiles使用注意事项
查看>>
SRM710 div1 MagicNim(博弈论)
查看>>
单例模式
查看>>
python qq音乐下载
查看>>