代码之家  ›  专栏  ›  技术社区  ›  spoilerd do

统一变换。前进是不断变化的

  •  1
  • spoilerd do  · 技术社区  · 7 年前

    因此,我正在开发一种开门系统,通过光线投射检查用户是否将屏幕中央的焦点对准门把手。以下是我的代码中不起作用的部分:

    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.transform.forward 即使我不改变 Camera.tranform.position 。当我改变方向时 Physics.Raycast 对于常量矢量3,它不再闪烁,所以我认为问题在于 transform.forward 。但我看不出怎么修。

    1 回复  |  直到 7 年前
        1
  •  1
  •   FaTaLL    7 年前

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

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

    光线投射闪烁的原因大部分是由从碰撞器投射光线投射引起的。检查光线投射原点上是否有碰撞器。