笔者也是废了九牛二虎之力才发现这个API并选择一种相对效率高还简单的实现方法
克服了同层级空气墙的问题
这样可以实现只跟列表里的物体能发生碰撞
在使用之前请确保:空气墙 原本 可以与列表指定的物体发生碰撞
然后本脚本会自动取消列表外的全部碰撞,以实现指定的空气墙效果
using System.Linq;
using UnityEngine;
public class AppointCollider2D : MonoBehaviour
{
private Collider2D[] colliders; // 用于存储自身的所有Collider2D组件
public Collider2D[] targets = new Collider2D[0];
public void OnCollisionEnter2D(Collision2D collision)
{
colliders = GetComponents<Collider2D>();
var allColliders = collision.gameObject.GetComponents<Collider2D>();
foreach (var otherCollider in allColliders)
{
foreach (var thisCollider in colliders)
{
bool exist = false;
foreach(var target in targets)
{
if(target==otherCollider)
{
exist = true;
break;
}
}
if(!exist)
Physics2D.IgnoreCollision(otherCollider, thisCollider, true);
}
}
}
public void Refresh()
{
}
}