Объект дергается при повороте - Форум Игроделов
Пт, 03 Май 2024, 17:14 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » HELP & FAQ » Объект дергается при повороте
Объект дергается при повороте
mastersmitДата: Пн, 01 Авг 2016, 15:20 | Сообщение # 1
Нет аватара
 
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline
Код управления:
Код

void Update () {

        Vector3 dir = transform.localEulerAngles;
        if (Input.GetKey(KeyCode.UpArrow) || up.pressed && (leftCollision || rightCollision))
        {
            float s = 1f;
            if (leftCollision && !rightCollision)
            {
                dir.y += rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            else if (!leftCollision && rightCollision)
            {
                dir.y -= rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            speed = Mathf.Clamp(speed + speedMove * 0.02f * s * Time.deltaTime, -speedMove * s * Time.deltaTime, speedMove * s * Time.deltaTime);
                        
        } else if (Input.GetKey(KeyCode.DownArrow) || down.pressed && (leftCollision || rightCollision))
        {
            float s = 1f;
            if (leftCollision && !rightCollision)
            {
                dir.y -= rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            else if (!leftCollision && rightCollision)
            {
                dir.y += rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            speed = Mathf.Clamp(speed - speedMove * 0.02f * s * Time.deltaTime, -speedMove * s * Time.deltaTime, speedMove * s * Time.deltaTime);
        } else
        {
            if (speed > 0.01f || speed < -0.01f)
                speed = speed - (0.15f * (Mathf.Abs(speed) / speed)) * Time.deltaTime;
            else
                speed = 0;

        }
        if (Input.GetKey(KeyCode.LeftArrow) || left.pressed && (leftCollision || rightCollision))
        {
            //dir.y -= rotationSpeed * Time.deltaTime;
            //player.MoveRotation(Quaternion.Euler(dir));
            player.transform.Rotate(player.transform.up, -rotationSpeed * Time.deltaTime, Space.World);
        } else if (Input.GetKey(KeyCode.RightArrow) || right.pressed && (leftCollision || rightCollision))
        {
            //dir.y += rotationSpeed * Time.deltaTime;
            //player.MoveRotation(Quaternion.Euler(dir));
            player.transform.Rotate(player.transform.up, rotationSpeed * Time.deltaTime, Space.World);
        }
        if (Input.GetKey(KeyCode.A) || towerLeft.pressed)
        {
            tower.Rotate(new Vector3(0f, -towerRotationSpeed * Time.deltaTime, 0f));
        }
        else if (Input.GetKey(KeyCode.D) || towerRight.pressed)
        {
            tower.Rotate(new Vector3(0f, towerRotationSpeed * Time.deltaTime, 0f));
        }
        Vector3 vec = player.transform.forward * speed;
        //player.AddForceAtPosition(vec, transform.forward, ForceMode.Force);
        //player.velocity = vec;
        player.MovePosition(player.position + (player.transform.forward * speed));
        //Debug.Log(speed);

        
    }


Видео происходящего - https://youtu.be/-emeBsIsOvI
Поворот нормальный только когда танк не перемещается, иначе дергается.. На мобиле в любой ситуации дергается, кроме момента, когда стоит неподвижно.. Башня везде нормально крутится..
Чего не так?


Сообщение отредактировал mastersmit - Пн, 01 Авг 2016, 18:13
 
СообщениеКод управления:
Код

void Update () {

        Vector3 dir = transform.localEulerAngles;
        if (Input.GetKey(KeyCode.UpArrow) || up.pressed && (leftCollision || rightCollision))
        {
            float s = 1f;
            if (leftCollision && !rightCollision)
            {
                dir.y += rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            else if (!leftCollision && rightCollision)
            {
                dir.y -= rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            speed = Mathf.Clamp(speed + speedMove * 0.02f * s * Time.deltaTime, -speedMove * s * Time.deltaTime, speedMove * s * Time.deltaTime);
                        
        } else if (Input.GetKey(KeyCode.DownArrow) || down.pressed && (leftCollision || rightCollision))
        {
            float s = 1f;
            if (leftCollision && !rightCollision)
            {
                dir.y -= rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            else if (!leftCollision && rightCollision)
            {
                dir.y += rotationSpeed * 0.1f * Time.deltaTime;
                player.MoveRotation(Quaternion.Euler(dir));
                s = 0.5f;
            }
            speed = Mathf.Clamp(speed - speedMove * 0.02f * s * Time.deltaTime, -speedMove * s * Time.deltaTime, speedMove * s * Time.deltaTime);
        } else
        {
            if (speed > 0.01f || speed < -0.01f)
                speed = speed - (0.15f * (Mathf.Abs(speed) / speed)) * Time.deltaTime;
            else
                speed = 0;

        }
        if (Input.GetKey(KeyCode.LeftArrow) || left.pressed && (leftCollision || rightCollision))
        {
            //dir.y -= rotationSpeed * Time.deltaTime;
            //player.MoveRotation(Quaternion.Euler(dir));
            player.transform.Rotate(player.transform.up, -rotationSpeed * Time.deltaTime, Space.World);
        } else if (Input.GetKey(KeyCode.RightArrow) || right.pressed && (leftCollision || rightCollision))
        {
            //dir.y += rotationSpeed * Time.deltaTime;
            //player.MoveRotation(Quaternion.Euler(dir));
            player.transform.Rotate(player.transform.up, rotationSpeed * Time.deltaTime, Space.World);
        }
        if (Input.GetKey(KeyCode.A) || towerLeft.pressed)
        {
            tower.Rotate(new Vector3(0f, -towerRotationSpeed * Time.deltaTime, 0f));
        }
        else if (Input.GetKey(KeyCode.D) || towerRight.pressed)
        {
            tower.Rotate(new Vector3(0f, towerRotationSpeed * Time.deltaTime, 0f));
        }
        Vector3 vec = player.transform.forward * speed;
        //player.AddForceAtPosition(vec, transform.forward, ForceMode.Force);
        //player.velocity = vec;
        player.MovePosition(player.position + (player.transform.forward * speed));
        //Debug.Log(speed);

        
    }


Видео происходящего - https://youtu.be/-emeBsIsOvI
Поворот нормальный только когда танк не перемещается, иначе дергается.. На мобиле в любой ситуации дергается, кроме момента, когда стоит неподвижно.. Башня везде нормально крутится..
Чего не так?

Автор - mastersmit
Дата добавления - 01 Авг 2016 в 15:20
ЛевшаДата: Пн, 01 Авг 2016, 18:13 | Сообщение # 2
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Возможно Angular Drag надо понизить.

X.cor.R (Prologue)
 
СообщениеВозможно Angular Drag надо понизить.

Автор - Левша
Дата добавления - 01 Авг 2016 в 18:13
mastersmitДата: Пн, 01 Авг 2016, 18:16 | Сообщение # 3
Нет аватара
 
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline
Попробовал понижать - безрезультатно.. sad вообще полдня сегодня уже убил в попытках убрать дерготню..
 
СообщениеПопробовал понижать - безрезультатно.. sad вообще полдня сегодня уже убил в попытках убрать дерготню..

Автор - mastersmit
Дата добавления - 01 Авг 2016 в 18:16
ЛевшаДата: Пн, 01 Авг 2016, 22:10 | Сообщение # 4
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Привыкай - это rigidbody...
Единственное что могу еще посоветовать - всю обработку физики вынести из Update() в метод FixedUpdate().
Это вроде как корректная работа с физикой, попробуй.


X.cor.R (Prologue)
 
СообщениеПривыкай - это rigidbody...
Единственное что могу еще посоветовать - всю обработку физики вынести из Update() в метод FixedUpdate().
Это вроде как корректная работа с физикой, попробуй.

Автор - Левша
Дата добавления - 01 Авг 2016 в 22:10
Форум Игроделов » UNITY3D » HELP & FAQ » Объект дергается при повороте
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024