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
C# 光线投射命中碰撞器始终为空_C#_Unity3d - Fatal编程技术网

C# 光线投射命中碰撞器始终为空

C# 光线投射命中碰撞器始终为空,c#,unity3d,C#,Unity3d,我试图检测用户是否被禁足。我在屏幕上有一个GameObject,上面有一个boxcollizer2d组件,它位于地面层。然后,我有一个带有rigiidbody2d和CircleCollider2D的字符以及这个类: public class CharacterEnvironment : MonoBehaviour { float distToGround; // Use this for initialization void Start() { va

我试图检测用户是否被禁足。我在屏幕上有一个
GameObject
,上面有一个
boxcollizer2d
组件,它位于
地面
层。然后,我有一个带有
rigiidbody2d
CircleCollider2D
的字符以及这个类:

public class CharacterEnvironment : MonoBehaviour {

    float distToGround;

    // Use this for initialization
    void Start() {
        var collider = GetComponent<CircleCollider2D>();
        distToGround = collider.bounds.extents.y;
    }

    // Update is called once per frame
    void Update() {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, distToGround + 0.1f, LayerMask.NameToLayer("Ground"));
        Debug.Log(hit.collider);
        if (hit && hit.collider != null) {
            Debug.Log(hit.collider);
        }
    }
}
公共类CharacterEnvironment:MonoBehavior{
漂浮在地面上;
//用于初始化
void Start(){
var collider=GetComponent();
distToGround=collider.bounds.extensts.y;
}
//每帧调用一次更新
无效更新(){
RaycastHit2D hit=Physics2D.Raycast(transform.position,Vector2.down,distToGround+0.1f,LayerMask.NameToLayer(“地面”);
Log(hit.collider);
if(hit&&hit.collider!=null){
Log(hit.collider);
}
}
}
当我的光线投射运行时,
hit.collider
始终为
null
,即使对象位于地面对象的顶部。我计算错了吗


Edit:我在if语句中添加了对
hit
的检查。

Physics2D.Raycast
返回一个bool,指示它是否命中了任何内容。你应该做的第一件事是在继续之前检查返回值,否则不管是否有任何东西被击中,你都会一直检查碰撞器。它不会返回bool,
Physics。Raycast
返回bool。它返回一个
RaycastHit2D
第二个重复答案显示,在检查碰撞器或其他可能命中对象的组件之前,必须先检查
hit
是否为
null
。这就是为什么你会犯这样的错误。如果您修复了它,但无法检测到地板,请使用新的修复代码提出新问题。@Serlite Not true
Physics2D.Raycast
返回
RaycastHit2D
,而
Physics.Raycast
返回一个布尔值。@程序员即使我也检查了
hit
,并且播放器坐在地面上,我仍然得到空值,它永远不会进入我的if语句。
Physics2D.Raycast
返回布尔值,指示它是否击中了任何东西。你应该做的第一件事是在继续之前检查返回值,否则不管是否有任何东西被击中,你都会一直检查碰撞器。它不会返回bool,
Physics。Raycast
返回bool。它返回一个
RaycastHit2D
第二个重复答案显示,在检查碰撞器或其他可能命中对象的组件之前,必须先检查
hit
是否为
null
。这就是为什么你会犯这样的错误。如果您修复了它,但无法检测到地板,请使用新的修复代码提出新问题。@Serlite Not true
Physics2D.Raycast
返回
RaycastHit2D
,而
Physics.Raycast
返回一个布尔值。@程序员即使我也检查了
hit
,并且播放器坐在地面上,我仍然得到空值,并且它永远不会进入我的if语句。