Unity3D Движение куда смотрит камера

Есть код:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(PlayerMove))]
public class UnitEditor : Editor
{
    public override void OnInspectorGUI()
    {

    }
}

[RequireComponent(typeof(Rigidbody))]
public class PlayerMove : MonoBehaviour
{
    #region ПЕРЕМННЫЕ
    [SerializeField] private float _speed = 5f;
    private Rigidbody _rb;
    private Vector3 _normal;
    private float _horizontalAxis;
    private float _verticalAxis;
    public GameObject MainCamera;
    #endregion

    

    #region ФУНКЦИИ
    private void Awake()
    {
        _rb = GetComponent<Rigidbody>();
    }
    private void Update()
    {
        _horizontalAxis = Input.GetAxis("Horizontal");
        _verticalAxis = Input.GetAxis("Vertical");
        Debug.Log(transform.forward.x);
    }
    private void FixedUpdate()
    {
        Move(new Vector3(-_verticalAxis, 0, _horizontalAxis));
    }

    public void Move(Vector3 direction)
    {
        Vector3 directionAlongSurface = Project(direction.normalized);
        Vector3 offset = Vector3.Scale(directionAlongSurface * _speed * Time.deltaTime, MainCamera.transform.forward);

        _rb.MovePosition(_rb.position + offset);
    }

    public Vector3 Project(Vector3 forward)
    {
        return forward - Vector3.Dot(forward, _normal) * _normal;
    }

    private void OnCollisionEnter(Collision collision)
    {
        foreach (var contact in collision.contacts)
        {
            var normal = contact.normal;
            if (IsGround(normal))
            {
                _normal = normal;
                break;
            }
        }
    }

    private bool IsGround(Vector3 normal)
    {
        if (normal.x > 0.5) return false;
        if (normal.z > 0.5) return false;
        if (normal.y < 0.1) return false;

        return true;
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.white;
        Gizmos.DrawLine(transform.position, transform.position + _normal * 3);
        Gizmos.color = Color.red;
        Gizmos.DrawLine(transform.position, transform.position + Project(transform.forward));
    }
    #endregion
}

Что нужно добавить для того чтобы поворот камеры учитывался и игрок двигался куда смотрит камера. Заранее спасибо


Ответы (1 шт):

Автор решения: Overlord

Используйте transform.forward:

private void FixedUpdate()
{
    Move(_verticalAxis, _horizontalAxis);
}

public void Move(float vertical, float horizontal)
{
    
    Vector2 direction = new Vector2(horizontal, vertical);
    direction.Normalize();

    Vector3 movePosition = Vector3.Normalize(direction.x * transform.right + direction.y * transform.forward);
    movePosition *= _Speed * Time.fixedDeltaTime;
    movePosition += transform.position;

    _rigidbody.MovePosition(movePosition);
}
→ Ссылка