我在this tutorial之后的一个简单项目中,我需要做的第一件事就是让玩家指向鼠标的位置。
为此,我按照以下教程编写了这段代码:
ddev ssh
http://bar.ddev.local
curl: (6) Could not resolve host: http://bar.ddev.local
这是问题所在:它可以工作,但是我不太理解为什么。我阅读了private void Update()
{
Vector3 input = Input.mousePosition;
Vector3 mousePosition = camera.ScreenToWorldPoint(new Vector3(input.x, input.y, camera.transform.position.y));
transform.LookAt(mousePosition + Vector3.up * transform.position.y);
}
上的文档,仍然不确定。
我的问题是双重的:
为什么要对要传递给ScreenToWorldPoint
的向量的camera.transform.position.y
分量使用z
?
为什么添加ScreenToWorldPoint
有用?没有它,如果鼠标离播放器太近,它将旋转身体并使其移动。有了它,播放器就只能在xz平面内旋转。
编辑:这是轮播的demonstration,以显示其有效。
答案 0 :(得分:4)
为什么要对我要传递给ScreenToWorldPoint的向量的z分量使用camera.transform.position.y?
传入的矢量的第三个分量是相机以世界单位表示的z位置。您可以在此处的文档中阅读:https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html
之所以是摄影机y,是因为我们正在寻找将地面指向世界的点,即距离我们的眼位置的摄影机y单位。如果摄像机的高度是摄像机的两倍,那么距眼睛位置仍为camera.y个单位。
为什么添加Vector3.up * transform.position.y起作用?没有它,如果鼠标离播放器太近,它将旋转身体并使其移动。有了它,播放器就只能在xz平面内旋转。
我假设对象的高度不为零。因此,如果世界位置在y高度为零,它将旋转身体。因此,观察点将更改为与对象的高度匹配。将向量乘以浮点数时,结果是一个向量,其中每个元素都乘以浮点数。
答案 1 :(得分:2)
注意:我对1的回答仅适用于3D透视相机的使用,与OP的情况不同
z距离设置为相机的z位置,因为在这种情况下深度并不重要。如果要设置近平面,则可以将其用作z距离,因为这就是您要看的前方。本质上是从相机到点的距离。
Vector3.up =(0,1,0),因此添加变换时将省略其他两个轴。我很确定这与进行new Vector3(0, transform.position.y, 0)