根据相机改变玩家的运动方向

时间:2019-05-30 19:54:31

标签: c# unity3d

我正在尝试制作第一人称摄影机,并且摄影机和播放器的移动完全按照我的需要来工作,但是现在的问题是,如果我用摄影机向右看并按W向前移动,则它会向前移动而不是相机的视线方向。

我尝试过更改育儿方式,或使用转换将播放器和相机链接在一起。

// Simple Player movement
Rigidbody rb;
public float speed;

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

void FixedUpdate()
{
    float mH = Input.GetAxis("Horizontal");
    float mV = Input.GetAxis("Vertical");
    rb.velocity = new Vector3(mH * speed, rb.velocity.y, mV * speed);
}
// Camera controls (separate script)
private Transform playerBody;

void update()
{
    CameraRotation();
}

private void CameraRotation()
{
    float mouseX = Input.GetAxis(mouseXInputName) * mouseSensitivity * Time.deltaTime;
    float mouseY = Input.GetAxis(mouseYInputName) * mouseSensitivity * Time.deltaTime;
    xAxisClamp += mouseY;

    if (xAxisClamp > 90.0f)
    {
        xAxisClamp = 90.0f;
        mouseY = 0.0f;
        ClampAxisRotationToValue(270.0f);
    }
    else if (xAxisClamp < -90.0f)
    {
        xAxisClamp = -90.0f;
        mouseY = 0.0f;
        ClampAxisRotationToValue(90.0f);
    }
    transform.Rotate(Vector3.left * mouseY);
    playerBody.Rotate(Vector3.up * mouseX);
}

在最后一行playerBody.rotate中,我期望它旋转照相机所连接的对象,因此当我向前按下时,它将沿照相机所看的方向向前移动,但仍沿其静态X和Z,而忽略摄像机方向。

1 个答案:

答案 0 :(得分:1)

移动角色时,要设置其相对于世界轴的速度,并且不考虑对象旋转。

要将对象旋转添加到输入中,只需将输入基于旋转即可,如下所示:

void FixedUpdate()
{
    Vector3 mH = transform.right * Input.GetAxis("Horizontal");
    Vector3 mV = transform.forward * Input.GetAxis("Vertical");
    rb.velocity = (mH + mV) * speed;
}

mH和mV现在应该相对于对象所面对的位置,因为transform.forward(和.right)将表示对象的“转发”。

并且由于GetAxis()将表示-11之间的数字,所以我们基本上是说Input.GetAxis决定了我们想要的 HOW MUCH 走。 1或-1?前进还是后退? forward * 1forward * -1。扫射相同; right * 1right * -1