首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Box Collider2D中获取随机点

如何从Box Collider2D中获取随机点
EN

Stack Overflow用户
提问于 2018-08-23 06:37:18
回答 1查看 590关注 0票数 1

我试图在盒子Collider2D的随机点上产生粒子效应。我知道如何在一个PolygonCollider2D中这样做,但我只是想知道是否有类似的方法来实现一个Box Collider2D。我正试图将此代码转换为Box对撞机。有人能给我指明正确的方向吗?

代码语言:javascript
复制
PolygonCollider2D col = GetComponent<PolygonCollider2D>();
int index = Random.Range(0, col.pathCount);
Vector2[] points = col.GetPath(index)
Vector2 spawnPoint = Random.Range(0, points.Length);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 07:42:54

不,你没有任何关于盒对撞机表面的坐标数据。但你可以算出来。

假设你的盒子是2a宽和2b高。

当然,您可以指定两个随机值来决定第一个,x = abs(a) || y = abs(b)和相应的y = rand(-b,b) || x = rand(-a, a)。但它并不优雅(至少我认为如此)。

因此,让我们在极坐标中这样做,在这里,你只能生成一个从0到360之间的随机值作为θ。

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51979673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档