Unity代码报错CS1061求助:Collider2D[]无length定义
Unity C# 碰撞检测代码报错修复
原问题代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Collidable : MonoBehaviour { public ContactFilter2D filter; private BoxCollider2D boxCollider; private Collider2D[] hits = new Collider2D[10]; protected virtual void Start() { boxCollider = GetComponent<BoxCollider2D>(); } protected virtual void update() { // Collision work boxCollider.OverlapCollider(filter, hits); for (int i = 0; i < hits.length; i++) { if (hits[i] == null) continue; Debug.Log(hits[i].name); // The array is not cleaned up, so we do it ourself hits[i] = null; } } }
报错信息:
error CS1061: 'Collider2D[]' does not contain a definition for 'length' and no accessible extension method 'length' accepting a first argument of type 'Collider2D[]' could be found (are you missing a using directive or an assembly reference?)
修复要点:
- 数组长度属性大小写错误:C#中数组的长度属性是
Length(首字母大写),不是小写的length,这是触发报错的直接原因。 - Update方法名大小写错误:Unity MonoBehaviour的帧更新方法必须是大写的
Update,小写的update不会被Unity自动调用,你的碰撞检测逻辑根本不会执行。 - 优化遍历效率:
boxCollider.OverlapCollider会返回实际检测到的碰撞体数量,用这个返回值来遍历数组,不用循环整个数组的10个元素,避免无效的空值判断。
修复后完整代码:
using System.Collections; using System.Collections; using UnityEngine; public class Collidable : MonoBehaviour { public ContactFilter2D filter; private BoxCollider2D boxCollider; private Collider2D[] hits = new Collider2D[10]; protected virtual void Start() { boxCollider = GetComponent<BoxCollider2D>(); } protected virtual void Update() { // 获取实际碰撞到的数量 int hitCount = boxCollider.OverlapCollider(filter, hits); for (int i = 0; i < hitCount; i++) { Debug.Log(hits[i].name); // 清空当前元素,避免下一帧残留 hits[i] = null; } } }
内容的提问来源于stack exchange,提问作者Niks Rodžers
相关产品推荐
相关产品推荐

