Повернуть объект относительно его текущего вращения - PullRequest
1 голос
/ 06 августа 2020

У меня есть этот скрипт, который заставляет куб перемещаться и вращаться как плоскость, но я хочу, чтобы он вращался относительно его текущего вращения.

 int movementSpeed = 2;
    public float rotspeed = 3f;
    public Rigidbody force;
    void FixedUpdate()
    {
        force.AddForce (transform.forward * Time.deltaTime * movementSpeed, ForceMode.VelocityChange);

        if (Input.GetKey("d"))
        {
            force.AddTorque(0, rotspeed, 0, ForceMode.VelocityChange);
        }
        if (Input.GetKey("a"))
        {
            force.AddTorque(0, rotspeed*-1, 0, ForceMode.VelocityChange);
        }
        if (Input.GetKey("w"))
        {
            force.AddTorque(rotspeed, 0, 0, ForceMode.VelocityChange);
        }
        if (Input.GetKey("s"))
        {
            force.AddTorque(rotspeed * -1 , 0, 0, ForceMode.VelocityChange);
        }
    }

Если бы я повернул свою плоскость вверх, и затем нажмите «a» или «d», я бы хотел повернуть его только влево или вправо, но вместо этого он пытается повернуть, как если бы я был в вертикальном положении.

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Подобно transform.rotation и transform.localRotation, также существуют два разных метода приложения сил / крутящих моментов к жестким телам:

Вместо использования Rigidbody.AddTorque, который принимает

torque: вектор крутящего момента в мировых координатах .

и, следовательно, вращается в глобальном мировом пространстве, которое вы бы предпочли использовать Rigidbody.AddTorqueRelative , который принимает

torque: вектор крутящего момента в локальных координатах .

и

Добавляет torque к Rigidbody относительно его системы координат .

force.AddForceRelative (Vector3.forward * Time.deltaTime * movementSpeed, ForceMode.VelocityChange);

if (Input.GetKey("d"))
{
    force.AddTorqueRelative(0, rotspeed, 0, ForceMode.VelocityChange);
}
if (Input.GetKey("a"))
{
    force.AddTorqueRelative(0, -rotspeed, 0, ForceMode.VelocityChange);
}
if (Input.GetKey("w"))
{
    force.AddTorqueRelative(rotspeed, 0, 0, ForceMode.VelocityChange);
}
if (Input.GetKey("s"))
{
    force.AddTorqueRelative(-rotspeed, 0, 0, ForceMode.VelocityChange);
}
0 голосов
/ 06 августа 2020

Используйте AddRelativeTorque вместо AddTorque.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...