如何在运行时为Unity中的碰撞计算正确的精灵范围

因此,在Unity中进行2D游戏时,我偶然发现了这个问题,并认为我会分享我发现效果很好的解决方案。 最初,必须有一个带有SpriteRenderer组件的预制件,而没有添加任何对撞机组件,当敌人死亡时会实例化该组件。 我们将随机精灵应用于从VFX精灵数据库中获取的实例化GameObject,该数据库存在于包含许多不同VFX精灵的项目中。 实例化的对象是2D精灵,应放置在地面上并发生碰撞,该碰撞的IsTrigger属性设置为true以进行图层调整(内部机制可以更改特定地面和其他碰撞区域上的SpriteRenderer排序顺序) 。 这是在Unity Sprite“编辑器”中打开的原始Sprite,其大小为64×64。 如果尝试在运行时将BoxCollider2D组件添加到对象,该组件具有一个SpriteRenderer组件,该组件绘制上面显示的精灵,则产生的碰撞的大小将不正确,如下所示。 我要解决的问题是首先在Unity Sprite编辑器中编辑边框,如下所示。 我为小精灵的边框的4个值添加了绿色矩形标记,它们是:L(eft),R(ight),T(op),B(ottom)。 这些值表示我们从4个所述方向使用工具引入的填充。 现在我们在哪里可以找到这些值? 当我们添加BoxCollider2D组件时,它不会使用刚刚定义的边框自动计算出正确的大小。 取而代之的是,从sprites数据库中随机获得的sprite具有类型为Vector4的边框组件。 因此,我们有x,y,z,w而不是L,R,T,B(无论在Unity Sprite编辑器中说什么)。 我发现这是它们彼此对应的方式:…