c# - 如何从 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 的坐标。
您可以在此处找到将矩形从笛卡尔坐标转换为极坐标的 eqn 。
推荐阅读
- mongodb - 如何从 shell 暂停/恢复 mongodb 云/atlas 集群
- html - Svelte 无法正确处理来自 x3dom 的点击事件
- single-sign-on - Azure B2C 单一注销在 Edge 或 IE11 中不起作用
- hana - SAP HANA 中是否有任何方法可以查找所有 sql 语句属于同一过程的内容
- php - 短代码中的 WooCommerce 评论明星
- java - 如何正确迁移到 Realm 中的嵌入式对象?
- python - 如果变量没有,如何将备用值分配给变量
- css - 修改 GTK 按钮样式/CSS 并立即更新/刷新
- jenkins - 如何在詹金斯管道脚本上禁用轻量级结帐?
- winapi - 如何在 Win32 API 中重现资源管理器按钮