WOW制作小地图




。。。。。。。。。。。。。。。。。




原本只是想用unity自带的GUI功能实现魔兽世界的小地图效果,结果折腾了一个晚上。
原来的思路如下:

  • 根据玩家坐标,计算出应显示的地图缩略图部分(128×128);
  • 用GUI遮罩将非白色的部分剔除(这样可以实现任意形状的小地图);
  • 将地图框叠加到第二步中的纹理上;
  • 将玩家指示物放置在地图中心,并根据当前玩家的Transform.Rotation计算出指示物的旋转角度;

在做到一半的时候发现GUI Texture只能使用Texture,无法使用Material,这也就意味着不能使用Shader做遮罩的剔除效果。在网上搜索了好久,发现有好多老外也在问相关的问题,但是就是没有很合适的解决方案。经过再三考虑之后,咬咬牙决定舍弃系统自带的GUI功能,使用第三方GUI插件。


其实之前也有了解过相关的插件,比如NGUI、EZGUI和IGUI之类的,只不过感觉如果太依赖第三方插件则会导致“知其然而不知其所以然”,所以也一直没去学习使用。工欲善其事必先利其器,既然已经决定要使用第三方插件了,那么选择一个趁手的当然是首要问题。通过比较最终选择了NGUI,NGUI的全称是Next – Gen UI(次世代界面),它提供了快速创建常用的2D控件的功能,如按钮、文本框、滚动条等,继承Unity所见即所得的优良传统,并实现了Draw Call的合并,以优化性能。


目前最新版本NGUI是2.6.3,传送门在此。下载解压之后会得到一个NGUI203d.unitypackage的文件,双击就可以像导入自带资源包一样把NGUI导入到当前项目中。如果文件关联失效了,也可以通过主菜单的”Assets→Import Package→Custom Package…“手动导入。最终在Unity的工程面板中就可以得到一个NGUI目录,里边包括了所有的资源,还有一些范例场景(在Examples/Scenes下面)。其相关的中文教程也并不少,有很多达人都共享了他们宝贵的经验,我这里就不再赘述基础知识点了,多问问度娘一定会让你收获颇丰。


导入NGUI后会在主菜单中新增NGUI功能选项,方便快速调用它的功能。首先点击主菜单的“NGUI→Create a New UI”创建一个UI根对象。由于地图这些都是2D的,所以保持默认的设置创建Simple 2D Camera即可。



点击“Create Your UI”完成,在工程面板中就出现了UI Root(2D),其下面的所有UI对象都会按照指定的布局渲染到屏幕上,重命名为MiniMapView。Anchor(锚点)是用来定位的,保持默认的Center(居中)。


点击NGUI的“Atlas Maker”来创建一个图片集,输入名字MiniMap,选中工程面板中的地图缩略图,然后点击Create就可以了。



选中Panel,然后再选择使用NGUI菜单的“Create a Widget”在面板下面创建一个精灵。



到这里准备工作全部做好了:



可以看到NGUI其实只是在一个主相机视野看不到的地方创建需要显示的GUI,然后用另外一个正交投影相机将观察到的内容叠加到主相机上但是做小地图的时候并不希望它直接渲染到屏幕上,而是渲染到一张纹理上,这样才可以使用材质配合遮罩的Shader实现不规则的效果。所以还是先得在工程面板中创建一个Render Texture,重命名为MiniMap,并拖放到Camera的Target Texture属性上。这样,所有该摄像机可见的物体都会渲染到MiniMap这张Render Texture中了。


注意还必须把摄像机的清除标志(Clear Flags)改成纯色(Solid Color),并把Background换成黑色。这样可以让地图超出的部分显示为纯黑色。


然后轮到Mask Shader出场咯。把度娘全身都搜了个遍,终于在茫茫人海中找到了它。在工程面板里创建一个Shader,重命名为TransparentMast,把以下代码复制进去:


[C#]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
Shader  "Transparent/Mask"
{
    Properties
    {
       _MainTex ( "Base (RGB)" , 2D) =  "white"  {}
       _Mask ( "Culling Mask" , 2D) =  "white"  {}
       _Cutoff ( "Alpha cutoff" , Range (0,1)) = 0
    }
    SubShader
    {
       Tags { "Queue" = "Transparent" }
       Lighting Off
       ZWrite Off
       Blend SrcAlpha OneMinusSrcAlpha
       AlphaTest GEqual [_Cutoff]
       Pass
       {
          SetTexture [_Mask] {combine texture}
          SetTexture [_MainTex] {combine texture, previous}
       }
    }
}


再在工程面板中创建一个材质,使用这个Shader,并把前面的Render Texture拖到Base(RGB)上,把遮罩纹理拖到Culling Mask上。这样,最难的问题就解决了。此时只要把这个材质附加到任何支持材质的对象上,都能显示小地图了^_^。比如随便创建一个平面,把材质附加到Mesh Renderer组件的Materials上:



啊,看起来离最终目标还是有点距离……不过已经可以看出圆形以外的纹理都变透明了。


接下来的工作就是慢慢把GUI部分搭建起来。


再创建一个UI Root,这次是用来真正显示GUI了。由于GUI是默认定位在左上角的,因此可以删掉原来的Anchor。再创建一个Panel,重命名为HudPanel。这个面板用来做整体缩放,因为界面上不一定只有小地图,还有之前做的头像、动作条之类的,如果需要批量缩放,那么只要调整这个面板的Scale就好了。


在HudPanel下面创建一个锚点Anchor – RightTop,把Side修改为TopRight,让它对齐到右上角。再在其下面创建一个Panel,叫做MiniMap,然后在下面分别创建地图边框(Sprite)、地图指北标志(Sprite)、人物指示标志(Sprite)、地图纹理(UITexture),调整XY轴坐标定位,调整Depth可以更改显示优先级,记得要把前面创建的MiniMap材质赋给地图纹理。我这里还多创建了一个Label,用来显示当前地图位置,但是会遇到一个字体的问题,这个待会再写。


好了,玩家指针已经定位在地图的(0,0)点位置,再写一个脚本附加到MiniMap上,让它能够实时地反映玩家的当前位置和朝向。


[C#]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
void  Update()
{
         const  float  miniMapScaleRatio = 800 / 2000f;
     MiniMapArrow.rotation = Quaternion.Euler(0, 0, -mPlayerTransform.rotation.eulerAngles.y);
         MiniMapPanel.localPosition =  new  Vector3()
                                         {
                                                 x = -mPlayerTransform.position.x * miniMapScaleRatio,
                                                 y = -mPlayerTransform.position.z * miniMapScaleRatio,
                                                 z = 0,
                                  };
}



看起来还不错:)


8.jpg (68.03 KB, 下载次数: 3)

下载附件  保存到相册

2013-6-30 12:47 上传


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352164.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

wow

写博客就有积分? 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一…

wow怎么修改服务器地址,wow如何修改登录服务器地址

wow如何修改登录服务器地址 内容精选 换一换 由裸金属服务器自动分配的网络是禁止修改的,在只有SSH登录的情况下修改,有可能会导致裸金属服务器无法连接。如果裸金属服务器存在自定义vlan网络网卡,您可以配置或修改该网卡的网络。 容器镜像服务是一种支持容器镜像全生命周期…

Depcheck 检查前端项目中未使用的依赖包

前言 随着前端项目的迭代,项目中一部分的依赖包可能没被项目所使用的,手动查找这些依赖包耗时又繁琐,有没有根据能够快速的帮助我们识别和清理项目中未使用的依赖包呢? Depcheck 简介 Depcheck 是一款用于分析项目中依赖关系的…

斩获阿里offer,这份258页面试宝典也太顶了....

测试三年有余,很多新学到的技术不能再项目中得到实践,同时薪资的涨幅很低,于是萌生了跳槽大厂的想法 但大厂不是那么容易进的,前面惨败字节,为此我辛苦准备了两个月,又从小公司开始面试了半个月有余&#…

深入理解API网关Kong:动态负载均衡配置

深入理解API网关Kong:动态负载均衡配置 背景 在 NGINX 中,负载均衡的配置主要在 upstream 指令中进行。upstream 指令用于定义一个服务器群组和负载均衡方法。客户端请求在这个服务器群组中进行分发。 NGINX 提供了以下几种负载均衡方法: …

图论与算法(4)图的深度优先遍历应用

1. 无向图的联通分量个数 1.1 联通分量个数 无向图的联通分量个数是指图中无法通过边连接到其他分量的顶点集合的个数。可以通过深度优先搜索或广度优先搜索来计算无向图的联通分量个数。 1.2 记录联通分量 (1)多个联通量的数: 7 6 0 1 0…

linux 应用程序 键盘,在Linux下安装Noted:适用于Linux的键盘驱动的笔记应用程序...

得益于Pop!_OS 20.04和Regolith Linux之类的发行版,键盘驱动的台式机环境逐渐风行一时。Noted是一个新的笔记应用程序,可在Linux和macOS上免费使用,该应用程序是受Notational Velocity(流行的macOS开源笔记记录应用程序)启发的,其…

xheditor可视化富文本编辑器

简洁易用的基于jQuery的富文本编辑器xheditor从CSDN上已经改版退出了,新版的Markdown编辑器将原版的编辑文章相关SEO的设置也设为自动获取了,总的感觉现在的编辑器没有原来那么方便了。本文来自http://xheditor.com/,纪念在CSDN上用过感觉最好…

Guitar Pro中文版免费激活注册机码V2021.20.7下载地址问题疑难解答

很多玩音乐的小伙伴都有一个共同的难题,目前很多编曲软件都是由国外引进来的,自然是以英文版为主,那作为国人的我们使用起来自然就不是那么容易,当然技术在更新,这个问题自然也是要有解决的方案的,今天小编…

好用的Mac窗口管理器:Rectangle for Mac

Rectangle Mac中文版是一个基于Spectacle应用程序的开源窗口管理器,用Swift编写,能够使用键盘快捷键移动窗口并调整其大小。Rectangle mac中文免费版适用于绝大数应用,并拥有维护良好的开源库,持续更新.欢迎大家下载体验Rectangle mac窗口管理器 Spectac…

Affinity Photo for Mac中文破解版永久激活方法

Affinity Photo for Mac中文破解版是一款可以和PS媲美的专业修图软件,专为Mac用户设计,affinity photo中文版采用最佳 PSD支持技术,支持您需要的所有图片处理调整和修改的功能,是一款非常不错的专业图像编辑软件。小编现为大家带来…

toad 连接mysql8.0_toad for mysql免费版

MySQL是一种关系型数据库, 想对其进行专业的管理就来下载toad for mysql免费版吧! 它是一款非常好用MySQL数据库管理工具, 它能够帮助我们更加有效的编写SQL语句. 拥有自动执行数据库对象、版本控制集成、宏记录和回放等超多功能, 需要就来下载toad for mysql免费版吧! toad fo…

iStat Menus 6 for Mac中文破解版激活方法无需激活码

iStat Menus 6 Mac 中文破解版是Mac OS平台上十分优秀的一款系统与硬件监控软件,通过istat menus for mac 我们可以实时掌握自己的Mac电脑情况,可以查看硬件温度、查看即时网速、显示CPU使用率等等,非常实用。小编现为大家带来istat menus ma…

3dsmax记录

title: 3dsmax记录 categories: 3dsmax tags: [max, ta, 记录] date: 2018-06-02 14:16:18 comments: false 3dsmax记录,我的通神之路 前篇 3D MAX 2016从入门到精通视频教程 - https://www.bilibili.com/video/av39501981/?p82Autodesk 3dsMax 2018中文汉化破解版…

Audition CC 2019 for Mac中文破解版永久激活方法附破解补丁

Adobe Audition CC 2019 for Mac中文破解版全新上线,这是Adobe公司出品的一款专业数字音频编辑软件,提供先进的音频混音、编辑和效果处理功能,专为音频和视频专业人员设计。新版audition cc 2019 增加降噪和减少混响效果,多轨剪辑…

[科普]为什么360会报键盘记录

转自:http://blog.xunleihd.com/360.html 本文只用了比较浅显的实验方法解释为什么破解版会被报风险,不深入讨论杀毒原理,我也并没有对360真实原理做过深入分析,感谢kpdd的指正。 做一个实验1、下载官方原版迅雷7.9.6.4502安装2、…

bartender 10.1破解版|bartender条码打印10.1

点击下载出处:BarTender10.1破解版 bartender10.1破解版是一款专业的条码打印软件,在行业内广受好评,通过使用bartender我们可以将标签设计这个复杂的过程变得更简便,在设计中快速调整,即刻打印,非常迅速&…

隐形的监控——无线键盘侦听

在用户使用计算机时,键盘是信息输入的主要媒介,键盘输入包含大量的私人机密信息,包括帐号密码等,所以键盘侦听被各种攻击者所大量采用,成为一种普遍但是破坏力强大的攻击方式。键盘侦听主要通过键盘记录器来实现&#…

httpwatch professional 破解版v9.4.17

httpwatch 是一款功能非常强大的网页数据分析工具,它拥有缓存管理、数据和目录管理、消息头发送/接受、字符查询.POST、Cookies管理等功能,并且他还不需要代理服务器或一些复杂的网络监控工具就能够非常轻松的显示网页请求和回应的日志信息,…

BCGControlBar库专业版,完整记录的MFC扩展类

BCGControlBar库专业版,完整记录的MFC扩展类 BCGControlBar Library Professional (BCGControlBar Pro MFC) 是一个 MFC 扩展库,包含 300 多个经过精心设计、测试和完整记录的 MFC 扩展类,例如功能区、工具栏、菜单、控件以及自定义和可视化,…