[Unity] Как синхронизировать посторонние объекты(пулю) в мультиплеере? Здравствуйте уважаемые!
Я в юнити делаю шутер от первого лица с мультиплеером. У меня есть скрипт "Bullet" который весит на префабе пули и при появлении(спавне) пули на сцене задает ей скорость. Имеется так же скрипт "PlayerShoot" одна из его функций спавн пули в нулевом объекте. По локалке все работает замечательно. Вот собственно и вопрос: Как синхронизировать пулю для других клиентов в игре.
Использую NetworkManager, NetworkManagerHud - на нулевом объекте. NetworkStartPosition - на нулевых объектах где должен спавниться игрок. NetworkIdentity, NetworkTransform и NetworkTransformChild на префабе игрока.
P.S. Всем спасибо за помощь :)

21 Авг 2019 в 06:42
303 +2
0
Ответы
1

Для синхронизации пули для других клиентов в мультиплеерной игре вам нужно использовать сетевые объекты и сетевые сообщения. Ваш скрипт "Bullet" должен быть помечен атрибутом [NetworkBehaviour], чтобы он был сетевым объектом.

Когда пуля появляется на сцене, вы должны использовать функцию NetworkServer.Spawn для синхронизации ее для всех клиентов. Например:

using UnityEngine;
using UnityEngine.Networking;
public class Bullet : NetworkBehaviour {
public float speed = 10f;
void Start() {
GetComponent<Rigidbody>().velocity = transform.forward * speed;
NetworkServer.Spawn(gameObject);
}
}

В вашем скрипте "PlayerShoot" вы должны отправлять сетевые сообщения о спавне пули. Например:

using UnityEngine;
using UnityEngine.Networking;
public class PlayerShoot : NetworkBehaviour {
public GameObject bulletPrefab;
void Update() {
if (!isLocalPlayer) {
return;
}
if (Input.GetButtonDown("Fire1")) {
CmdShoot();
}
}
[Command]
void CmdShoot() {
GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);
NetworkServer.Spawn(bullet);
}
}

Обратите внимание, что функция CmdShoot помечена атрибутом [Command], который указывает, что это функция сервера, которая будет вызываться со всех клиентов.

Это общий пример, и вам может понадобиться дополнительная настройка в зависимости от вашей конкретной ситуации. Надеюсь, это поможет вам синхронизировать пули для других клиентов в вашей мультиплеерной игре. Удачи!

20 Апр 2024 в 13:14
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир