c# - 根据相机改变玩家移动的方向

标签 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 中,同时忽略相机方向。

最佳答案

当您移动角色时,您是在设置它相对于世界轴的速度,而不考虑对象旋转。

要将对象旋转添加到输入中,只需将输入基于这样的旋转即可:

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 确定 < em>我们想前进多少。 1 或 -1?前进还是后退? forward * 1forward * -1。与扫射相同; right * 1right * -1

关于c# - 根据相机改变玩家移动的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56384810/

相关文章:

c# - 以编程方式有选择地禁用 Windows 上特定程序的 UAC

c# - 统一。一定时间后的函数调用

android - 如何在 Unity 应用程序和常规 Android 应用程序之间进行通信?

c# - 从其他线程调用主线程中的方法

c# - 具有虚线样式和大量数据点的 MSChart 折线图

c# - 获取非通用任务的结果

c# - JArray - 按键名搜索对象

unity3d - Gradle构建在Unity2018中失败

performance - Unity3D 哪种方式做2D碰撞比较快?

c# - 阅读HttpContent的前n个字符