Почему я получаю исключение 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());
}