此代码连接到相机:移向transform.forward,忽略旋转
transform.position += Input.GetAxis("Vertical") * transform.forward * mod;
transform.position += Input.GetAxis("Horizontal") * transform.right * mod;
我用的.forward和.right因为玩家能够旋转的摄像头在Y axiz,从而无论摄像机朝向前进键的哪个方向总是将摄像机向前移动,左侧按键将相对地向左移动,依此类推。只是为了澄清 - 我希望它在局部空间中移动,而不是世界空间,所以向前是它所面对的方向,不一定是Vector3(0,0,1)。
相机是免费漫游的,没有父母或目标可以关注。
问题是相机有一个45度的X旋转向下看。使用transform.forward将会修改它的高度。还有一些滚动代码可以更改摄像机的高度,所以我不想将高度设置为固定值。我怎样才能将运动限制在X和Z上,最好不要让它变成空的?
更新:这段代码有效,但它并不漂亮,我确信有一个更优雅的使用Vector3.Project的解决方案,正如xyLe_所暗示的。如果我弄清楚,我会补充他的答案。
mod = Time.deltaTime * 30;
float yPos = transform.position.y;
pos = transform.position;
pos += Input.GetAxis("Vertical") * transform.forward * mod;
pos.y = yPos;
pos += Input.GetAxis("Horizontal") * transform.right * mod;
pos += Input.GetAxis("Mouse ScrollWheel") * transform.up * mod * -30;
[Math.Clamp](https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html)可以提供帮助。 – Catwood
那么你想用“世界”的前进方向吗?如果这是你的情况,那么世界方向是不变的'Vector3.Up = new Vector3(0,1,0);' –
'你的旋转'transform.right'旋转'transform.forward'使之与xz平面对齐 – TheDjentleman