如何从Box Collider2D获取随机点

时间:2018-08-23 06:37:19

标签: c# unity3d collider

我正在尝试在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);

1 个答案:

答案 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的等式。