Создание общих объектов в мультиплеере (Network).
|
|
xxxlio | Дата: Воскресенье, 20 Мая 2018, 10:19 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| В общем так, делаю мультиплеер пока что через стандартный скрипт юнити Network. На пустой объект на сцене добавил компоненты Network Manager И менюшку Network Manager HUD. Игрока сделал прифабом и добавил компоненты Network Identity(local player) и Network Transform. Ну еще есть скрипт который отключает управление персонажем и камеру у не локального игрока. С этим проблем нет, каждый движется в своем направлении и каждый видит второго игрока.
Теперь, собственно вопрос. Если коротко то нужно одним игроком добавлять на сцену общий предмет. К примеру этот скрипт я закинул на игрока и при нажатии на "M" Должен появляться предмет из префаба на сцене и его должны видеть все игроки.
C# using UnityEngine; using System.Collections;
public class Test : MonoBehaviour { // public Transform Kub; public GameObject Kub; void Update () { if(Input.GetKeyDown(KeyCode.M)) Instantiate (Kub, new Vector3 (60, 60, 60), Quaternion.identity); } }
Но его видит только тот персонаж, который его создал. Где я только не искал инфу по решению этой проблемы. Говорят на создаваемый объект нужно добавить компонет Network Identity. Пробовал, не помогает. Регистрировал его как префаб в Network Manager. Все тоже самое. 4 дня уже топчусь на месте, кто знает - подскажите.. А то получается все действия и объекты (огонь, взрывы, пули...) Видит только тот игрок, который их и создал.
|
|
| |
InsaneSystems | Дата: Воскресенье, 20 Мая 2018, 10:26 | Сообщение # 2 |
участник
Сейчас нет на сайте
| xxxlio, используйте NetworkServer.Spawn. Только делать это можно исключительно на сервере, поэтому от клиентов необходимо будет передавать некий запрос на спавн объекта, который после обработки сервером будет исполнен.
|
|
| |
xxxlio | Дата: Воскресенье, 20 Мая 2018, 11:07 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| А можно по подробнее на счет NetworkServer.Spawn? Как в моем случае его применить?
Network.Instantiate (Kub, new Vector3 (500, 60, 500), Quaternion.identity); NetworkServer.Spawn(Kub);
Так не получается. Просто я с Network мало знаком пока, почти уже сделал игру, а как начал мультиплеер добавлять - куча проблем появилась..
|
|
| |
drcrack | Дата: Воскресенье, 20 Мая 2018, 11:25 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Цитата почти уже сделал игру, а как начал мультиплеер добавлять - куча проблем появилась..
|
|
| |
xxxlio | Дата: Воскресенье, 20 Мая 2018, 11:39 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Лучше бы помогли, чем угорать... Вопрос то простой. Как создать объект из префаба по определенным координатам, что бы он был доступен всем. я почти уверен что тут проблема в двух строчках кода, просто я с network только начинаю разбираться. Вот вы как будто с самого рождения все знали.. сами ведь были такими...
|
|
| |
drcrack | Дата: Воскресенье, 20 Мая 2018, 11:55 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Не ну это реально классика... "... А затем мы попытались прикрутить мультиплеер на готовую игру и оказалось что это не так просто как мы думали" Даже не знаю сколько раз я уже видел эту фразу в разных вариациях А со встроенной сетью не могу помочь, не работаю с ней
|
|
| |
xxxlio | Дата: Воскресенье, 20 Мая 2018, 13:44 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Короче, делаю так:
C# using UnityEngine; using System.Collections; using UnityEngine.Networking;
public class TestKub : NetworkBehaviour { public GameObject Kub;
void SpawnObject(GameObject Kub) { GameObject go = GameObject.Instantiate(Kub); NetworkServer.Spawn(go); }
void Update () { if (Input.GetKeyDown(KeyCode.M)) {
ClientScene.RegisterPrefab(Kub);
GameObject go = (GameObject)Instantiate(Kub, new Vector3 (500, 60, 500), Quaternion.identity); NetworkServer.Spawn (go);
}
} }
Теперь получается при нажатии на М серверный игрок может создать объект который виден всем игрокам, а при попытки клиентского игрока создать объект он опять же создается только для него, другие игроки его не видят..
|
|
| |
drcrack | Дата: Воскресенье, 20 Мая 2018, 14:05 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Цитата Теперь получается при нажатии на М серверный игрок может создать объект который виден всем игрокам, а при попытки клиентского игрока создать объект он опять же создается только для него, другие игроки его не видят.. ну так вместо создания на клиенте передавай на сервер команду чтобы он создал
|
|
| |
xxxlio | Дата: Воскресенье, 20 Мая 2018, 14:10 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Цитата drcrack ( ) ну так вместо создания на клиенте передавай на сервер команду чтобы он создал Как? Говорю же, с нетворком только начал разбираться..
|
|
| |
drcrack | Дата: Воскресенье, 20 Мая 2018, 14:23 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| см в официальном мануале там все есть https://docs.unity3d.com/Manual/UNetUsingHLAPI.html
|
|
| |