Как нормализовать векторы при диагональном движении?
У меня просто куб, он вращается в нужную сторону, но при диагональном движении скорость увеличенная, пробовал ограничивать, но по итогу сломал управление, так что не рискую ничего менять. else if для того что бы куб не взлетал. .normalize не знаю куда впихнуть, что советуют не подходит, так как юзают horizintal.axis и vertical.axis, а у меня забинджено на конкретные кнопки, потому что хз как ещё это сделать.
Как сделать так что бы по диагонали скорость не увеличивалась?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] float _rollSpeed = 5;
bool _isMoving;
void Update()
{
if (_isMoving) return;
if (Input.GetKey(KeyCode.A)) Assemble(Vector3.left);
else if (Input.GetKey(KeyCode.D)) Assemble(Vector3.right);
if (Input.GetKey(KeyCode.W)) Assemble(Vector3.forward);
else if (Input.GetKey(KeyCode.S)) Assemble(Vector3.back);
void Assemble(Vector3 dir)
{
var anchor = transform.position + (Vector3.down + dir) * 0.5f;
var axis = Vector3.Cross(Vector3.up, dir);
StartCoroutine(Roll(anchor, axis));
}
}
private IEnumerator Roll(Vector3 anchor, Vector3 axis)
{
_isMoving = true;
var rotationIteration= 90 / _rollSpeed;
var rollAngle = _rollSpeed;
float currentRotationAngle = 0;
float previousRotationAngle = 0;
for (var i = 0; i < rotationIteration; i++)
{
currentRotationAngle += rollAngle;
if (currentRotationAngle > 90) { rollAngle = 90 - previousRotationAngle; }
transform.RotateAround(anchor, axis, rollAngle);
previousRotationAngle = currentRotationAngle;
yield return null;
}
_isMoving = false;
}
}