【发布时间】:2018-04-02 09:34:04
【问题描述】:
所以我正在开发一个开门系统,如果用户将屏幕中间的焦点放在门把手上,我会通过 Raycast 检查。这是我的一些代码不起作用:
private void Update()
{
if (Physics.Raycast(Camera.transform.position, Camera.transform.forward, out rayHit, Distance))
{
Debug.DrawRay(Camera.transform.position, Camera.transform.forward, Color.blue);
Collider col = rayHit.collider;
if (col.tag == DoorKnopTag)
{
DoorIndicator.SetActive(true);
}
else
{
DoorIndicator.SetActive(false);
}
}
else
DoorIndicator.SetActive(false);
}
所以我没有将代码放入检查玩家选择门把手时是否单击鼠标的代码中,但我确信这不是问题。
问题是当我在我的场景中检查光线时,线条闪烁得很厉害。我调试了一下并得出结论,即使我不更改Camera.tranform.position,Camera.transform.forward 也会不断变化。当我将Physics.Raycast 的方向更改为常量Vector3 时,它不再闪烁,所以我认为问题出在transform.forward 上。但我不知道如何解决它。
【问题讨论】:
-
如果你也旋转相机,它会改变,而不仅仅是你改变相机的位置。
-
最奇怪的是它在我的游戏的场景 1 中运行良好,但在场景 3 中它变得很奇怪。但是当我构建游戏时,它会在场景 1 中闪烁,所以......也许这是一个性能问题??
-
我的评论只是针对
transform.forward更改而不是闪烁。您可能需要为闪烁问题上传 gif 或链接视频 -
DoorKnob 对象是您启用/禁用的 DoorIndicator 的一部分吗?
-
不,DiirIndicator 是一只手的图像。
标签: c# unity3d vector transform raycasting