【问题标题】:How to synchronized a canvas with Photon Engine in Unity如何在 Unity 中将画布与 Photon Engine 同步
【发布时间】:2021-03-03 09:57:45
【问题描述】:

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

【问题讨论】:

    标签: c# unity3d networking synchronization photon


    【解决方案1】:

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

    我有两个解决方案:

    Observable Component

    您可以编写一个自定义的 observable 组件,并将其添加到 PhotonView:

    要使用这个功能,脚本必须实现IPunObservable接口。

    public class CustomObservable : MonoBehaviourPunCallbacks, IPunObservable
    {
        [SerializeField] PlayerController playerController;
    
        public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
        {
            if (stream.IsWriting)
            {
                stream.SendNext(playerController.playerNumber);
                stream.SendNext(playerController.playerScore);
            }
            else
            {
                playerController.playerNumber = (int)stream.ReceiveNext();
                playerController.playerScore = (float)stream.ReceiveNext();
            }
        }
    }
    

    Custom Properties

    您还可以使用自定义属性在所有玩家之间同步数据。

    Photon 的自定义属性包含一个键值哈希表,您可以按需填写。这些值在客户端上同步和缓存,因此您不必在使用前获取它们。 SetCustomProperties() 将更改推送给其他人。

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

    PhotonNetwork.CurrentRoom.SetCustomProperties(Hashtable propsToSet)
    

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

    OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)
    

    【讨论】:

    • 我不确定如何使用第一个示例与画布进行交互,而且我对自定义属性的经验更少。可以处理与 RPC 的同步吗?我认为这是我能理解的唯一同步方式,我可以尝试创建一些让你与画布交互的 RPC,所以当主客户端“打开电视”它调用和 RPC 模仿这个动作,因此每个人都会也激活它。感谢您的回答! :)
    • @CioCasado 是的,RPC 很好,可能非常适合your use-case
    • 我工作了!非常感谢您的回答,最后我可以理解一点 Observable Component 和 Custom Properties 所以如果它不起作用,我会尝试使用前者!
    • 很高兴它有帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多