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