2.柏林噪声算法

柏林噪声算法

随机生成一条线上的多个节点

        lineRenderer = GetComponent<LineRenderer>();
        Vector3[] positions = new Vector3[100];
        for (int i = 0; i < positions.Length; i++)
        {
            positions[i] = new Vector3(0, Random.value, i * 0.1f);
        }
        lineRenderer.SetPositions(positions);

alt

使用柏林噪声

使用柏林噪声获得一个更加符合真实世界中的一些随机现象(平滑),比如山脉、树木的纹理、火焰、随机但有规律。

                positions[i] = new Vector3(0, Mathf.PerlinNoise(i * lacunarity,i * lacunarity), i * 0.1f);

alt

柏林噪声并不属于均匀分布,也不属于正态分布。而是连贯随机性,连续生成的随机数之间相关。意味着我们不会再得到一个小的随机数后下一个突然出现一个很大的随机数。如下是柏林噪声图(灰度图黑色是0,白色是1),可以发现像素值在邻域连续变化,在不相邻区域有区分度,可以通过lacunarity控制选取的噪声间隙来控制平滑度。

alt

因此对于需要一定连续随机性的功能都可以使用柏林噪声生成如:

  • 地图生成
  • 角色移动,方向速度加速度
  • 动画叠加层
  • 精准度 连续成果或者失败,保持良好状态,运气值
  • 注意力 守卫警惕程度
  • 行为风格 防御型,进攻型
  • 角色情绪

随机数种子

柏林噪声生成的随机数每次其实是一样的,因此需要添加一些随机性。

        float seedX = Random.Range(1, 10000);
        float seedY = Random.Range(1, 10000);
        positions[i] = new Vector3(0, Mathf.PerlinNoise(i * lacunarity + seedX,i * lacunarity+ seedY), i * 0.1f);

使用添加随机数种子的柏林噪声同时生成两条线。 alt

Unity独立游戏开发

全部评论

相关推荐

不愿透露姓名的神秘牛友
01-17 11:44
你在各大软件投了一份又一份,你打招呼的hr一个接一个,但是只要你投过的,很快就下线了,没关系你的能量是很强,你看过的岗位招到人的速度都增加了。朋友们一个个拿着丰厚的实习回报,你却默默在家刷新邮箱,等待着那寥寥无几的面试通知。你每天一睁眼就狂投简历,你一有面试邀约就点确认。过年亲戚们围坐聊天,谈论着他们孩子的职场成就,你试图插话说自己面试过的公司数量,但他们显然不太感兴趣。你在心里自嘲,觉得他们不懂面试的艰辛、不懂得每一次面试机会的珍贵,不懂得一张张精心准备的简历背后的努力。笑你那个小侄子只会在网上刷刷职位,而你已经是各大招聘网站的常客。亲戚们夸赞自己孩子一年的成就,儿子的新工作,女儿的晋升,而...
龚新化:这帖删了呗,这跟我朋友有点相似,不过我是无所谓的😀,没什么感觉,我不轻易破防的,但是我一个朋友可能有点汗流浃背了😕,他不太舒服想睡了,当然不是我哈,我一直都是行的,以一个旁观者的心态看吧,也不至于破防吧😃,就是想照顾下我朋友的感受,他有点破防了,还是建议删了吧😯,当然删不删随你,因为我是没感觉的,就是为朋友感到不平罢了🥺
点赞 评论 收藏
分享
2024-12-03 16:23
四川大学 Java
喜欢修勾的牛肉丸上岸了:川大就够了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务