我试图在盒子Collider2D的随机点上产生粒子效应。我知道如何在一个PolygonCollider2D中这样做,但我只是想知道是否有类似的方法来实现一个Box Collider2D。我正试图将此代码转换为Box对撞机。有人能给我指明正确的方向吗?
PolygonCollider2D col = GetComponent<PolygonCollider2D>();
int index = Random.Range(0, col.pathCount);
Vector2[] points = col.GetPath(index)
Vector2 spawnPoint = Random.Range(0, points.Length);发布于 2018-08-23 07:42:54
不,你没有任何关于盒对撞机表面的坐标数据。但你可以算出来。
假设你的盒子是2a宽和2b高。
当然,您可以指定两个随机值来决定第一个,x = abs(a) || y = abs(b)和相应的y = rand(-b,b) || x = rand(-a, a)。但它并不优雅(至少我认为如此)。
因此,让我们在极坐标中这样做,在这里,你只能生成一个从0到360之间的随机值作为θ。
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对撞机的坐标。
您可以找到从笛卡尔坐标到极坐标here转换矩形的eqn。
https://stackoverflow.com/questions/51979673
复制相似问题