Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Сеть

Ответ
 
Опции темы
Старый 09.10.2013, 04:45   #1
Alex_Witcher
Нуждающийся
 
Регистрация: 15.02.2012
Сообщений: 53
Написано одно полезное сообщение
Photon Network плавное движение.

Начал осваивать Фотон (Cloud), для синхронизации движения-вешаю на объект-PhotonView, изначально сетевые объекты двигались очень дергано, нашел такой скрипт для сглаживания движения (интерполяцией):
ublic 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 * 1);
            transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 1);
        }
    }

}
Однако назвать этот вариант оптимальным-нельзя. Например если объект которым я управляю у меня останавливается, то у других клиентов за счет интерполяции-продолжает еще некоторое время двигаться (зависит от множителя "плавности"). +все-же присутствуют не большие подергивания на больших скоростях движения. Может ли кто-то подсказать как улучшить синхронизацию движения ?
__________________
unity3d, 1я поделка.
https://play.google.com/store/apps/d...GVsaWNmcmVlIl0.
(Offline)
 
Ответить с цитированием
Старый 09.10.2013, 07:09   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Photon Network плавное движение.

1. Двигается он е из-за интерполяции, а из-за пинга. Т. е. то время, за которое пакет доходит от игрока до сервера и потом до другого игрока. Ну и плюс интерполяция.
2. Если в способе передачи стоит Releable Delta Compression, то при потере пакета фотон перезапрашивает его заново. Отсюда лаги дополнительные.
3. Улучшить особо сильно не получится. Вот другой способ интерполяции http://forum.unity3d.com/threads/154...ity-Networking
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.10.2013, 21:52   #3
Alex_Witcher
Нуждающийся
 
Регистрация: 15.02.2012
Сообщений: 53
Написано одно полезное сообщение
Ответ: Photon Network плавное движение.

Спасибо за информацию. Попробую пока сделать что-бы "множитель плавности" при интерполяции менялся в зависимости от скорости объекта. Не настраивать же вручную для каждого случая.
__________________
unity3d, 1я поделка.
https://play.google.com/store/apps/d...GVsaWNmcmVlIl0.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 20:41.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com