【问题标题】:Unity tranform.forward is constanly changingunity transform.forward 不断变化
【发布时间】: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.positionCamera.transform.forward 也会不断变化。当我将Physics.Raycast 的方向更改为常量Vector3 时,它不再闪烁,所以我认为问题出在transform.forward 上。但我不知道如何解决它。

【问题讨论】:

  • 如果你也旋转相机,它会改变,而不仅仅是你改变相机的位置。
  • 最奇怪的是它在我的游戏的场景 1 中运行良好,但在场景 3 中它变得很奇怪。但是当我构建游戏时,它会在场景 1 中闪烁,所以......也许这是一个性能问题??
  • 我的评论只是针对transform.forward 更改而不是闪烁。您可能需要为闪烁问题上传 gif 或链接视频
  • DoorKnob 对象是您启用/禁用的 DoorIndicator 的一部分吗?
  • 不,DiirIndicator 是一只手的图像。

标签: c# unity3d vector transform raycasting


【解决方案1】:

尝试使用 FixedUpdate() 而不是 Update()。

对于物理事件,您应该使用 FixedUpdate(), 对于图形事件,您应该使用 Update()。

光线投射闪烁的原因是大部分时间从对撞机投射光线投射造成的。检查光线投射原点上是否有碰撞器。

【讨论】:

  • 好吧,我试试。但经过一番检查后,我得出结论,这也与我的游戏表现有关。例如,我将所有灯光设置为实时。这使得它非常缓慢。所以在我改变一些混合和烘烤后,性能变得更好,闪烁消失了。但我一定会尝试你的建议,让它变得更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
相关资源
最近更新 更多