我正在尝试在Box Collider2D的随机点处生成粒子效果。我知道如何为PolygonCollider2D做到这一点,但我只是想知道是否有类似的方法可以对Box Collider2D做到这一点。我正在尝试将此代码转换为Box Collider。有人可以指出我正确的方向吗?
PolygonCollider2D col = GetComponent<PolygonCollider2D>();
int index = Random.Range(0, col.pathCount);
Vector2[] points = col.GetPath(index)
Vector2 spawnPoint = Random.Range(0, points.Length);
答案 0 :(得分:2)
否,您没有Box Collider曲面的任何坐标数据。但是你可以计算出来。
假设您的盒子的宽度为2a,高度为2b。
当然,您可以分配两个随机值来首先确定x = abs(a) || y = abs(b)
,然后确定相应的y = rand(-b,b) || x = rand(-a, a)
。但这并不优雅(至少在我看来)。
因此,请按如下所示在极坐标中进行操作,在该极坐标中,您只能生成一个从0到360的Theta随机值。
Vector2 calCoor(double theta, int a, int b)
{
double rad = theta * Math.PI / 180.0;
double x, y;
double tan = Math.Tan(rad);
if (Math.Abs(tan) > b/ (double)a)
{
x = tan > 0 ? a : -a;
y = b / Math.Tan(rad);
} else
{
x = a * Math.Tan(rad);
y = tan < 0 ? b : -b;
}
return new Vector2(x,y);
}
别忘了将此vector2添加回Box Collider的坐标。
您可以找到将矩形从笛卡尔坐标转换为极坐标here的等式。