以上是效果展示

1,柏林噪声算法做地图代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GridMap : MonoBehaviour
{
public Image mapMin;//这里是方便获得小地图从而获得脚本去赋值
public Texture2D texture;//纹理
int w = 128;
int h = 128;

int wnum;//宽分块
int hnum;//高分块

public Vector3 v3;

// Start is called before the first frame update
void Start()
{
int w2 = 128 + 2;
int h2 = 128 + 2;

wnum = texture.width / 128;
hnum = texture.height / 128;

for (int i = 0; i < wnum; i++)
{
for (int j = 0; j < hnum; j++)
{
GameObject game = new GameObject();
game.transform.parent = transform;
//顶点助手
VertexHelper vh = new VertexHelper();
for (int x = 0; x < w2; x++)
{
for (int z = 0; z < h2; z++)
{
//柏林噪算法,传入两个坐标返回一个0到1的值(传入两个相同的值,坐标一定相同)
float y = Mathf.PerlinNoise((i * w + x) * 0.1f, (j * h + z) * 0.1f);
//计算UV坐标
float uvx = (float)(w * i + x) / (texture.width - 1);
float uvy = (float)(h * j + z) / (texture.height - 1);
vh.AddVert(new Vector3(w * i + x - texture.width / 2, y * 5, h * j + z - texture.height / 2), Color.white, new Vector2(uvx, uvy));
if (x < w2 - 1 && z < h2 - 1)
{
vh.AddTriangle(x * h2 + z, x * h2 + z + 1, (x + 1) * h2 + z + 1);
vh.AddTriangle(x * h2 + z, (x + 1) * h2 + z + 1, (x + 1) * h2 + z);
}
}
}

Mesh mesh = new Mesh();
vh.FillMesh(mesh);
game.AddComponent<MeshFilter>().mesh = mesh;
Material material = new Material(Shader.Find("Standard"));//材质
material.mainTexture = texture; //设置纹理
game.AddComponent<MeshRenderer>().material = material;//渲染纹理
game.AddComponent<MeshCollider>().sharedMesh = mesh;//设置网格碰器
}

}
//保存文理的修改
texture.Apply();
Material material1 = new Material(Shader.Find("UI/Default"));
material1.mainTexture = texture;
mapMin.material = material1;//此处是给小地图贴图

}

}

2,小地图代码(放大小地图或者缩小通过鼠标滑轮)

效果图

//代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class MapsMove : MonoBehaviour, IPointerEnterHandler,IPointerExitHandler
{
public Image map;
public bool sure;//做判断鼠标是否在小地图上面
public void OnPointerEnter(PointerEventData eventData)
{
sure = true;
}

public void OnPointerExit(PointerEventData eventData)
{
sure = false;
}

// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
if (sure)
{

if (Input.mouseScrollDelta.y > 0)//滚轮向上滑动
{

map.transform.localScale += Vector3.one;//放大image小地图

}
if (Input.mouseScrollDelta.y < 0)//滚轮向下滑动
{

if (map.transform.localScale.x - 1 > 0)//防止缩小超过最大值导致地图反转
{
map.transform.localScale -= Vector3.one;//缩小image小地图
}

}

}

}
}

3,通过玩家位置改变锚点和地图中玩家转向(此处代码应该写在小地图中,然后获取玩家脚本得到玩家移动数值,偷懒了QWQ)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerGod : MonoBehaviour
{
CharacterController character;
Vector3 leftv3;//左下角位置(世界坐标生成的地图左下角的位置)
Vector3 v3;//玩家的当前位置
public Image map;//小地图
public Image player;//玩家在小地图的image

public
// Start is called before the first frame update
void Start()
{
character = GetComponent<CharacterController>();//获取玩家控制器 此处是为了给玩家加重力
leftv3 = new Vector3(-540,0,-540);//地图在世界坐标中左下角位置
}

// Update is called once per frame
void Update()
{
v3 = transform.position;//玩家位置
float x = (v3.x - leftv3.x) / 1025f;//玩家位置的X-世界中地图的左下角位置求得差值x然后比宽的值 求得玩家在地图中的比值从而给锚点赋值
float z = (v3.z - leftv3.z) / 1025f;//同上
map.rectTransform.pivot = new Vector2(x,z);//给锚点重新赋值
map.transform.localPosition = Vector3.zero;//锚点清零使其移动
player.transform.eulerAngles = new Vector3(0,0, -transform.eulerAngles.y);//根据玩家旋转小地图中的玩家也旋转
character.Move(new Vector3(0, -Time.deltaTime * 3, 0));//模拟重力
transform.position += transform.forward * 10 * Time.deltaTime * Input.GetAxis("Vertical");//玩家移动代码 (此处为瞬移)
transform.eulerAngles += transform.up * 130 * Time.deltaTime * Input.GetAxis("Horizontal");//玩家移动代码

}
}

柏林噪声算法制作地图+小地图相关推荐

  1. 【转载】柏林噪声算法

    转载自:https://www.cnblogs.com/leoin2012/p/7218033.html   原作者:立航 柏林噪声是一个非常强大算法,经常用于程序生成随机内容,在游戏和其他像电影等多 ...

  2. 一篇文章搞懂柏林噪声算法,附代码讲解

    本文目的是以一种通俗简单的方式介绍Ken Perlin的改进版柏林噪声算法,讲解代码采用c#编写,开源免费使用.如果你只是想看完整代码,点击这里. 柏林噪声是一个非常强大算法,经常用于程序生成随机内容 ...

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

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

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

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

  5. MATLAB插值:柏林噪声插值

    这是MATLAB插值拟合系列的第四期,这里附上前几期的链接: 第三期:MATLAB数值拟合:最小二乘多项式拟合 第二期:matlab插值:拉格朗日插值 第一期:[数值分析拟合]Matlab三次样条插值 ...

  6. Unity-UGUI制作的小地图-可放大缩小视角,大地图小地图切换

    Unity-UGUI制作的小地图-可放大缩小视角,大地图小地图切换 1.效果图 文章最后也会附上 Demo下载地址 备注:资源是URP的,普通平台修改资源材质即可 缩小状态 放大状态 2.实现思路 首 ...

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

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

  8. unity柏林噪声生成2d随机地图

    1.说下思路.柏林噪声需要两个小于1的的参数导入.然后柏林噪声会输出一个相对波动变化的值0到1之间,如果对这个值进行的区间判断,就可以决定生成地图数量.比如,if<0.6再生成地图块, 2.对传 ...

  9. 使用柏林噪声随机创建像素地图

    主要参考:Unity中使用柏林噪声生成地图 using UnityEngine; using System.Collections; using System.Collections.Generic; ...

最新文章

  1. Springboot 打包时引入外部jar
  2. [转]程序集之GAC---Global Assembly Cache
  3. js在IE下面弹出打开和保存文件的对话框
  4. 星地融合→→→6G移动通信关键技术的未来
  5. Java虚拟机JVM的内存管理
  6. 下拉菜单,防鼠标反复触发
  7. python six库安装_Python 安装matplotlib,six,dateutil,pyparsing 完整过程
  8. SQL—数据模型的组成要素
  9. 重新认识margin-top和margin-bottom
  10. 拓端tecdat|R语言对巨灾风险下的再保险合同定价研究案例:广义线性模型和帕累托分布Pareto distributions分析
  11. thinkphp验证码点击更换js实现
  12. 天池性能挑战赛-高性能分析型查询引擎复赛12名赛后方案分享
  13. Computer:C盘简介成功解决当Win10系统进行深度学习的时候发现系统C盘满了,教你如何正确卸载一些非必要的内容(提高磁盘内存和网速)
  14. Windows系统设置共享文件夹及访问共享文件夹
  15. 信了你的邪之杭电1005
  16. 第一篇,嵌入式ubantu系统安装及常见ubantu命令,C语言数据类型和变量的定义
  17. 轻量化网络(二)MobileNetV2: Inverted Residuals and Linear Bottlenecks
  18. 【JS】通过JS实现超市小票打印功能——ActiveX控件
  19. 作为一位资深Java程序员应该注意的几点
  20. C# 使用 Direct2D 实现斜角效果

热门文章

  1. java英文开发文档阅读_API文档的阅读
  2. matlab-画图及颜色设置
  3. docker启动mysql容器后自动Exited
  4. MATLAB实现动态规划算法,基于Matlab的动态规划算法的实现及应用
  5. 【程序媛晒83行代码】被代码耽误的吃货小姐姐,用代码终结选择困难症
  6. 计算机地址分配 DHCP 静态,OpenWrt/LEDE 设置 DHCP 静态 IP 地址分配不生效处理
  7. VMware中Bridged、NAT、host-only三种网络连接模式的原理及其区别
  8. 【第一阶段 day23 面向对象】构造方法 构造代码块与局部代码块 this
  9. HBuilder 编辑器中光标变成下横线的问题
  10. AcWing练习代码