Abs*_*the 3 c# unity-game-engine
此代码附加到相机:
transform.position += Input.GetAxis("Vertical") * transform.forward * mod;
transform.position += Input.GetAxis("Horizontal") * transform.right * mod;
Run Code Online (Sandbox Code Playgroud)
我使用了 .forward 和 .right ,因为玩家可以在 Y 轴上旋转相机,因此无论相机面向哪个方向,前向键总是使相机相对向前移动,左键将相对移动它左等等。只是为了澄清 - 我希望它在本地空间移动,而不是世界空间,所以向前是它所面对的方向,不一定是 Vector3(0,0,1)。
摄像机可以自由漫游,没有可跟随的父级或目标。
问题是相机的 X 旋转角度为 45 度,可以向下看。因此,使用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;
Run Code Online (Sandbox Code Playgroud)
我现在可能会胡说八道,但对我来说似乎很简单:
Vector3 desiredDirection = Vector3.Normalize(new Vector3(transform.forward.x, transform.position.y, transform.forward.z))
只需transform.forward投影到高度为 的 xz 平面上即可transform.position.y。这样做(通常)会导致向量稍短,因此您必须对其进行重新归一化。
可视化:
如果我理解正确的话,transform.forward对应于黑色向量,而你想要绿色向量。通过将黑色向量的 y 分量设置为红点位置 y 分量的 y 分量,您将得到紫色向量,该向量必须重新归一化。
| 归档时间: |
|
| 查看次数: |
9084 次 |
| 最近记录: |