gpt4 book ai didi

c# - 转向 transform.forward,忽略旋转

转载 作者:行者123 更新时间:2023-11-30 20:32:29 35 4
gpt4 key购买 nike

此代码附在相机上:

transform.position += Input.GetAxis("Vertical") * transform.forward * mod;
transform.position += Input.GetAxis("Horizontal") * transform.right * mod;

我使用了 .forward 和 .right 因为玩家可以在 Y 轴上旋转相机,因此无论相机面向哪个方向,forward 键总是将相机相对向前移动,left 键将将它相对向左移动等等。澄清一下 - 我希望它在本地空间而不是世界空间中移动,所以向前是它面向的方向,不一定是 Vector3(0,0,1)。

相机自由漫游,没有 parent 或目标可跟随。

问题是相机的 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;

最佳答案

我现在可能会胡说八道,但对我来说似乎很简单:

Vector3 desiredDirection = Vector3.Normalize(new Vector3(transform.forward.x, transform.position.y, transform.forward.z))

只需将 transform.forward 投影到位于 transform.position.y 高度的 x-z 平面上。这样做(通常)会导致向量略短,因此您必须对其进行重新归一化。

可视化:

vec img

如果我没理解错的话,transform.forward 对应于黑色矢量,而您想要绿色矢量。通过将黑色向量的 y 分量设置为红点位置 y 分量的 y 分量,您将得到紫色向量,它必须重新归一化。

关于c# - 转向 transform.forward,忽略旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41464037/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com