Проблема с использованием PUN2 для многопользовательской игры в виртуальной реальности в Unity 3D
Я пытаюсь создать простую демонстрацию виртуальной реальности, в которой два пользователя могут подключаться к комнате и управлять объектами на столе. В настоящее время я следую этому руководству.
Я следил за ним шаг за шагом:
Дублированный
LocalAvatar
а такжеRemoteAvatar
префабов и переместил их в РесурсыСоздал сценарий
PhotonAvatarView
СценарийПрикреплен и настроен
PhotonAvarView
а такжеPhotonView
к обоим сборным
Проблема в том, что я застреваю в разделе "Создание аватаров", а именно в разделе:
Следующий код может быть помещен, например, в ваш уже существующий Network Manager или любой другой скрипт, который уже работает с сетевой логикой, он не принадлежит скрипту PhotonAvatarView, который мы создали ранее. Здесь мы используем обратный вызов OnJoinedRoom.
Я предполагаю, что это руководство с нуля (учитывая, что оно начинается с пустого проекта Unity), но у меня нет скрипта Network Manager, поэтому я немного запутался. Помещение этого кода в новый скрипт и просто прикрепление его к объекту не работает.
Мне не хватает некоторых частей?
1 ответ
Мы получили ваши отзывы, и руководство будет пересмотрено и обновлено на их основе.
Чтобы помочь вам с вашей проблемой и ответить на ваш вопрос:
NetworkManager, который вам нужен в этом случае и в целом, следуя инструкциям, должен реализовать два обратных вызова PUN2: IMatchmakingCallbacks.OnJoinedRoom
а также IOnEventCallback.OnEvent
. Хотя в руководстве может быть указано, что может быть два отдельных класса, каждый из которых реализует обратный вызов (NetworkManager
а также MyClass
), нет ничего против сгруппировать их в одном месте. В первом блоке кода раздела "Создание аватаров" мы видим, чтоOnJoinedRoom
метод переопределен. Это, вероятно, означает, что исходный автор предполагал, что NetworkManager должен расширятьMonoBehaviourPunCallbacks
учебный класс. Наследование отMonoBehaviourPunCallbacks
class - это самый простой и быстрый способ реализовать обратные вызовы PUN2: это MonoBehaviour
который позволяет вам выборочно переопределять нужные вам обратные вызовы и только те, которые вам нужны, он уже обрабатывает регистрацию обратных вызовов и отмену регистрации от вашего имени (соответственно в OnEnable
а также OnDisable
) он не требует запоминания всех интерфейсов обратных вызовов, а также расширяет MonoBehaviourPun
который раскрывает PhotonView
легко в свойстве, если последний прикреплен к тому же GameObject. Однако вы должны быть осторожны, поскольку он реализует не все интерфейсы обратных вызовов, а большинство. Он реализуетIConnectionCallbacks
, IMatchmakingCallbacks
, IInRoomCallbacks
, ILobbyCallbacks
а также IWebRpcCallback
. Не реализуетIOnEventCallback
, IPunInstantiateMagicCallback
, IPunObservable
а также IPunOwnershipCallbacks
. Служебные интерфейсы PUN2 также не реализованы, например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
}