Оптимизация скорости

Оптимизация скорости

Сообщение Phobius 16 июл 2012, 16:01

Игра гонки. Пытаюсь синхронизировать две машины с помощью PUN RPC. Машинки постоянно дергаются и отстают от их реального местоположения. Через некоторое короткое время клиенты вылетают в PeerCreated.

Синтаксис:
Используется csharp
// отправка RPC
void Update()
    {
        float accel = Input.GetAxis("Vertical");
        float steer = Input.GetAxis("Horizontal");
        Cars[id].pcc.Accel = accel;
        Cars[id].pcc.Steer = steer;
        photonView.RPC("SetCarPosition", PhotonTargets.Others, Cars[id].car.transform.position, Cars[id].car.transform.rotation, accel, steer, id);
     }

void SetCarPosition(Vector3 position, Quaternion rotation, float accel, float steer, int id)
    {
        // pcc - скрипт управления машиной
        Cars[id].car.transform.position = position;
        Cars[id].car.transform.rotation = rotation;
        Cars[id].pcc.Accel = accel;
        Cars[id].pcc.Steer = steer;
    }
 


Боюсь представить что будет, если машин будет больше. Направьте на путь истинный))
Phobius
UNец
 
Сообщения: 18
Зарегистрирован: 16 июл 2012, 13:10

Re: Оптимизация скорости

Сообщение gnoblin 16 июл 2012, 16:06

1) каждый кадр отправлять рпц это плохо (раз 10-20/сек максимум)
2) в PUN рпц по-умолчанию reliable, поэтому не подходят для частой рассылки постоянно устаревающих данных - надо либо использовать state sync для этих целей, либо немного допилить PUN чтобы он мог рассылать как reliable так и unreliable rpc (что фотон сам по себе, конечно, умеет)

вылетают скорее всего потому что на сервер идет слишком (нереально) много данных и он кикает игроков
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Оптимизация скорости

Сообщение DeHHu 16 июл 2012, 17:46

Может проще сглаживать движение Lerp"ом ?

Синтаксис:
Используется csharp
 
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(PhotonView))]
public class PersonNetwork : Photon.MonoBehaviour
{
    public Vector3 correctPlayerPos = Vector3.zero; //We lerp towards this
    public Quaternion correctPlayerRot = Quaternion.identity; //We lerp towards this
       
    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {

            //We own this player: send the others our data
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
        }
        else
        {

            //Network player, receive data
            correctPlayerPos = (Vector3)stream.ReceiveNext();
            correctPlayerRot = (Quaternion)stream.ReceiveNext();


        }
    }


    void Update()
    {
        if (!photonView.isMine)
        {
            //Update remote player (smooth this, this looks good, at the cost of some accuracy)
            transform.position = Vector3.Lerp(transform.position, correctPlayerPos, Time.deltaTime * 5);
            transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 5);
        }
    }

}
DeHHu
UNец
 
Сообщения: 41
Зарегистрирован: 22 янв 2012, 11:32
Skype: dehhhu

Re: Оптимизация скорости

Сообщение Phobius 16 июл 2012, 21:44

State sync с Lerp-ом работают весьма неплохо. Правда когда машинка у игрока-владельца останавливается, то у других игроков она потихоньку "ползет" к положенному месту. Я так понимаю что нужно регулировать время растяжения Lerp-а в зависимости от разницы предыдущей позиции и новой.

Нашел как формируется RPC в PUN, но вот в чистом фотоне мне не разобраться с ходу, т.к. не юзал.

Буду признателен если подкинете ссылок где можно посмотреть более сложные алгоритмы чем просто Lerp для повышения плавности хода.

P.S. Если я правильно понимаю, то Reliable от Unreliable должны отличается только логикой обработки, а именно отбрасываются ли "опоздавшие" пакеты или нет. А вот почему Unreliable не сжимается мне не понятно.
Phobius
UNец
 
Сообщения: 18
Зарегистрирован: 16 июл 2012, 13:10

Re: Оптимизация скорости

Сообщение gnoblin 17 июл 2012, 10:49

Phobius писал(а):А вот почему Unreliable не сжимается мне не понятно.

?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Оптимизация скорости

Сообщение Phobius 17 июл 2012, 14:25

gnoblin писал(а):
Phobius писал(а):А вот почему Unreliable не сжимается мне не понятно.

?


Пардон, перечитал статью еще раз и понял что же такое Delta Compression.
Phobius
UNец
 
Сообщения: 18
Зарегистрирован: 16 июл 2012, 13:10


Вернуться в Photon

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

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