C# 如何在Unity中将画布与光子引擎同步

C# 如何在Unity中将画布与光子引擎同步,c#,unity3d,networking,synchronization,photon,C#,Unity3d,Networking,Synchronization,Photon,我正在尝试将画布与光子引擎同步,以便每个玩家都能看到它。这个画布将是一种电视,任何玩家都可以打开,其他人都可以观看。我可以同步一个立方体,将PhotonView和PhotonRigidBody组件添加到预置中,但当我尝试使用画布时,它根本不起作用。 有人能告诉我需要哪些组件来完成这项工作吗?如果需要,我应该用一个额外的脚本来处理什么(即转移所有权)。画布没有什么特别之处,但可以锁定到位 我为您提供了两种解决方案: : 您可以编写自定义可观察组件,并将其添加到PhotonView: 要使用此函数,

我正在尝试将画布与光子引擎同步,以便每个玩家都能看到它。这个画布将是一种电视,任何玩家都可以打开,其他人都可以观看。我可以同步一个立方体,将PhotonView和PhotonRigidBody组件添加到预置中,但当我尝试使用画布时,它根本不起作用。
有人能告诉我需要哪些组件来完成这项工作吗?如果需要,我应该用一个额外的脚本来处理什么(即转移所有权)。

画布没有什么特别之处,但可以锁定到位

我为您提供了两种解决方案:

您可以编写自定义可观察组件,并将其添加到PhotonView:

要使用此函数,脚本必须实现IPunObservable接口

您还可以使用自定义属性跨所有播放器同步数据

光子的自定义属性由一个键值哈希表组成,您可以根据需要填充该哈希表。这些值被同步并缓存在客户端上,因此您不必在使用之前获取它们。更改由SetCustomProperties()推送到其他更改

这有什么用?通常,房间和玩家有一些与游戏对象无关的属性:当前地图或玩家角色的颜色(想想:2d跳跃和奔跑)。这些可以通过对象同步或RPC发送,但使用自定义属性通常更方便

您可以编写一个使用光子回调的脚本,并更新UI元素

OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)

我不知道如何使用第一个示例与画布交互,而且我对自定义属性的经验更少。是否可以使用RPC处理同步?我认为这是我能理解的唯一同步方式,我可以尝试创建一些RPC,让您与画布交互,因此当主客户端“打开电视”时,它会调用和RPC来模拟此操作,因此每个人都会激活它。谢谢你的回答!:)@CioCasado是的,RPC很好,可能非常适合。我工作过!非常感谢你的回答,最后我可以理解一些可观察的组件和自定义属性,所以如果它不起作用,我会尝试使用其中一个Former!很高兴这有帮助!:)
PhotonNetwork.CurrentRoom.SetCustomProperties(Hashtable propsToSet)
OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)