栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity 在一个圆内尽量均匀的随机生成位置

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity 在一个圆内尽量均匀的随机生成位置

生成随机位置
  • 1.分析
  • 2.代码
  • 3.小结

1.分析

在一个圆内随机生成位置,还要尽量均匀。
在这里我们可以以圆心为原点,然后展开一个坐标系,我们可以把圆分成4部分,也就是四个象限。

然后我们就只需要在这个四个范围内依次生成位置就好啦。
具体如何实现呢?

2.代码
int count = 100;//生成点的个数
        //四个区域的单位顶点
        Vector2[] allArea = { new Vector2(1, 1), new Vector2(1, -1), new Vector2(-1, 1), new Vector2(-1, -1) };
        List allPos = new List();//存储生成的位置
        for(int i=0;i
            Vector2 pos = Random.insideUnitCircle;//随机一个圆内的位置出来

            float x = Mathf.Abs(pos.x);//把随机出来的位置固定到第一象限
            float y = Mathf.Abs(pos.y);

            int index = i % allArea.Length;//计算allArea的下标
            Vector2 point = new Vector2(x, y) * allArea[index];//确定这个点所在的区域
            allPos.Add(point);//把点存起来
        }

这样我们就尽量均匀的吧点随机生成到圆内
下面我们来看效果


我们可以看到相对还是比较均匀的

我们再来看看生成四个点的效果
1.这个是没有处理过的,标红的是中心点

2.这个是处理过的标红的是中心点

3.小结

其实不这样处理也可以比较均匀的随机在圆里面,这样处理的好处就是我们可以保证每一块区域生成的点比其他区域最多差一个。生成点的个数越少就越可以体现出来这个算法的优势。所以还是看个人需求,一般没有特殊要求的话光一个Random.insideUnitCircle;也足够了。
谢谢大家!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/898303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号