【问题标题】:Why am I getting NullReferenceException when I try to write out the tag of the gameobject what was hit by a raycast?当我尝试写出被光线投射击中的游戏对象的标签时,为什么会出现 NullReferenceException?
【发布时间】:2015-08-08 01:28:38
【问题描述】:

我不知道我为什么会得到它。只有当光线投射到物体上时才会弹出。

void Update(){
RaycastHit2D hitSideRight = new RaycastHit2D();
            hitSideRight = Physics2D.Raycast (transform.position, Vector2.right, 1.2f, 1 << LayerMask.NameToLayer("Ground"));
            Debug.DrawRay (transform.position, Vector2.right* 1.2f);

            RaycastHit2D hitSideLeft = new RaycastHit2D();
            hitSideLeft = Physics2D.Raycast (transform.position, -Vector2.right, 1.2f, 1 << LayerMask.NameToLayer("Ground"));
            Debug.DrawRay (transform.position, -Vector2.right* 1.2f);

            if(hitSideLeft.collider != null || hitSideRight.collider != null){
                CancelMove();
                Debug.Log(hitSideRight.collider.tag.ToString());
            }
}

我收到这行代码的错误(仅当射线与对象接触时):Debug.Log(hitSideRight.collider.tag.ToString());

【问题讨论】:

  • 当 NRE 实际与左侧碰撞(使您的条件为真)而不是右侧时,您会得到 NRE?并且没有必要在那里new你的两个 RaycastHit2D。
  • 但如果我不使用 new 而不是一个简单的指针,不是吗?

标签: unity3d raycasting


【解决方案1】:

|| 替换为&amp;&amp;,因为如果hitSideLeft null 且hitSideRight 为null,则条件将为true,您将获得一个NullPointer

if(hitSideLeft.collider != null || hitSideRight.collider != null){
     CancelMove();
     Debug.Log(hitSideRight.collider.tag.ToString());
}

【讨论】:

  • 哦...我没注意到我写的是hitSideRight而不是Left
【解决方案2】:

如果你想保留||,你可以试试这个

RaycastHit2D col = hitSideLeft.collider ?? hitSideRight.collider;
if(col != null){
     CancelMove();
     Debug.Log(col.tag.ToString());
}

但你应该知道...Physics2D.Raycast(...) 返回 bool 而不是 RaycastHit2D

您的光线投射应如下所示:

RaycastHit2D hitSideRight;
Ray ray = new Ray(transform.position, Vector2.right);
if(Physics2D.Raycast (ray, out hitSideRight, 1.2f, 1 << LayerMask.NameToLayer("Ground")))
{}

【讨论】:

    猜你喜欢
    • 2021-03-21
    • 2021-10-23
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多