Пятница, 29 Ноября 2024, 07:14

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема с PUN
lakorisДата: Суббота, 26 Июля 2014, 19:34 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Здравствуйте. У меня такая проблема с Photon Unity Network.
На сцене есть некий скрипт, в котором висит вся информация о главном герое, управление над ним, прочие важные манипуляции.
По сути, у каждого игрока на сцене свой такой объект. Он не спаунится когда они заходят, он просто изначально висит на сцене.
Проблема вот в чем: если игрок2 зайдет, то он обратится к этому скрипту игрока1, а не к своему. Бред, конечно. да.
Пробовал исправить это таким путем:
Код

if(photonView.isMine) GameObject.Find("GameController").GetComponent<GameTime>().enabled = true;
         else GameObject.Find("GameController").GetComponent<GameTime>().enabled = false;

но игроки просто к чертям вырубают скрипты друг у друга и все smile

Подумываю перевесить скрипт на сам объект игрока, что будет спаунится. (переписывать много надо)
Кто что думает насчет?
GantZ_YakaДата: Суббота, 26 Июля 2014, 23:22 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Можно задать в префабе поле для скрипта (public GameTime GameTimeScript;)
и здесь же прописать в Start() эту самую проверку на isMine. Если isMine - ищи скрипт в сцене, пихай его в поле, если нет - не ищи, поле останется null.
И там, где спавнящийся игрок обращается к этому скрипту сделать проверку: если GameTimeScript != null, значит объект - твой, все ок, можем туда залезть; если == null, значит объект чужой, никуда не лезем.
А смысл имеет перевесить скрипт с на объект в том случае, если в нем хранится индивидуальная информация, которую необходимо синхронизировать между игроками (HP, MP и т.д.). Если же он влияет только на управление персонажем - то не обязательно.
lakorisДата: Воскресенье, 27 Июля 2014, 01:23 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
GantZ_Yaka, Спасибо за ответ)
Скрипт я перенес на персонажа, все работает, но есть одно но!
Код
    void Awake()
     {
GameObject.FindGameObjectWithTag("GameController").GetComponent<WorkerInGame>().WT = gameObject.GetComponent<GameTime>();
     }


При входе каждый игрок закидывает в объект на сцене свой ГО персонажа. Никакой передачи по сети нет, Photon View на объекте не висит, но, О, ЧУДО!, при заходе второго игрока, у первого эта переменная магическим образом меняется.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг