Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 当我试图写出被光线投射击中的游戏对象的标签时,为什么会出现NullReferenceException?_Unity3d_Raycasting - Fatal编程技术网

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