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
Попробовал понижать - безрезультатно.. вообще полдня сегодня уже убил в попытках убрать дерготню..
Сообщение Попробовал понижать - безрезультатно.. вообще полдня сегодня уже убил в попытках убрать дерготню.. Автор - 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