Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据摄像机改变球员的移动方向_C#_Unity3d - Fatal编程技术网

C# 根据摄像机改变球员的移动方向

C# 根据摄像机改变球员的移动方向,c#,unity3d,C#,Unity3d,我正在尝试制作一个第一人称摄像机,摄像机和玩家的移动方式正是我所需要的,但我现在的问题是,如果我用摄像机向右看,然后按W键向前移动,它将按照游戏世界而不是摄像机的方向向前移动 我尝试过改变父母的方式,或者使用变换将播放器和相机连接在一起 // Simple Player movement Rigidbody rb; public float speed; void Start() { rb = GetComponent<Rigidbody>(); } void Fixed

我正在尝试制作一个第一人称摄像机,摄像机和玩家的移动方式正是我所需要的,但我现在的问题是,如果我用摄像机向右看,然后按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);
}
//简单的玩家移动
刚体rb;
公众浮标速度;
void Start()
{
rb=GetComponent();
}
void FixedUpdate()
{
float mH=Input.GetAxis(“水平”);
float mV=输入。GetAxis(“垂直”);
rb.velocity=新矢量3(mH*速度,rb.velocity.y,mV*速度);
}
//摄影机控件(单独的脚本)
私人转换播放器;
无效更新()
{
摄影机旋转();
}
专用无效摄影机旋转()
{
float mouseX=Input.GetAxis(mouseXInputName)*mouseSensitivity*Time.deltaTime;
float mouseY=Input.GetAxis(mouseYInputName)*mouseSensitivity*Time.deltaTime;
xAxisClamp+=鼠标;
如果(xAxisClamp>90.0f)
{
xAxisClamp=90.0f;
mouseY=0.0f;
夹钳轴旋转值(270.0f);
}
否则如果(X轴夹钳<-90.0f)
{
xAxisClamp=-90.0f;
mouseY=0.0f;
卡箍轴旋转值(90.0f);
}
transform.Rotate(Vector3.left*mouseY);
playerBody.旋转(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
)将表示对象的“forward”是什么


由于GetAxis()将表示
-1
&
1
之间的一个数字,我们基本上是说
输入。GetAxis
决定了我们要前进多少。1还是-1?向前还是向后<代码>转发*1或
转发*1
。与扫射相同
right*1
right*-1

好的,我知道我需要相对于对象方向而不是世界方向进行移动。然而,对于您建议的编辑,它抱怨无法将矢量3转换为浮点。那么,引用一个游戏对象并将速度应用于该对象,这可能会修复它吗?对不起,我写这篇文章很匆忙。它写得很差,我将用更好的解释和工作代码重新编写它。等一下是的,修好了。非常感谢你!如果答案正确,不要忘记接受答案!=)
void FixedUpdate()
{
    Vector3 mH = transform.right * Input.GetAxis("Horizontal");
    Vector3 mV = transform.forward * Input.GetAxis("Vertical");
    rb.velocity = (mH + mV) * speed;
}