Unity PhotonView — моя проверка

Я внедряю многопользовательскую игру Photon в свою игру, и меня беспокоит мой метод проверки локального игрока.

В настоящее время я проверяю наличие локального проигрывателя в разных местах с помощью PhotonView.IsMine().

Правильно ли я говорю, что сценарий по-прежнему работает для всех клиентов, однако только локальный игрок запускает свой экземпляр сценария? Например, мой скрипт перемещения привязан ко всем клиентам, но я проверяю PhotonView.IsMine() перед применением перемещения, чтобы клиенты не могли контролировать друг друга.

Кто-нибудь знает о каких-либо передовых практиках или методах, которые вы используете в своих проектах? Я не думаю, что мой метод очень хорош, и его можно было бы сделать намного более эффективным и простым в настройке.


person Kurtis    schedule 19.06.2019    source источник


Ответы (1)


Вы можете проверить в методе Start, принадлежит ли экземпляр вам, и просто удалить компонент (используя метод Destroy). Если вам нужно, чтобы некоторые функции из этого сценария выполнялись во всех ваших клиентах, используйте их в другом сценарии, который вы не будете удалять.

person Mateus Fernandes    schedule 19.06.2019
comment
Это здорово, это работает именно так, как я хотел. Если вы не возражаете, у меня есть несколько вопросов относительно этого решения: каков предел удаления компонентов? Можно ли удалить все, кроме фотонного представления? И как это работает? так как пробуждение вызывается только у новых клиентов, а не у тех, которые уже были. - person Kurtis; 19.06.2019
comment
Если вам просто нужны синхронизированные игровые объекты, PhotonView и Photon Transform View сделают эту работу. Ничего больше. Awake будет вызываться на новых клиентах, но поскольку скрипт уже находится в игровом объекте, все клиенты будут вызывать его, проверять, является ли он владельцем, и при необходимости удалять. Я бы порекомендовал вам также удалить такие компоненты, как жесткие тела, если они не ваши. Пусть физика работает только локально. - person Mateus Fernandes; 19.06.2019
comment
Унаследуйте MonoBehaviourPunCallbacks и используйте вместо него override public void OnEnable(). Не забудьте позвонить base.OnEnable();! - person Marcos Pereira; 21.02.2021