Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием