【问题标题】:Changing the direction of player movement in accordance to camera根据相机改变玩家移动的方向
【发布时间】:2019-05-30 19:54:31
【问题描述】:

我正在尝试制作第一人称相机,并且相机和玩家移动完全按照我的需要工作,但是我现在的问题是,如果我用相机向右看并按 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 方向移动,而忽略相机方向。

【问题讨论】:

    标签: c# unity3d


    【解决方案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 决定了我们想要前进的多少。 1 还是 -1?向前还是向后? forward * 1forward * -1。与扫射相同; right * 1right * -1

    【讨论】:

    • 好的,我知道我需要相对于对象方向而不是世界方向进行移动。但是,通过您建议的编辑,它抱怨无法将 Vector3 转换为浮点数。引用一个游戏对象并将速度应用于该对象,这可能会修复它
    • 对不起,我写的很匆忙。它写得不好,我会用更好的解释和工作代码重新制作它。等一下
    • 是的,修复了它。非常感谢
    • 太棒了!如果它是问题的正确答案,请不要忘记接受答案! =)
    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多