Почему я получаю исключение NullReferenceException, когда пытаюсь записать тег игрового объекта, на который попал радиопередача?

Я не знаю, почему я получаю это. Он появляется только тогда, когда лучевая передача попадает на объект.

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());

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")))
{}

Замещать || за && потому что, если hitSideLeft не является нулевым и hitSideRight равно нулю, условие будет истинным, и вы получите NullPointer

if(hitSideLeft.collider != null || hitSideRight.collider != null){
     CancelMove();
     Debug.Log(hitSideRight.collider.tag.ToString());
}
Другие вопросы по тегам