Есть равносильное действие transform.forward только для физического движения?

Transform.forward это по факту телепортация объекта вперед по оси Z, из-за телепортации гравитация перестает работать должным образом. Нужна равносильная замена, только физическая.

using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(CapsuleCollider))]
public class mainCharacterMovement : MonoBehaviour
{
private Vector3 moveVector;

public float speedCharacter = 5f;
public float ternVelocity = 3f;

private Rigidbody _rbMainCharacter;

void Start()
{
    _rbMainCharacter = GetComponent<Rigidbody>();
}

private void FixedUpdate()
{
    MoveLogic();
}

private void MoveLogic()
{
    moveVector.x = Input.GetAxis("Horizontal") * ternVelocity; 
    moveVector.z = Input.GetAxis("Vertical") * speedCharacter;


    
    _rbMainCharacter.velocity = transform.forward *  moveVector.z; //проблема
    _rbMainCharacter.AddTorque(transform.up * moveVector.x);



}
}

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

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

Написано с методом AddForce() - приложить силу.

Для теста нужны в иерархии объекты Plane и Sphere.

Базовое движение шара:

using UnityEngine;


[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour
{
    public float Speed = 10f;

    private Rigidbody _rb;


    void Start()
    {
        _rb = GetComponent<Rigidbody>();
    }


    // все действия с физикой в FixedUpdate
    void FixedUpdate()
    {
        MovementLogic();
    }


    private void MovementLogic()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");

        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        _rb.AddForce(movement * Speed);
    }

}
→ Ссылка