【发布时间】:2018-08-22 00:30:27
【问题描述】:
这行代码有什么作用?我希望它会向头部注视的地方投射光线。我这样做是为了 Camera.main.ScreenPointToRay(Input.mousePosition);在这里,我可以将光线投射到头部注视的位置,而不是鼠标的位置。
【问题讨论】:
标签: unity3d
这行代码有什么作用?我希望它会向头部注视的地方投射光线。我这样做是为了 Camera.main.ScreenPointToRay(Input.mousePosition);在这里,我可以将光线投射到头部注视的位置,而不是鼠标的位置。
【问题讨论】:
标签: unity3d
射线是具有起始位置和方向的向量。在这种情况下:
Ray ray = head.Gaze;
您将获得用户正在查看的方向和起点。这很可能与同时让相机向前和位置相同。
Ray ray = new Ray();
ray.direction = Camera.main.transform.forward;
ray.origin = Camera.main.transform.position;
编辑:基于评论
为了检查碰撞,您将使用 Raycast:
Raycasthit hitInfo;
float distance = 10.0f;
if(Physics.Raycast(ray.origin, ray.direction, out hitInfo, distance)){}
【讨论】:
要实现这一点,您可以使用 Raycast()。 这是一个例子:
Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 10))
{
// test what the raycast hit by checking hit information.
}
这将从主摄像机的位置投射一条光线,向前(正前方)最大距离为 10 个单位,并将在命中变量中输出命中信息,然后您可以从中进行测试。
编辑: 由于除了 head.Gaze 之外您没有提供任何其他信息,我无法告诉您它的作用,但假设它被正确命名,它会与 Ray(Camera.main.transform.position , Camera.main.transform.forward); 所以你可以像这样编写光线投射测试:
RaycastHit hit;
if (Physics.Raycast(head.Gaze, out hit, 10))
{
// test what the raycast hit by checking hit information.
}
我们需要知道头部对象是什么以及 Gaze 的对象类型是什么。如果它是一条射线,我有 99.9% 的把握它会充当你头部向前看方向的射线。你可以随时测试这个:)
【讨论】: