Вариант управления префабом

Сеть в Unity3D

Вариант управления префабом

Сообщение artegor 26 ноя 2016, 22:25

Господа, встал вопрос как лучше сделать синхронизацию управление по сети (то есть управление префабом, которым управляет игрок по сети).

Первое, что пришло в голову это оставить полностью префаб как есть(немного измененный префаб из стандартных ассетов - FirstPersonController), только добавить скрипт типа

Синтаксис:
Используется csharp
public float Vertical, Horizontal, MouseX, MouseY;
    public bool Jump, Fire;

    public float NetVertical, NetHorizontal, NetMouseX, NetMouseY;
    public bool NetJump, NetFire;

    private bool isControllable;

        void Update () {

            if (isControllable) // локальный контроль - самим игроком
            {
            Horizontal = CrossPlatformInputManager.GetAxis("Horizontal");
            Vertical = CrossPlatformInputManager.GetAxis("Vertical");
            MouseX = CrossPlatformInputManager.GetAxis("Mouse X") ;
            MouseY = CrossPlatformInputManager.GetAxis("Mouse Y") ;
            Jump = CrossPlatformInputManager.GetButtonDown("Jump");
            Fire = CrossPlatformInputManager.GetButtonDown("Fire1");
        }
            else // данные приходят по сети
            {
            Horizontal = NetHorizontal;
            Vertical = NetVertical;
            MouseX = NetMouseX;
            MouseY = NetMouseY;
            Jump = NetJump;
            Fire = NetFire;
        }
        }

+ не надо замарачиваться над разными компонентами типа звука шагов, физического взаимодействия и т.п. Все и так будет
- нет жесткой привязки к position и rotation, доп нагрузка если будут по карте бегать 10 физических объектов (сильная нагрузка ?)

Второй вариант. Добавить скрипт в котором при старте будет проверяться локальное ли управление. Если да, то все остается, если нет (если это префаб, которым управляет другой игрок по сети), то будут удаляться FPC, RB и character controller, а вместо них будет добавлен простецкий скрипт типа

Синтаксис:
Используется csharp
            transform.position = Vector3.Lerp(transform.position, correctPlayerPos, Time.deltaTime * 5);
            transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 5);


где correctPlayerPos, correctPlayerRot данные, приходящие по сети

+ не надо волноваться о положении игрока на другой машине т.к. идет жёсткая привязка
- надо будет заморочиться как передвать, что нужно проиграть звук шагом или прыжка, анимации опять же и т.п.
artegor
UNIт
 
Сообщения: 95
Зарегистрирован: 10 дек 2013, 23:18

Re: Вариант управления префабом

Сообщение artegor 26 ноя 2016, 22:28

может есть варианты поумнее?
artegor
UNIт
 
Сообщения: 95
Зарегистрирован: 10 дек 2013, 23:18

Re: Вариант управления префабом

Сообщение Aleksey 28 ноя 2016, 22:55

Ну уж точно не надо химичить и пытаться передавать движение рпц оллбуферед функциями)))) (после 100 накопленных вызовов уже при перезаходе в комнату вылезает “QueueIncomingReliableWarning" а потом еще хуже - долго комната грузится)
Бери скрипт OnPhotonSerializeView викингов . Он норм. Большие скачки движения он передает плавно+за счет того что передается велосити показывает неплохие точки столкновения,отскоков по сети.
нагрузку считай от всех факторов.
Т.к. у тебя передается по сети огромное количество точек движения игрока( и между ними маленький промежуток) всем другим игрокам которые в свою очередь полученные точки обрабатывают лерпом.Это уже нагрузка))
Все зависит еще и от того сколько у тебя других передачей движения по сети кроме самих префабов игрока(например пули) + количество респаунов фотон Instantiate тоже важно - их высокая скорострельность респауна мигом приводит к напряженному предупреждению
“QueueIncomingReliableWarning.This client buffers many incoming messages. This is OK temporarily.With lots of these warnings, check if you send too much or execute messages too slow.”
т.е. уже замедляется передача ,а мы еще не берем пинг который тоже может напакастить и скакануть.
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Вариант управления префабом

Сообщение Aleksey 28 ноя 2016, 22:56

ты про фотон или унэт?)))) надеюсь не про унэт)) тогда я это все зря писал :D
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3