Вы захотите использовать нормализованный вектор двух осей при умножении на walkSpeed
.Причина в том, что это гарантирует, что вы всегда будете двигаться в любом направлении с одинаковой величиной (1) независимо от угла.Принимая во внимание, что ваша текущая установка имеет неортогональное движение, рассчитываемое при> 1 величине.Так что-то вроде этого должно работать в вашей ситуации.
void MovePlayer()
{
// Get Horizontal and Vertical Input
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
// Calculate the Direction to Move based on the tranform of the Player
Vector3 moveDirectionForward = transform.forward * verticalInput * Time.deltaTime;
Vector3 moveDirectionSide = transform.right * horizontalInput * Time.deltaTime;
// Apply Movement to Player
myCharacterController.SimpleMove((moveDirectionForward + moveDirectionSide).normalized * walkspeed);
Просто переместите умножение walkSpeed в вызов SimpleMove для нормализованного вектора.Изображение ниже должно помочь визуализировать проблему, с которой вы столкнулись.Нормализуя вектор перед применением скорости ходьбы, вы убедитесь, что вектор направления имеет одинаковую величину (в данном случае, фактически, расстояние), независимо от того, в каком направлении вы применяете скорость ходьбы.