Пятница, 26 Апреля 2024, 21:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » Fedi [7]
Результаты поиска
FediДата: Четверг, 29 Сентября 2016, 16:15 | Сообщение # 1 | Тема: Лаги NetworkManager Unet
был не раз
Сейчас нет на сайте
Lertmind, Всё работает!Спасибо большое!

Избиватель лохов, поедатель пирогов, новатор, бровиподниматор, и народный чемпион The Rock!
FediДата: Среда, 28 Сентября 2016, 18:19 | Сообщение # 2 | Тема: Лаги NetworkManager Unet
был не раз
Сейчас нет на сайте
robertono, Сделал управление под телефон запустил когда захожу машины к 0,0,0 притягиваются. Вроде ничего не изменял...
Код
public class PlayerSync : NetworkBehaviour {

    [SyncVar]
    private Vector3 syncPos;

    [SerializeField] Transform myTransform;

    private Vector3 lastpos;
    private float threshold = 0.5f;

    void Update(){

  LerpPos ();

    }

    void FixedUpdate(){

  TransmitPos ();

    }

    void LerpPos(){

  if (!isLocalPlayer) {
   myTransform.position = Vector3.Lerp (myTransform.position, syncPos, 0.1f);

  }
    }

    [Command]

    void CmdSync(Vector3 pos){

  syncPos = pos;

    }

    [ClientCallback]
    void TransmitPos(){

  if (isLocalPlayer && Vector3.Distance(myTransform.position,lastpos) < threshold) {
   CmdSync (myTransform.position);
   lastpos = myTransform.position;

  }
    }

}


Избиватель лохов, поедатель пирогов, новатор, бровиподниматор, и народный чемпион The Rock!

Сообщение отредактировал Fedi - Среда, 28 Сентября 2016, 18:56
FediДата: Среда, 28 Сентября 2016, 18:07 | Сообщение # 3 | Тема: Лаги NetworkManager Unet
был не раз
Сейчас нет на сайте
Цитата robertono ()
Разве ? Функция Lerp перед самой интерполяцией делает Math.Clamp01 - никакой экстраполяции тут быть не может.
Самое простое, если представить эту переменную как "процент между A и B".

Не знаю в другом форуме мне так сказали

Добавлено (28 сентября 2016, 18:07)
---------------------------------------------
Ещё одни вопрос, возможен ли соединение комп-телефон не изменяя код?


Избиватель лохов, поедатель пирогов, новатор, бровиподниматор, и народный чемпион The Rock!
FediДата: Среда, 28 Сентября 2016, 13:45 | Сообщение # 4 | Тема: Лаги NetworkManager Unet
был не раз
Сейчас нет на сайте
Цитата Lertmind ()
Я не разбираюсь в Unet, но у тебя есть ошибка в этой строчке:
Код
myTransform.position = Vector3.Lerp (myTransform.position, syncPos, Time.deltaTime + lerpRate);
при условии, что в lerpRate значения больше 1, в результате всегда будет возвращаться syncPos.

Это условие будет выполняться постоянно:
Код
Vector3.Distance(myTransform.position,lastpos) < threshold
потому что myTransform.position будет уходить на маленькое расстояние, а если выйдет на большое, то условие вообще не будет работать.

Внимательно почитай ответ и код от lukas8 здесь https://community.unity.com/t5....2531451. Хотя у него в Lerp используется число с потолка - 0.1, так что наверно стоит использовать логику похожую здесь http://stackoverflow.com/questio....eobject, только не запутаться в deltaTime и fixedDeltaTime.

Твоё видео, судя по курсору, тоже тормозит.


Спасибо большое!
Если кому надо то вот код
Код
myTransform.position = Vector3.Lerp (myTransform.position, syncPos,0.1f);

Узнал что Lerp от 0f до 1f работает как интерполяция А свыше 1f как экстраполяция.


Избиватель лохов, поедатель пирогов, новатор, бровиподниматор, и народный чемпион The Rock!
FediДата: Вторник, 27 Сентября 2016, 13:30 | Сообщение # 5 | Тема: Лаги NetworkManager Unet
был не раз
Сейчас нет на сайте
Проблема
Скрипт интерполяции:
Код
public class PlayerSync : NetworkBehaviour {

    [SyncVar]
    private Vector3 syncPos;

    [SerializeField] Transform myTransform;
    [SerializeField] float lerpRate = 20;

    private Vector3 lastpos;
    private float threshold = 0.5f;


    void Update(){
    
        LerpPos ();
    
    }

    void FixedUpdate(){
    
        TransmitPos ();


    }


    void LerpPos(){


        if (!isLocalPlayer) {
            myTransform.position = Vector3.Lerp (myTransform.position, syncPos, Time.deltaTime + lerpRate);

        }
    }
    

    [Command]

    void CmdSync(Vector3 pos){
    
        syncPos = pos;


    }


    [ClientCallback]
    void TransmitPos(){
    
        if (isLocalPlayer && Vector3.Distance(myTransform.position,lastpos) < threshold) {
            CmdSync (myTransform.position);
            lastpos = myTransform.position;

        }
    }

}


Избиватель лохов, поедатель пирогов, новатор, бровиподниматор, и народный чемпион The Rock!
FediДата: Вторник, 10 Мая 2016, 12:51 | Сообщение # 6 | Тема: Помогите не могу понять в чем проблема localEulerAngles
был не раз
Сейчас нет на сайте
Цитата zaicev9797 ()
дак вы хоть напишите - в чем проблема то?


Видео


Сообщение отредактировал Fedi - Вторник, 10 Мая 2016, 12:51
FediДата: Воскресенье, 08 Мая 2016, 13:25 | Сообщение # 7 | Тема: Помогите не могу понять в чем проблема localEulerAngles
был не раз
Сейчас нет на сайте
Вот полный код

Код
public class CarControll : MonoBehaviour {

public WheelCollider[] frontCols;
public WheelCollider[] backCols;
public Transform[] dataFront;
public Transform[] dataBack;
public Transform[] Center;

public float maxSpeed = 233f;
private float sideSpeed = 30f;
public float brakeSpeed = 400;

void Start () {

}

void Update () {

float vAxis = Input.GetAxis ("Vertical");
float hAxis = Input.GetAxis ("Horizontal");
bool brakeButton = Input.GetButton ("Jump");

frontCols [0].motorTorque = vAxis * maxSpeed;
frontCols [1].motorTorque = vAxis * maxSpeed;

if (brakeButton) {

frontCols [0].brakeTorque = Mathf.Abs (frontCols [0].motorTorque) * brakeSpeed;
frontCols [1].brakeTorque = Mathf.Abs (frontCols [1].motorTorque) * brakeSpeed;

} else {

frontCols [0].brakeTorque = 0;
frontCols [1].brakeTorque = 0;

}

frontCols [0].steerAngle = hAxis * sideSpeed;
frontCols [1].steerAngle = hAxis * sideSpeed;

dataFront [0].Rotate (Vector3.right, -frontCols [0].rpm * Time.deltaTime);
dataFront [1].Rotate (Vector3.left, -frontCols [1].rpm * Time.deltaTime);

dataBack [0].Rotate(Vector3.right,-frontCols [0].rpm * Time.deltaTime);
dataBack [1].Rotate (Vector3.left,-frontCols [1].rpm * Time.deltaTime);

dataFront [0].localEulerAngles = new Vector3 (dataFront [0].localEulerAngles.x, hAxis*sideSpeed, dataFront [0].localEulerAngles.z);
dataFront [1].localEulerAngles = new Vector3 (dataFront [1].localEulerAngles.x, hAxis*sideSpeed, dataFront [1].localEulerAngles.z);

}
}



Сообщение отредактировал Fedi - Воскресенье, 08 Мая 2016, 13:25
Форум игроделов » Записи участника » Fedi [7]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг