PUN2是啥东西?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PUN2是啥东西?相关的知识,希望对你有一定的参考价值。

参考技术A 手机的PUN2码,一种类似于第二级密码之类的密码。有需要的时候可以去移动(你的是移动就去移动)要求解决。比如手机卡被锁了。本回答被提问者采纳 参考技术B 手机的PUN2码

PUN 2 Unity Photon.LoadLevel、IOnEventCallback 和 RaiseEvent

【中文标题】PUN 2 Unity Photon.LoadLevel、IOnEventCallback 和 RaiseEvent【英文标题】:PUN 2 Unity Photon.LoadLevel, IOnEventCallback and RaiseEvent 【发布时间】:2020-03-10 21:44:04 【问题描述】:

我正在使用 PUN 2 开发基于多人回合的游戏。在使用 RaiseEvent 加载场景后实例化对象时遇到问题。

一切都是从这个问题开始的:Synchronizing GameObjects with Players 但看来我必须先解决其他问题。让我解释一下。

我有一个带有“加入队列”按钮的场景,如果没有其他可用且 MaxPlayerCount = 2,它会创建一个房间。所以在第二个玩家加入后,我使用 Photon.LoadLevel(sceneName) 来加载游戏场景。在游戏场景中,我有一个生成一些对象的组件。在这个组件上,我使用 PhotonNetwork.RaiseEvent 将这些对象的位置发送给其他玩家。

PhotonView photonView = containerTile.GetComponent<PhotonView>();
if(PhotonNetwork.AllocateViewID(photonView))

    object[] data = new object[]
    
        containerTile.transform.position, containerTile.transform.rotation, photonView.ViewID
    ;

    RaiseEventOptions raiseEventOptions = new RaiseEventOptions
    
        Receivers = ReceiverGroup.Others,
        CachingOption = EventCaching.AddToRoomCache
    ;

    SendOptions sendOptions = new SendOptions
    
        Reliability = true
    ;

    PhotonNetwork.RaiseEvent(CustomEvent, data, raiseEventOptions, sendOptions);


public void OnEvent(EventData photonEvent)
        
    if(photonEvent.Code == CustomEvent)
    
        object[] data = (object[])photonEvent.CustomData;

        GameObject containerTile = (GameObject)Instantiate(containerPrefab, (Vector3)data[0], (Quaternion)data[1]);
        PhotonView photonView = containerTile.GetComponent<PhotonView>();
        photonView.ViewID = (int)data[2];
    

“CustomEvent”是我试图通过使用 IOnEventCallback 接口实现“OnEvent”回调来获取的自定义事件。当调用 OnEvent 时,EventData 代码是“PropertiesChanged(253)”,从文档中它似乎是在 MasterClient 更改房间时调用的,所以我猜 PhotonNetwork.LoadLevel 会这样做。

他们的文档说“当您使用广播选项“打开”调用 OpSetProperties 时,会触发此事件。它包含正在设置的属性。 我正在尝试跳过此 253 事件代码,但我不知道应该如何将“广播选项”设置为关闭,或者我想要实现的方法。

感谢阅读!

【问题讨论】:

只是为了理解,PUN 对PhotonNetwork.Instantiate 一个对象有一个原生特性,它可以让你将位置和旋转传递给其他人。你能解释一下为什么这不是你使用的吗? 【参考方案1】:

您不能将自己实例化为网络游戏对象,PUN 不能那样工作。

改为:

使用PhotonNetwork.Instantiate()

使用 IPunPrefabPool 接口创建您自己的系统来生成网络实例(查看 DefaultPool 类了解其内部实现方式)

请务必先完成基础教程,掌握 PUN 的几个重要特性以及如何开始使用它。

https://doc.photonengine.com/en-us/pun/v2/demos-and-tutorials/pun-basics-tutorial/player-instantiation

【讨论】:

嗨,我在网络上实例化资产包对象时遇到问题。我已经尝试过你的解决方案,它在大厅领导端成功实例化对象,但在客户端没有任何反应......你能否提供更多提示,如何在客户端也实例化相同......如果有合适的例子因为那更明显......谢谢......

以上是关于PUN2是啥东西?的主要内容,如果未能解决你的问题,请参考以下文章

HTML5是啥东西?

Spinfire是啥东西啊?

MSXML是啥东西?有啥用?

Linux 是啥东西?

请问SAP是啥东西?

HashMap是啥东西