如何解决OverlapBoxAll 2d 没有检测到任何东西 改变到
这个脚本应该检测到 HurtBox 层的碰撞器的碰撞(使用 OverlapBoxAll)但是它不起作用我已经配置好矩阵层并且在检查器中分配了变量所以我不知道我的错误是什么。 pd:碰撞发生在 HitBoxUpdate 方法中 我的碰撞层矩阵2d:
https://answers.unity.com/storage/temp/173342-sin-titulo.png
场景和层次:
https://answers.unity.com/storage/temp/173344-scene.png
脚本:
public string owner = "-1";
public Vector3 BoxSize;
public Vector3 position;
public Quaternion rotation;
public LayerMask mask;
public bool useSphere = false;
public float radius = 0.5f;
public Color inactiveColor;
public Color collisionopenColor;
public Color collidingColor;
private ColliderState _state;
// ignoreList = ds_List_create()
public float hitStun = 60;
private IHitBoxResponder _responder = null;
// Update is called once per frame
void Update()
{
HitBoxUpdate();
}
public void StartCheckingCollision()
{
_state = ColliderState.Open;
}
public void StopCheckingCollision()
{
_state = ColliderState.Closed;
}
void OnDrawGizmos()
{
// Draw a yellow sphere at the transform's position
Debug.Log("draw hitBox gizmos");
CheckGizmoColor();
Gizmos.matrix = Matrix4x4.TRS(transform.position,transform.rotation,transform.localScale);
if (useSphere)
{
Gizmos.DrawSphere(Vector3.zero,radius); }
else
{
Gizmos.DrawCube(position,new Vector3(BoxSize.x * 2,BoxSize.y * 2,BoxSize.z * 2));
}
}
private void CheckGizmoColor()
{
switch (_state)
{
case ColliderState.Closed:
Gizmos.color = inactiveColor;
Debug.Log("Closed");
break;
case ColliderState.Open:
Gizmos.color = collisionopenColor;
Debug.Log("Open");
break;
case ColliderState.Colliding:
Gizmos.color = collidingColor;
Debug.Log("colliding");
break;
}
}
public void HitBoxUpdate()
{
StartCheckingCollision();
if (_state == ColliderState.Closed)
{
Debug.Log("Collider cloded");
return;
}
Debug.Log("Collider open hit");
Collider2D[] colliders = Physics2D.OverlapBoxAll(position,BoxSize,transform.eulerAngles.z,mask);
if (colliders.Length > 0)
{
_state = ColliderState.Colliding;
Debug.Log("We hit something hitBox");
}
if (colliders.Length > 0)
{
for (int i = 0; i < colliders.Length; i++)
{
if (colliders[i].gameObject.GetComponent<HurtBox>() != null)
{
if (colliders[i].gameObject.GetComponent<HurtBox>().owner == owner)
{
Debug.Log("collider skiped");
colliders = colliders.Skip(i).ToArray();
}
}
Debug.Log("Hit " + colliders[i].gameObject.name);
}
}
for (int i = 0; i < colliders.Length; i++)
{
Collider2D aCollider = colliders[i];
Debug.Log("Works");
_responder?.CollisionedWith(aCollider);
}
_state = colliders.Length > 0 ? ColliderState.Colliding : ColliderState.Open;
}
public void UseResponder(IHitBoxResponder responder)
{
_responder = responder;
}
} 公共枚举 ColliderState {
Closed,Open,Colliding
}
解决方法
改变
Collider2D[] colliders = Physics2D.OverlapBoxAll(position,boxSize,transform.eulerAngles.z,mask);
到
Collider2D[] colliders = Physics2D.OverlapBoxAll(position,mask);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。