Проблема с использованием 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
}
Другие вопросы по тегам