如何从 Box Collider2D 中获取随机点
How to get random points from a Box Collider2D
我正在尝试在 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);
不,您没有任何 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。
我正在尝试在 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);
不,您没有任何 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。