利用柏林噪音生成随机地图<2/2/2018>

什么是柏林噪音?(请自行百度)Perlin噪声 ( Perlin noise )指由Ken Perlin发明的自然噪声生成算法 。

原理学习可以参考:http://postd.cc/understanding-perlin-noise/

此处我们主要参考的是http://kan-kikuchi.hatenablog.com/entry/PerlinNoise的柏林噪音生成方法:

先上效果图:

然后上kikuchi写的柏林噪音脚本:

//  RandomMapMaker.cs
//  http://kan-kikuchi.hatenablog.com/entry/PerlinNoise
//
//  Created by kan kikuchi on 2016.3.14.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;/// <summary>
/// ランダムにマップを生成する
/// </summary>
public class RandomMapMaker : MonoBehaviour
{//シードprivate float _seedX, _seedZ;//マップのサイズ[SerializeField][Header("------実行中に変えれない------")]private float _width = 50;[SerializeField]private float _depth = 50;//コライダーが必要か[SerializeField]private bool _needToCollider = false;//高さの最大値[SerializeField][Header("------実行中に変えられる------")]private float _maxHeight = 10;//パーリンノイズを使ったマップか[SerializeField]private bool _isPerlinNoiseMap = true;//起伏の激しさ[SerializeField]private float _relief = 15f;//Y座標を滑らかにするか(小数点以下をそのままにする)[SerializeField]private bool _isSmoothness = false;//マップの大きさ[SerializeField]private float _mapSize = 1f;//=================================================================================//初期化//=================================================================================private void Awake(){//マップサイズ設定transform.localScale = new Vector3(_mapSize, _mapSize, _mapSize);//同じマップにならないようにシード生成_seedX = Random.value * 100f;_seedZ = Random.value * 100f;//キューブ生成for (int x = 0; x < _width; x++){for (int z = 0; z < _depth; z++){//新しいキューブ作成、平面に置くGameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);cube.transform.localPosition = new Vector3(x, 0, z);cube.transform.SetParent(transform);if (!_needToCollider){Destroy(cube.GetComponent<BoxCollider>());}//高さ設定SetY(cube);}}}//インスペクターの値が変更された時private void OnValidate(){//実行中でなければスルーif (!Application.isPlaying){return;}//マップの大きさ設定transform.localScale = new Vector3(_mapSize, _mapSize, _mapSize);//各キューブのY座標変更foreach (Transform child in transform){SetY(child.gameObject);}}//キューブのY座標を設定するprivate void SetY(GameObject cube){float y = 0;//パーリンノイズを使って高さを決める場合if (_isPerlinNoiseMap){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;}//完全ランダムで高さを決める場合else{y = Random.Range(0, _maxHeight);}//滑らかに変化しない場合はyを四捨五入if (!_isSmoothness){y = Mathf.Round(y);}//位置設定cube.transform.localPosition = new Vector3(cube.transform.localPosition.x, y, cube.transform.localPosition.z);//高さによって色を段階的に変更Color color = Color.black;//岩盤っぽい色if (y > _maxHeight * 0.3f){ColorUtility.TryParseHtmlString("#019540FF", out color);//草っぽい色}else if (y > _maxHeight * 0.2f){ColorUtility.TryParseHtmlString("#2432ADFF", out color);//水っぽい色}else if (y > _maxHeight * 0.1f){ColorUtility.TryParseHtmlString("#D4500EFF", out color);//マグマっぽい色}cube.GetComponent<MeshRenderer>().material.color = color;}}

Unity中利用柏林噪音生成随机地图相关推荐

  1. Unity中使用柏林噪声生成地图

    孙广东  2017.3.27 http://blog.csdn.NET/u010019717 主要是利用Unity的 Mathf.PerlinNoise   函数(柏林噪声)的不同寻常的功能. htt ...

  2. Unity使用波函数坍缩 (Wave Collapse Function)算法生成随机地图

    在游戏领域和人工智能领域有一个随机生成地图用的比较多的算法叫做波函数坍缩 (Wave Collapse Function)算法,这个算法可以根据自己定制的规则生成随机地图. 根据波函数坍缩算法的源码 ...

  3. Unity记录3.3-地图-柏林噪声生成 2D 地图

    文章首发及后续更新:https://mwhls.top/4486.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...

  4. Unity 在代码中利用Mesh实时生成圆环/空心圆柱

    本篇文章主要介绍了利用Unity中的mesh 实时生成圆环的过程以及思想,我会在开头直接放出源码.如若有任何疑问,可向后继续观看详细解说~~~ (PSPSPS:Mesh生成的顺序,方式等有很多,当前代 ...

  5. Unity记录3.4-地图-柏林噪声生成 1D 地图及过渡地图

    文章首发及后续更新:https://mwhls.top/4489.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...

  6. 木木的Unity学习笔记(四)—— Unity中的柏林噪声(Perlin Noise)

    木木的Unity学习笔记(四)-- Unity中的柏林噪声 柏林噪声是一个非常强大算法,经常用于程序生成随机内容,在游戏和其他像电影等多媒体领域广泛应用.算法发明者Ken Perlin也因此算法获得奥 ...

  7. 关于“搭桥”游戏生成随机地图的设计思路

    是很久以前写的一个小游戏.名字为:Bridge Puzzle Game. 是一款益智类的小游戏. 游戏链接:http://www.puzzle-bridges.com/ 游戏中最重要的一个功能是随机生 ...

  8. Dataset:数据生成之利用pandas自定义生成随机各自类型(离散型和连续型)的dataframe数据

    Dataset:数据生成之利用pandas自定义生成随机各自类型(离散型和连续型)的dataframe数据 目录 数据生成之利用pandas自定义生成随机数据 输出结果 实现代码 数据生成之利用pan ...

  9. Unity中利用材质自发光实现物体闪烁效果

    Unity中利用材质自发光实现物体闪烁效果 补充:这种方法有一点问题,在测试(Windows平台)的时候发现,要想在Build出来的游戏中实现闪烁效果,就必须在 Project 窗口中将源材质的自发光 ...

最新文章

  1. 清华唐杰教授:人工智能的下一个十年,认知推理是重点(附PPT下载)
  2. perl mysql 数据推拉_Perl操作Mysql数据库
  3. java虚拟机改装_java虚拟机线上配置
  4. Springboot如何利用http请求控制器
  5. android 数据库 字节数组,Android上的GreenDAO:字节数组作为主键/构建包含字节数组属性Where子句的查询...
  6. Linux常用命令大全(五)
  7. python输出文字和数字加法_用c语言或者python将文件中特定字符串后面的数字相加...
  8. 视频实现blob加密
  9. 北京限行轮换时间7月5日起,北京新一轮尾号限行规定用便签提醒
  10. python 当前日期_python 当前时间获取方法
  11. “函数...已有主体”问题解决
  12. 软件工程本科生实习_我从n00b实习生到工程团队主管的方式
  13. 翟菜花:当防沉迷遇到职业电竞,我们能怎么办?
  14. 确认OHS版本的方法
  15. 思维导图 基础篇(11)应用-文章分析-框架法
  16. 深圳高新技术企业补贴政策
  17. CSS中的常见单位(px,%,em,rem,vw,vh,vmax,vmin,calc)
  18. 中微子超光速_定制中微子皮棉
  19. 健身泡沫轴可以带上高铁吗_15大最佳泡沫轴肌肉放松训练,90%的健身者都不会!...
  20. ASP.NET 系列_07_编程指南(三)

热门文章

  1. 网页中设定表格边框的厚度的属性_网页设计与开发第6章试卷及答案资料
  2. 网络流之最大流和最小割
  3. java 生成stub,Java工程使用axis的stub生成webservice客户端代码
  4. 【2017版韩顺平老师SSM框架自学笔记】Spring
  5. C#数据库编程入门:病人管理系统
  6. 物联网网关如何对PLC设备进行数据采集?
  7. Android Gradle多渠道和自动化打包(深入篇)
  8. android应用权限被默认关闭了,Android 应用权限管理默认开关的修改方法
  9. fasterrcnn论文_FasterRCNN 损失函数到全局解析
  10. 移动端css hover效果,css移动端:acitve效果的实现