PUN☀️八、拓展网络同步:RPCs 和 Properties

简介: PUN☀️八、拓展网络同步:RPCs 和 Properties

🟥 RPCs

RPCs,即Remote Procedure Call (RPC)

它的作用是:

玩家调用自己的方法。且这个调用,可在所有客户端等同步。RPCs 和 OnPhotonSerializeView 相比,写法更简便。

RPC适合哪些场景呢?

非频繁更新(玩家的行动),比如改变角色的装备、使用工具或结束一个回合的游戏,都是不常见的动作(相对于位置,角色状态这些频繁更新的属性来说)。这些动作基于用户的输入,用 RPC 发送方便。

效果展示:

使用RPCs同步显示一个盒子

如何使用呢?

比如,我们想实现,显示我们自己的宝剑,且在各个客户端同步。

若按以前我们的思路,可能用 OnPhotonSerializeView ,先写代码传读写数据,再挂载到 PhotonView上进行同步。

现在,我们一步便可实现:

1.显示宝剑的方法 ,用 [PunRPC] 标记。

2.调用该方法: photonView.RPC(“显示宝剑方法”, RpcTarget.All); 完成。

代码如下:

using UnityEngine;
using Photon.Pun;
 
public class GameManager_Skode : MonoBehaviourPunCallbacks
{
    //宝剑
    public GameObject obj;
 
    private void Update()
    {
        if (!photonView.IsMine)
            return;
 
        if (Input.GetKeyDown(KeyCode.C))
        {
            photonView.RPC("ShowSword", RpcTarget.All);
 
            //发送给除自己以外的所有人
            //photonView.RPC("ShowSword", RpcTarget.Others);
        }
    }
 
 
    #region PunRPC
 
    [PunRPC]
    public void ShowSword()
    {
        obj.SetActive(true);
    }
 
    #endregion
}


🟧 Properties

Properties的作用:

CustomProperties适合非常罕见的更改同步。

比如我们想知道服务器房间中,那个玩家是工程师这个职业。那么我们就可以先给自己设置职业属性,并同步到服务器,接着,其他人就能从服务器,知道你是什么职业了。

同时,若玩家B只能等玩家A做完他的操作,才能进行下一步。那么,也可以通过这个 Properties,当玩家A完成自己任务,将状态同步到服务器,玩家B的检测属性更改的回调,会判断A是不是完成了。完成了B就能开始他的操作了。

CustomProperties分为两种:

  • 一种是房间的自定义属性CustomProperties,
  • 一种是玩家(Player)的自定义属性CustomProperties。
    知识点:

值在客户端上被同步和缓存,因此你不必在使用前获取它们,现用现取即可。

使用流程:

1.将数据同步到网络

2.从网络获取该值,使用。


1️⃣ 玩家(Player)的自定义属性

该值可随时更新,不存在更新时刻必须在Start等限制。

//要同步的属性的值
    public string myJob;
 
    void Start()
    {
        //将值同步到网络
        Hashtable props = new Hashtable() { { "Job", myJob } };
        PhotonNetwork.LocalPlayer.SetCustomProperties(props);
    }

获取方式有两种:

  • 一种是实时获取,需要时获取。
  • 一种是回调。


🚩 实时获取方式

该值可以随时获取,获取到的都是最新的。

foreach (Player p in PhotonNetwork.PlayerList)
{
    object tarJob;
    if (p.CustomProperties.TryGetValue("Job", out tarJob))
    {
        print((string)tarJob);
    }
}


🚩 回调获取

需继承 MonoBehaviourPunCallbacks

可使用:

  • 玩家自定义属性回调、
  • 房间自定义属性回调。
    //玩家的自定义信息回调
//玩家的自定义信息回调
public override void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProps)
{
    //ContainsKey(你想使用的key)
    if (changedProps != null && changedProps.ContainsKey(你想使用的key))
    {
        print(changedProps[你想使用的key]);
    }
}


2️⃣ 房间的自定义属性

跟玩家的自定义属性使用方法类似,需继承 MonoBehaviourPunCallbacks。

🚩 同步到网络

Hashtable setScene = new Hashtable();
setScene["curScn"] = 1;
 
PhotonNetwork.CurrentRoom.SetCustomProperties(setScene);


🚩 实时获取

if(PhotonNetwork.CurrentRoom.CustomProperties.ContainsKey("curScn"))
    print(PhotonNetwork.CurrentRoom.CustomProperties["curScn"]);


🚩 回调获取房间自定义属性

public override void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)
{
    //ContainsKey(你想使用的key)
    if (propertiesThatChanged.ContainsKey("curScn"))
    {
        print(propertiesThatChanged["curScn"]);
    }
}


相关文章
|
6月前
|
存储 网络协议 Java
深入理解Linux网络——内核与用户进程协作之同步阻塞方案(BIO)
在上一部分中讲述了网络包是如何从网卡送到协议栈的(详见深入理解Linux网络——内核是如何接收到网络包的),接下来内核还有一项重要的工作,就是在协议栈接收处理完输入包后要通知到用户进程,如何用户进程接收到并处理这些数据。
PHP:guzzlehttp/guzzle发送同步和异步网络请求
PHP:guzzlehttp/guzzle发送同步和异步网络请求
721 0
|
2月前
|
机器学习/深度学习 安全 网络安全
云端盾牌:云计算时代的网络安全守护在这个数字脉搏加速跳动的时代,云计算以其高效、灵活的特性,成为推动企业数字化转型的强劲引擎。然而,正如每枚硬币都有两面,云计算的广泛应用也同步放大了网络安全的风险敞口。本文旨在探讨云计算服务中网络安全的关键作用,以及如何构建一道坚不可摧的信息防线,确保数据的安全与隐私。
云计算作为信息技术领域的革新力量,正深刻改变着企业的运营模式和人们的生活。但在享受其带来的便利与效率的同时,云服务的安全问题不容忽视。从数据泄露到服务中断,每一个安全事件都可能给企业和个人带来难以估量的损失。因此,本文聚焦于云计算环境下的网络安全挑战,分析其根源,并提出有效的防护策略,旨在为云服务的安全使用提供指导和参考。
63 8
|
3月前
|
存储 缓存 定位技术
如果遇到网络延迟问题,有哪些方法可以快速解决以保证视频源同步?
如果遇到网络延迟问题,有哪些方法可以快速解决以保证视频源同步?
|
3月前
|
UED 存储 数据管理
深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
75 0
|
4月前
|
安全 NoSQL Java
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
|
6月前
|
网络协议 算法 开发者
如何实现网络同步?
【5月更文挑战第3天】如何实现网络同步?
121 9
|
6月前
|
网络协议
LabVIEW 通过网络同步多台计算机系统时间的方法与例程
LabVIEW 通过网络同步多台计算机系统时间的方法与例程
74 1
|
5月前
计算机网络——物理层-传输方式(串行传输、并行传输,同步传输、异步传输,单工、半双工和全双工通信)
计算机网络——物理层-传输方式(串行传输、并行传输,同步传输、异步传输,单工、半双工和全双工通信)
146 0