在Unity中实现小地图(Minimap)
小地图的基本概念
众所周知,小地图(或雷达)是用于显示周围环境信息的。首先,小地图是以主角为中心的。其次,小地图上应该用图标来代替真实的人物模型,因为小地图通常很小,玩家可能无法看清真实的模型。
大多数小地图都是圆形的,所以本文也将创建圆形小地图。通常小地图周围还会有一些按钮和标签,本文也会介绍。
创建场景
新建场景,导入Unity Chan模型作为玩家,导入两个机器人作为敌人。
游戏视图
添加一个新的相机。依次点击菜单项GameObject -> Camera新建相机并命名为Minimap Camera。然后将该相机设为Unity Chan的子对象,并将其坐标设为Unity Chan上方10个单位,把相机对准Unity Chan模型。
设置Minimap Camera
为了达到更好的效果,将position设为(0, 10, 0),rotation设为(90, 0, 0)。现在相机显示效果如下:
但这还不是小地图。现在运行场景,你可以看到只有上图中的内容显示出来。我们必须把小地图做成一个UI元素。
渲染到UI层
这里需要用到Render Texture来实现。依次点击菜单项Assets -> Create -> Render Texture新建Render Texture并命名为Minimap Render Texture。
选中Minimap Camera后在检视面板将Target Texture字段设为Minimap Render Texture。
现在运行场景会发现Minimap Camera中的内容不见了,这是因为它被显示到了新建的Render Texture中。
下面新建Canvas来添加UI元素。依次点击菜单项GameObject -> UI -> Canvas来新建Canvas。
这里需要使用Raw Image在Canvas中显示Render Texture的内容。依次点击菜单项GameObject -> UI -> Raw Image新建Raw Image,然后命名为Minimap Image,在检视面板中将Texture字段设为Minimap Render Texture。
现在Minimap Camera相机中的内容可以作为UI来显示了!
下面将小地图变为圆形。这里需要用到一张简单的遮罩纹理:
新建Image并为其添加Mask组件,将Image的Source Image字段设为上面的遮罩图片,并将Minimap Image设为Mask的子对象。
注意:为了达到更好的视觉效果,记得禁用遮罩纹理的Mipmap。
现在小地图显示效果如下:
小地图的白色背景看起来不太美观,给它加一个边框:
为了让整个小地图移动起来更方便,新建一个空的GameObject命名为Minimap,并将所有对象设为Minimap子对象。
最后将小地图移至屏幕右上角。
效果不错吧?但这还不是真正意义上的小地图,只是相机从顶部取景的图像而已。接下来通过Layer来做一些设置!
设置Layer
这里需要新建一个Layer。依次点击菜单项Edit -> Project Settings -> Tags and Layers新建Layer命名为Minimap。
然后新建三个球体。一个设为蓝色代表Unity Chan。将该球体设为Unity Chan的子对象,并将其Layer设为Minimap。
对两个机器人进行同样的操作,将球体改为红色。
现在最关键的一步来了!选中Main Camera并确保其Culling Mask中不包括Minimap这一层。
然后选中Minimap Camera让其Culling Mask只包括Minimap这一层。
现在这个小地图看起来就比较完善了!
最后步骤
还可以做一些调整。首先将Minimap Camera的Clear Flags设为Solid Color并将其颜色改为浅灰色,以便让小地图背景与小球的对比度更强。
还可以添加一些UI元素来操作小地图。这里使用标签作为示例,最后结果如下:
当角色或机器人移动时,小地图上的小球也会即时更新位置。
更多unity2018的功能介绍请到paws3d爪爪学院查找。
在Unity中实现小地图(Minimap)的更多相关文章
- Unity中做放大镜 效果
孙广东 2015.8.16 事实上和 小地图都几乎相同了. 还是要借助 还有一个相机 目的: 这篇文章的主要目的是 要给你一个想法 怎样做放大境效果 . 在unity中能够简单的实现放大镜效果啊 ...
- Unity中使用Attribute
Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...
- 在Unity中使用UGUI修改Mesh绘制几何图形
在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...
- Unity中使用WebView
Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...
- Unity中创建二维码
在网络上发现了一个可以把字符串转换成二维码的dll,但是我们要怎么使用他呢.不废话,直接进入主题. 用到的引用 using UnityEngine;using ZXing;using ZXing.Qr ...
- 在Unity中创建可远程加载的.unity3d包
在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...
- 【原创翻译】初识Unity中的Compute Shader
一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
- Unity中各个平台的预编译的运用方式
1,unity中官方文档的一个操纵关键词 Platform Dependent Compilation 2,常用的预编译关键词 UNITY_EDITOR 编辑器调用.UNITY_STA ...
随机推荐
- 安装ie时,报:此安装不支持您的操作系统的当前语言
打开注册表(win的"运行"栏键入 regedit 再按 OK )的HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Nls/ ...
- Java中浮点数的精度问题 【转】
当您在计算Money的时候,请看好了!!!要不损失了别后悔!!! 现象1: public static void main(String[] args) { System.out.println(0. ...
- Linux系统根目录各文件夹的含义
centos7文件结构截图如下: 首先,我要说明我在安装centos系统的过程中,勾选了GNOME的图形界面,功能当中勾选了办公工具和开发工具,办公工具就是类似于微软的office,现在在微软offi ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- 使用WampServer和DVWA在Windows10上搭建渗透测试环境
前言: DVWA是一个具有脆弱性的Web测试应用,需要PHP和MySQL的环境支持.我们可以手动配置DVWA所需的运行环境,也可以使用WampServer进行搭建.WampServer是集成了Apac ...
- 居中 html css
<div id="main" style="width:800px;height: 600px;margin:0 auto"> <!-- 这里 ...
- JavaScript设计模式 Item 3 --封装
在JavaScript 中,并没有对抽象类和接口的支持.JavaScript 本身也是一门弱类型语言.在封装类型方面,JavaScript 没有能力,也没有必要做得更多.对于JavaScript 的设 ...
- 你不知道的JavaScript--Item2 浮点数精度
理解JavaScript的浮点数 大多数编程语言都有几种数值型数据类型,但是JavaScript却只有一种.你可以使用typeof 运算符查看数字的类型.不管是整数还是浮点数,JavaScript都将 ...
- log4j的配置与使用
配置log4j的步骤如下: 1.导入jar包 如log4j-1.2.15.jar 2.在src下添加log4j.properties 使用时把下面内容中的注释去掉: //日志级别及位置 log4j.r ...
- node.js面向对象实现(二)继承
http://blog.sina.com.cn/s/blog_b5a53f2e0101nrdi.html 继承是面向对象中非常重要的一个概念,那么在Node.js中如何实现继承呢? node.js在u ...