我们收到了您的反馈,将根据此对教程进行审查和更新。
为了帮助您解决问题并回答您的问题:
在这种情况下您需要的 NetworkManager 并按照整个教程需要实现两个 PUN2 回调:IMatchmakingCallbacks.OnJoinedRoom
和IOnEventCallback.OnEvent
. 虽然本教程可能建议可能有两个单独的类,一个实现每个回调 (NetworkManager
和MyClass
),但没有什么反对将它们分组在一个地方。在教程的“实例化 Avatars”部分的第一个代码块中,我们看到该OnJoinedRoom
方法已被覆盖。这可能意味着原始作者假设 NetworkManager 必须是扩展MonoBehaviourPunCallbacks
类。从MonoBehaviourPunCallbacks
类继承是实现 PUN2 回调的最简单和最快的方法:它是MonoBehaviour
这允许您有选择地覆盖您需要的回调,并且只覆盖您需要的回调,它已经代表您处理回调注册和注销(分别在OnEnable
和中OnDisable
)它不需要记住所有回调的接口,它还扩展MonoBehaviourPun
了暴露的PhotonView
如果后者附加到同一个游戏对象,则很容易在属性中。但是,您应该小心,因为它并没有实现所有回调接口,而是大多数。它实现IConnectionCallbacks
, IMatchmakingCallbacks
,IInRoomCallbacks
和. 它不实现、和。PUN2 的实用程序接口也未实现,例如.ILobbyCallbacks
IWebRpcCallback
IOnEventCallback
IPunInstantiateMagicCallback
IPunObservable
IPunOwnershipCallbacks
IPunTurnManagerCallbacks
说话很便宜,给我看代码:
public class NetworkManager : MonoBehaviour, IMatchmakingCallbacks, IOnEventCallback
{
public const byte InstantiateVrAvatarEventCode = 1;
public void OnJoinedRoom() // w/o override
{
// code from the tutorial here
}
public void OnEvent(EventData photonEvent)
{
// code from the tutorial here
}
private void OnEnable()
{
PhotonNetwork.AddCallbackTarget(this);
}
private void OnDisable()
{
PhotonNetwork.RemoveCallbackTarget(this);
}
#region Unused IMatchmakingCallbacks
public void OnFriendListUpdate(List<FriendInfo> friendList)
{
}
public void OnCreatedRoom()
{
}
public void OnCreateRoomFailed(short returnCode, string message)
{
}
public void OnJoinRoomFailed(short returnCode, string message)
{
}
public void OnJoinRandomFailed(short returnCode, string message)
{
}
public void OnLeftRoom()
{
}
#endregion
}