[РЕШЕНО] Создание префаба Объекта у другого игрока [РЕШЕНО]
|
|
serezha | Дата: Четверг, 04 Февраля 2021, 21:08 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| С одного клиента при нажатии на кнопку "Z" создается префаб куба. Если смотреть с других клиентов то они видят, что куб появляется не у того игрока, который нажимал кнопку.
Что нужно исправить в коде, чтобы игроки видели куб только у того игрока, который его создал?
код:
void Awake () { Point = Player.transform.GetChild (3).gameObject; Cub = Resources.Load("Cubik"); }
[RPC] public void RpcKubik() { if (GetComponent<NetworkView> ().isMine == true) { GameObject Kubik = (GameObject)Network.Instantiate (Cub, Player.transform.position, Player.transform.rotation, 1); Kubik.transform.position = Point.transform.position; } }
void Update () { if (Input.GetKeyDown (KeyCode.Z)) { GetComponent<NetworkView>().RPC("RpcKubik", RPCMode.All); } }
Player - префаб игрока Cub - префаб Куба Point - точка где появляется куб, является дочерним объектом у Player, перемещается вместе с игроком.
Вопрос решен!
Сообщение отредактировал serezha - Четверг, 02 Декабря 2021, 22:33 |
|
| |
drcrack | Дата: Пятница, 05 Февраля 2021, 01:50 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| в чем смысл вызова rpc в которой стоит проверка которая ограничивает ее владельцем обьекта? не проще ли сразу Network.Instantiate вызвать? а по проблеме, скорее всего надо так:
Код GameObject Kubik = (GameObject)Network.Instantiate (Cub, Point.transform.position, Point.transform.rotation, 1); а следующую строчку убрать
не работал со встроенной сетью в юнити, но по аналогии с PUN должно быть именно так
Сообщение отредактировал drcrack - Пятница, 05 Февраля 2021, 01:51 |
|
| |
serezha | Дата: Пятница, 05 Февраля 2021, 11:48 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата drcrack ( ) в чем смысл вызова rpc в которой стоит проверка которая ограничивает ее владельцем обьекта? Смысл этой проверки в том, чтобы куб создался только у того игрока который нажал клавишу. Мне понятно что это проверка только по локальному игроку. Думаю к этой проверке нужно еще что то добавить в код, чтобы проверка была по сети.
Цитата drcrack ( ) а по проблеме, скорее всего надо так: Код GameObject Kubik = (GameObject)Network.Instantiate (Cub, Point.transform.position, Point.transform.rotation, 1);
а следующую строчку убрать Стало еще хуже, теперь куб создается у всех и у каждого игрока создается по 2 штуки
Сообщение отредактировал serezha - Пятница, 05 Февраля 2021, 12:02 |
|
| |
drcrack | Дата: Пятница, 05 Февраля 2021, 16:20 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| ну так создавай тока у одного)
Код if (Input.GetKeyDown (KeyCode.Z) && GetComponent<NetworkView>().isMine) {
|
|
| |
serezha | Дата: Пятница, 05 Февраля 2021, 21:18 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| drcrack, Спасибо! Добавлено (05 Февраля 2021, 21:30) --------------------------------------------- 1) Всё отлично работает так: GameObject Kubik = (GameObject)Network.Instantiate (Cub, Player.transform.position, Player.transform.rotation, 1); Kubik.transform.position = Point.transform.position;
2) А вот так, создаются сразу 2 штуки куба: GameObject Kubik = (GameObject)Network.Instantiate (Cub, Point.transform.position, Point.transform.rotation, 1);
Из 2-го варианта по идеи..должен один куб создаваться, но у меня их сразу становится 2. С чем это связано так и не понял...
|
|
| |
ArtemS | Дата: Понедельник, 08 Февраля 2021, 17:37 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| у меня есть bool _isAuthority, где true - я, false - остальные игроки. когда создаюсь я, мне вешается true, у остальных false. Правда я на signalR.
Код if (HubConnection.ConnectionId == syncObjectModel.Authority)
{ Identety.IsAuthority = true; }
Делаешь проверку, я ли жму, и подомной создаешь. Ну а остальным рассылаешь сервером, под каким именно игроком создать
хуяк, хуяк и в продакшн
Сообщение отредактировал ArtemS - Понедельник, 08 Февраля 2021, 17:40 |
|
| |