Как подключить сложный объект с помощью UnityEngine.Network - PullRequest
0 голосов
/ 22 апреля 2020

Моя идея - сделать многопользовательскую игру, основанную на физике и столкновениях. Все перемещения персонажей создаются перемещениями и вращением основного тела. Я имею в виду, что у меня есть Сфера в качестве основного тела, Плечи как ребенок с фиксированным твердым телом, руки как дети, связанные с Персональным Соединением с плечами. Меч (на том же уровне, что и тело) Соединен с Characted Суставом с рукой, Камера (на том же уровне, что и тело) со сценарием Следовать за телом. И все это находится под Пустым Объектом Игрока. OriginalPrefab

Это должно быть префабом Player для сети, однако я столкнулся с трудностями при синхронизации всех частей проигрывателя на сервере, поскольку только родительский GameObject может иметь NetworkIdentity и NetworkTransform.

Таким образом, я решил создать части тела, пока играю на сервере. Префаб EmptyPlayer содержит скрипт с методом [Command] void CmdPlayerSpawn (), который связывает ссылки на префабы, подключенные в инспекторе, и их NetworkServer.SpawnWithClientAuthority. Кроме того, были добавлены ссылки Суставов (Меч к руке) (Камера, которая следует за телом) Измененный префаб

[Command]
 void CmdPlayerSpawn()
 {
     _body = (GameObject)Instantiate(body, transform.position, Quaternion.identity);
     NetworkServer.SpawnWithClientAuthority(_body, connectionToClient);

     _sword = (GameObject)Instantiate(sword, _body.transform.Find("LeftGlove").position + Vector3.up, Quaternion.Euler(0,0,0));
     NetworkServer.SpawnWithClientAuthority(_sword, connectionToClient);
     _sword.GetComponent<CharacterJoint>().connectedBody = _body.transform.Find("LeftGlove").GetComponent<Rigidbody>();

     _camera = (GameObject)Instantiate(camera, transform.position+ Vector3.up*8, Quaternion.Euler(40,0,0));
     NetworkServer.SpawnWithClientAuthority(_camera, connectionToClient);
     _camera.GetComponent<CameraBehaviour>().objectToFollow = _body;
     Cameralink = _camera.GetComponent<Camera>();
 }

AAAND. Я пытаюсь играть. Пока играешь как хозяин, все идет хорошо. Игрок довольно ... играбелен. НО, как только я подключаюсь из другой симуляции в качестве Клиента, клиентская игра вылетает (выбрасывает NullReferenceExeptions) и Spawns 2 PlayerObjects (LMAO) ((это видно на учетной записи основного игрока lol). Я действительно не могу понять, как выполнить мою идею.

Играя за Хозяина

Отвечает за клиента

Может быть, вы мне поможете?

...