我正在尝试制作第一人称摄影机,并且摄影机和播放器的移动完全按照我的需要来工作,但是现在的问题是,如果我用摄影机向右看并按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,而忽略摄像机方向。
答案 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()将表示-1
和1
之间的数字,所以我们基本上是说Input.GetAxis
决定了我们想要的 HOW MUCH 走。 1或-1?前进还是后退? forward * 1
或forward * -1
。扫射相同; right * 1
或right * -1
。