【发布时间】:2017-06-22 06:21:12
【问题描述】:
我有一个播放器对象,我正在尝试使用鼠标让播放器看向鼠标位置。这工作正常,但是当播放器上坡或它的高度发生变化时,鼠标光线投射平面不会调整到播放器的高度。
// Look input
Ray ray = viewCamera.ScreenPointToRay(Input.mousePosition);
Plane groundPlane = new Plane(Vector3.up,Vector3.zero);
float rayDistance;
if(groundPlane.Raycast(ray,out rayDistance)) {
Vector3 point = ray.GetPoint(rayDistance);
//Debug.DrawLine(ray.origin,point,Color.red);
controller.LookAt(point);
}
我曾尝试在 Google 上搜索答案,但缺少结果似乎表明我问错了问题。我还查看了 Plane 的 Unity 文档,但我不明白我在寻找什么。任何帮助将不胜感激。我被卡住了,这让我无法在我创建的第一款游戏上取得进展。
【问题讨论】:
-
您可能只需将
point的Y设置为在调用LookAt之前等于玩家的Y。 -
感谢建议,我试过了 point.y = transform.position.y;在 LookAt 之前,它似乎执行相同的操作。我认为这会起作用,因为它似乎是有道理的,但没有,我不知道为什么。
-
所以只要跟进,点 x,y,z 是基于光线投射的。我认为光线投射是基于鼠标的位置,x 和 z 也需要调整。我相信这就是为什么只对 y 进行更改不起作用的原因。
-
您使用哪种相机风格?自顶向下?等距?
-
这是一个想法。也许您不想对地平面进行光线投射,因为这只会返回地面上的一个点。相反,您可能想要做的是将光线投射到玩家高度的平面上。这样一来,您从光线投射中获得的点就已经处于玩家高度。