Почему при движении персонажа Unity3D с помощью AddForce() его сдвигает в бок?
При передвижении с помощью Input.GetAxis()
, параллельно оси, все работает нормально. Персонаж двигается, как и положено. Но когда я начинаю движение по диагонали, тот начинает сдвигаться в сторону другой оси.
PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
Rigidbody Player;
public Transform PlayerCamera;
public float Speed;
public Vector3 MaxSpeed;
public float JumpHeight;
void Start()
{
Player = GetComponent<Rigidbody>();
}
void Update()
{
Movement();
Jump();
}
void Movement() {
var MovementInput = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
Player.AddForce(transform.TransformDirection(MovementInput) * Speed);
Player.velocity = new Vector3(Mathf.Clamp(Player.velocity.x, 0, MaxSpeed.x), Player.velocity.y, Mathf.Clamp(Player.velocity.z, 0, MaxSpeed.z));
Debug.DrawRay(Player.transform.position + transform.forward, transform.forward * 10f);
}
void Jump() {
if (Input.GetKeyDown(KeyCode.Space)) {
Player.AddForce(Vector3.up * JumpHeight, ForceMode.Impulse);
}
}
}
Может, это как-то связано с поворотом камеры?
CameraRotation.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraRotation : MonoBehaviour
{
public Transform CameraAxis;
public float Sensivity = 1f;
public float MaxAngle = 90f;
public float MinAngle = -90f;
void Update()
{
var NewAngleY = Input.GetAxis("Mouse X") * Sensivity * Time.deltaTime;
var NewAngleX = -Input.GetAxis("Mouse Y") * Sensivity * Time.deltaTime;
CameraAxis.localEulerAngles += new Vector3(Mathf.Clamp(NewAngleX, MinAngle, MaxAngle), 0, 0);
transform.localEulerAngles += new Vector3(0, NewAngleY, 0);
}
}
Пытался чинить через
transform.TransformDirection()
, он только сильнее выявил проблему. Пробовал изменить сам префаб игрока, добавил ось (просто родительский объект камеры), но это ничего не изменило.