主要是利用Unity的 Mathf.PerlinNoise   函数(柏林噪声)的不同寻常的功能。

https://docs.unity3d.com/ScriptReference/Mathf.PerlinNoise.html   其中一个实例代码是生成  柏林噪声图片。     第二个实例是动画效果(看似y轴的随机运动,对随机的动画来讲很好啊!)。

这样设置 得到:

1、Mathf.PerlinNoise  函数的返回值是 0~1

2、一样的输入,输出也必将是一样的:  比如下面的测试,输出一直是 0.4652731

void Update()

{

float height = heightScale *Mathf.PerlinNoise(5f/*Time.time * xScale*/, 0.0F);

3、他的代码思路就是  100 *100个方块,然后根据 x, z 设置y坐标值和颜色(跟y有关),

float xSample = (cube.transform.localPosition.x + _seedX) / _relief;

float zSample = (cube.transform.localPosition.z + _seedZ) / _relief;

float noise = Mathf.PerlinNoise(xSample, zSample);

y = _maxHeight * noise;

为了增加随机性, 对x,z 的系数做随机:

_seedX = Random.value * 100f;

_seedZ = Random.value * 100f;

比如使用噪声生成 类似我的世界的地图等

代码相对简单,直接在Awake 函数中执行生成了 地图!

改变   尺寸 (宽度和深度)

改变   最大高度

如果不启用柏林噪声,而是使用随机的效果:

平整度:

还有是否添加碰撞体:

_relief 跌宕起伏,决定了 采样的间隔大小。值越大跨度越小。

地图大小,就是控制父对象的scale

[csharp] view plain copy
  1. // RandomMapMaker.cs
  2. using UnityEngine;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. public class RandomMapMaker : MonoBehaviour {
  6. private float _seedX, _seedZ;
  7. [SerializeField]
  8. private float _width = 50;
  9. [SerializeField]
  10. private float _depth = 50;
  11. [SerializeField]
  12. private bool _needToCollider = false;
  13. [SerializeField]
  14. private float _maxHeight = 10;
  15. [SerializeField]
  16. private bool _isPerlinNoiseMap = true;
  17. [SerializeField]
  18. private float _relief = 15f;
  19. [SerializeField]
  20. private bool _isSmoothness = false;
  21. [SerializeField]
  22. private float _mapSize = 1f;
  23. //=================================================================================
  24. //初期化
  25. //=================================================================================
  26. private void Awake () {
  27. transform.localScale = new Vector3(_mapSize, _mapSize, _mapSize);
  28. _seedX = Random.value * 100f;
  29. _seedZ = Random.value * 100f;
  30. for (int x = 0; x < _width; x++) {
  31. for (int z = 0; z < _depth; z++) {
  32. GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
  33. cube.transform.localPosition = new Vector3 (x, 0, z);
  34. cube.transform.SetParent (transform);
  35. if(!_needToCollider){
  36. Destroy(cube.GetComponent<BoxCollider> ());
  37. }
  38. SetY (cube);
  39. }
  40. }
  41. }
  42. private void OnValidate (){
  43. if(!Application.isPlaying){
  44. return;
  45. }
  46. transform.localScale = new Vector3(_mapSize, _mapSize, _mapSize);
  47. foreach (Transform child in transform) {
  48. SetY (child.gameObject);
  49. }
  50. }
  51. private void SetY(GameObject cube){
  52. float y = 0;
  53. if(_isPerlinNoiseMap){
  54. float xSample = (cube.transform.localPosition.x + _seedX) / _relief;
  55. float zSample = (cube.transform.localPosition.z + _seedZ) / _relief;
  56. float noise = Mathf.PerlinNoise(xSample, zSample);
  57. y = _maxHeight * noise;
  58. }
  59. else{
  60. y = Random.Range (0, _maxHeight);
  61. }
  62. if(!_isSmoothness){
  63. y = Mathf.Round (y);
  64. }
  65. cube.transform.localPosition = new Vector3 (cube.transform.localPosition.x, y, cube.transform.localPosition.z);
  66. Color color = Color.black;
  67. if(y > _maxHeight * 0.3f){
  68. ColorUtility.TryParseHtmlString("#019540FF", out color);
  69. }
  70. else if(y > _maxHeight * 0.2f){
  71. ColorUtility.TryParseHtmlString("#2432ADFF", out color);
  72. }
  73. else if(y > _maxHeight * 0.1f){
  74. ColorUtility.TryParseHtmlString("#D4500EFF", out color);
  75. }
  76. cube.GetComponent<MeshRenderer> ().material.color = color;
  77. }
  78. }

参考:

百度百科:  http://baike.baidu.com/item/%E6%9F%8F%E6%9E%97%E5%99%AA%E5%A3%B0

http://postd.cc/understanding-perlin-noise/

http://evilonedeath.blog.fc2.com/blog-entry-127.html

http://befool.co.jp/blog/ayumegu/unity-study-Noise/

http://kan-kikuchi.hatenablog.com/entry/PerlinNoise

Unity中 噪音算法相关推荐

  1. 【项目记录】过程内容生成(PCG)与快速泊松碟采样算法实现Unity中的物件摆放

    背景   在当今游戏开发过程中,创建一个内容丰富的虚拟世界一直是一个十分费时的工作.游戏制作者们希望在更短的时间内在游戏中增加更加多样的内容,过程内容生成技术为有限时间内制作复杂的虚拟世界提供了一种解 ...

  2. 在Unity中使用四叉树算法绘制地形

    四叉树算法在游戏中获得了广泛的应用,前几年3D引擎实现的地形绘制大部分都是用四叉树生成的,因为移动端在硬件方面的限制,我们的地形使用的是美术自己制作的地形,对于程序来说省去了不少工作量,但是作为程序开 ...

  3. Unity中的AI算法和实现1-Waypoint

    本文分享Unity中的AI算法和实现1-Waypoint 在Unity中, 我们有一些有趣且常见的AI算法可以研究和使用, 其中最常见的就是怪物的简单AI, 比如在RPG游戏里, 怪物在某些点定点巡逻 ...

  4. 本文分享Unity中的AI算法和实现3-有限状态机FSM(下)

    本文分享Unity中的AI算法和实现3-有限状态机FSM(下) 回家生孩子, 暂停了一个多月的更新, 今天重新续上, ^_^. 在上一篇文章中, 我们分享了状态机的基本理论, 然后结合Unity的An ...

  5. Unity中的AI算法和实现2-有限状态机FSM(上)

    本文分享Unity中的AI算法和实现2-有限状态机FSM(上) 在上一篇文章中, 我们基于Waypoint构建了一个最简单的AI怪物, 这个怪物可以在几个点之间巡逻. 本篇文章会在此基础之上, 添加怪 ...

  6. 如何在Unity中实现AStar寻路算法及地图编辑器

    文章目录 AStar算法 简介 实现 Node节点 节点间的估价 算法核心 邻节点的搜索方式 地图编辑器 简介 实现 绘制地图网格 障碍/可行走区域 地图数据存储 AStar算法 简介 Unity中提 ...

  7. 使用新的输入系统在 Unity 中构建第三人称控制器

    如果你随机挑选几款游戏,每款游戏可能会有不同的艺术风格和机制.不同的故事,甚至根本没有故事,但它们都有一个共同点:所有游戏都需要读取和处理输入来自键盘.鼠标.游戏手柄.操纵杆.VR 控制器等设备. 构 ...

  8. 使用示例_在Unity中使用ComputeShader示例

    写这篇的缘由是最近老师给了一个UE4的工程,是一个海水模拟的Demo,实现了二十年前一篇paper的算法,paper的地址是: http://citeseerx.ist.psu.edu/viewdoc ...

  9. 浅析Unity中的Enlighten与混合光照

    0x00 前言 在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten[1]来提供实时全局照明以及烘焙全局照明,在5.6之后Unity引入了新的Lightmapp ...

最新文章

  1. activiti框架 数据库设计说明书
  2. Linux国内源介绍
  3. python 解码json数据并在一个OrderdDict中保留其顺序
  4. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
  5. Mac版本Navicat下载
  6. htmlcss实例小项目_小程序websocket心跳库——websocket-heartbeat-miniprogram
  7. win7系统图标太大的缩小教程
  8. 35 【kubernetes】configMap
  9. 华为云企业主机安全服务之“网页防篡改”:拒绝网页变脸,服务实时在线
  10. form表单reset报 reset is not a function
  11. 强化学习读书笔记 - 03 - 有限马尔科夫决策过程
  12. 实战Nginx与Perl、Java的安装与配置
  13. Docker安装(有网环境下) 最新版docker-ce安装教程
  14. [译]关于Android图形系统一些事实真相
  15. 微信公众号如何变得更好_五个使Windows变得更好的绝对必要的实用程序
  16. python制作数据增长动图_手把手教你做一个python+matplotlib的炫酷的数据可视化动图...
  17. 什么牌子的护眼灯最好推荐?盘点口碑好的护眼灯品牌
  18. IDEA 中如何完成Git 和SVN 版本控制的切换
  19. python爬取晋江_爬虫爬取晋江文学网总分榜(失败)
  20. 用友数据库服务器如何修改,怎样用友数据库服务器配置

热门文章

  1. 畅言单点登录php代码,畅言 - 帮助 - wordpress单点登录教程
  2. 巴比特巴比特 | 元宇宙每日必读:武汉发布促进元宇宙产业创新发展实施方案,武汉的元宇宙要这么干!...
  3. EC20 4G模块上网配置
  4. Java使用ffmpeg去除图片水印
  5. 【苹果相册推送】Apple Album推照片书]发生了什么事?
  6. The Little Book of Mindfulness by Gilly Pickup
  7. 只让QQ主界面变成透明皮肤,其他地方都不变
  8. 点到反比例函数最短距离怎么求_谁教教我反比例函数距离公式?
  9. lazarus IDE技巧
  10. ZZULIOJ 1091: 童年生活二三事(多实例测试)详细讲解(c语言)