【问题标题】:Unity, get random position within an area?团结,在一个区域内获得随机位置?
【发布时间】:2017-02-23 08:04:13
【问题描述】:

如下图所示,我想在蓝色区域 (B) 而不是红色区域 (A) 内找到一个随机位置。我怎样才能做到这一点? A 和 B 目前是 2 个对撞机。我只需要 B 内的职位,但不能在 A 内。提前致谢。

A and B areas

【问题讨论】:

  • 在B中找到一个位置,如果它也在A中,再试一次(即拒绝采样)。

标签: c# unity3d vector spawning


【解决方案1】:

一个解决方案与 Nico Schertler 在评论中提到的相同

  1. 获取两个矩形每个顶点的坐标。
  2. 将蓝色三角形的最小x的x坐标和红色三角形的最小坐标作为一对。(xminBlue,xminRed)。以红色三角形的max x的x坐标和蓝色三角形的max坐标为一对。(xmaxRed,xmaxBlue)
  3. 对 Y 坐标执行相同操作并获得 (yminBlue,yminRed) 。 (ymaxRed,ymaxBlue)
  4. 使用 if(Random.value < GetRatio(xminBlue-xminRed),xmaxRed-xmaxBlue){ x= Random.Range(xminBlue,xminRed); }else { x= Random.Range(xmaxRed,xmaxBlue); } float GetRatio (float distance_1,float distance_2){ return distance_1 / distance_1 + distance_2;
    }
  5. 和4一样得到y的值

在这个解决方案中你不需要拒绝任何坐标

【讨论】:

  • 非常感谢这个解决方案,它正是我所需要的,而且很容易理解。
  • 我测试了它,它工作正常,只有一个问题,为什么
  • 抱歉,不要使用 random.value
  • 对于 y 轴,if 语句应该类似于 if (Rand
  • 对于 y 轴,if 语句应该是 if (Random.value
猜你喜欢
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 2012-04-14
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多