Unity3d 当我试图写出被光线投射击中的游戏对象的标签时,为什么会出现NullReferenceException?
我不知道为什么我会得到它。它仅在光线投射击中对象时弹出Unity3d 当我试图写出被光线投射击中的游戏对象的标签时,为什么会出现NullReferenceException?,unity3d,raycasting,Unity3d,Raycasting,我不知道为什么我会得到它。它仅在光线投射击中对象时弹出 void Update(){ RaycastHit2D hitSideRight = new RaycastHit2D(); hitSideRight = Physics2D.Raycast (transform.position, Vector2.right, 1.2f, 1 << LayerMask.NameToLayer("Ground")); Debug.DrawRay (
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());
}
}
void Update(){
RaycastHit2D hitSideRight=新的RaycastHit2D();
hitSideRight=Physics2D.Raycast(transform.position,Vector2.right,1.2f,1替换|
的&
,因为如果hitSideLeft
为非空且hitSideRight
为空,则条件将为真,您将得到一个空指针
if(hitSideLeft.collider != null || hitSideRight.collider != null){
CancelMove();
Debug.Log(hitSideRight.collider.tag.ToString());
}
如果您想保留| |
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")))
{}
RaycastHit2D-hitSideRight;
光线=新光线(transform.position,Vector2.right);
如果(Physics2D.Raycast)(光线,out-hitSideRight,1.2f,1)当它实际与左侧碰撞时,您将获得NRE(使您的条件为真)而不是右边?也没有必要new
你的两个raycasthit2d。但是如果我不使用new,它只是一个简单的指针,不是吗?哦…我没有注意到我写了hitSideRight
不是Left