Unity C#:旋转问题,现在面向错误的方向

时间:2018-04-03 07:05:50

标签: c# unity3d

我有一个角色/刚性,而且她有一个'她'可以转身。当我在Unity中按Play时,如果我向前/向后移动,那很好,她向前/向后移动。这是一个好的开始。

但是如果我向左或向右转,然后前进/后退,她现在向侧面移动。

她是刚体组件,设置为场景中的父级。

当然这并不困难,但是我无法弄清楚如何设置她的轮换,以便当她转身时,她会向前移动'当我按下按钮让她前进!有很多第一人称射击游戏,你可以转身和移动前进'并且玩家朝着正确的方向前进。

目前我的轮换脚本是这样的:

Vector3 EulerAngleVelocity;
public float rotateSpeed = 250.0f;

void Update() {
    if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.DownArrow))
    {
        MoveVector = PoolInput();
        Move();
    }

    if (Input.GetKey(KeyCode.RightArrow))
    {
        EulerAngleVelocity = new Vector3(0, rotateSpeed, 0);
        Quaternion deltaRotation = Quaternion.Euler(EulerAngleVelocity * Time.deltaTime);
        rigidbody.MoveRotation(rigidbody.rotation * deltaRotation);
    }
}

private void Move()
{
    rigidbody.AddForce((MoveVector * moveSpeed));
}

private Vector3 PoolInput()
{
    Vector3 dir = Vector3.zero;

    dir.x = joystick.Horizontal();
    dir.z = joystick.Vertical();

    if (dir.magnitude > 1)
        dir.Normalize();

    return dir;
}

2 个答案:

答案 0 :(得分:5)

您正在移动操纵杆并添加与WORLD相关的方向,而不是与您的玩家相关。如果您想要相对于RigidBody的方向添加力,可能您要使用的是rigidBody.AddForcedocumentation),而不仅仅是public int Age() { int Year= DateTime.Now.Year; // only the year in int int YIP=Year-Year of production; // Year of production from user input return YIP; }

答案 1 :(得分:1)

您的问题不在于您的轮换代码,而是您的动作代码。您在世界空间中应用了一个动作,而不是局部空间('对象' -space)。

例如,如果您正在使用Vector3.Forward,则需要使用transform.Forward