位置: 编程技术 - 正文

Unity3D使用NGUI制作小地图(unity3d制作ui)

编辑:rootadmin

推荐整理分享Unity3D使用NGUI制作小地图(unity3d制作ui),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity中ngui,unity3d制作ui,unity3d怎么用,unity3d怎么用,unity3d制作,unity3d制作,unity3d制作ui,unity3d制作ui,内容如对您有帮助,希望把文章链接给更多的朋友!

本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。

Texture,要说什么是Render Texture,看这里好了:渲染纹理。由果推因,我们就知道都该做些什么了,一个一个攻克吧,现在我们由因及果。

1、绘制渲染纹理(Render Texture)

a、先在MainCamera下创建一个UI,选择NGUI->Open the UI Wizard,保持设置,点Create Your UI,然后Anchor下的Panel改名为MiniMapRenderPanel。

b、创建一个Atlas,不知道什么是Atlas的可以看我前面的文章,选NGUI->Open the Atlas Maker,新弹出的界面上修改你的atlas名称,点击那个完整的地图,就是我上面的那个map,然后点Create。

c、在MiniMapRenderPanel下建一个sprite,NGUI->Open the Widget Wizard,Atlas选刚建的那个Atlas,Template选sprite,Sprite选map,其他默认。最后建完了是这个结构。

d、在资源里新建个Render Texture,Assets->Create->Render Texture,起名MiniMapRenderTexture。

e、设置camera,那个NGUI的camera设置如下:

Clear Flags设为Solid Color,Background设为黑色,这样当你走到地图的边缘时,没有地图的地方会绘制成黑色。Projection设为平行投影Orthographic,不了解平行投影和透视投影的话需要补一下3d基础了。Target Texture那里把之前做的那个Render Texture拖上去。这样摄像机投影的地方就会绘制在这个Render Texture上,也就是地图会绘制在它上面了,然后我们就可以做material了。

f、有一点差点忘了,Anchor那里的Side一定要选择TopLeft,地图的原点是从左下角开始的。

2、制作材质(material)

Unity3D使用NGUI制作小地图(unity3d制作ui)

这是本篇的难点,要用到shader语言,如果没有3d基础的可能理解起来有点费劲,不懂也没关系,按着操作也能做出来。

a、创建一个Shader,Assets->Create->Shader。

b、打开shader,把下面的代码覆盖过去。

[csharp] view plaincopyShader "Transparent/Mask" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Mask ("Culling Mask", 2D) = "white" {} _Cutoff ("Alpha cutoff", Range (0,1)) = 0.1 } SubShader { Tags {"Queue"="Transparent"} Lighting Off ZWrite Off Blend Off AlphaTest GEqual [_Cutoff] Pass { SetTexture [_Mask] {combine texture} SetTexture [_MainTex] {combine texture, previous} } } } 你百度遮罩shader的话会有很多,但基本没有解释的,我这里解释一下,第一行是设置你的shader的路径和名称,比如上面的shader就建在了Transparent下,起名Mask,大括号里面有两个部分,第一个部分是属性Properties,第二部分是SubShader。

Properties里是设置渲染的属性,比如这里设置了两张图片和一个滑动条,第一张图片用来加载背景图片,就是我们之前做的那个Render Texture,用来显示地图,第二张图片就是遮罩图片,用我们之前的那个白圆,滑动条范围从0到1,初始&#;0.1,再看一下语法。

[csharp] view plaincopy_MainTex ("Base (RGB)", 2D) = "white" {} _MainTex是属性名,会在SubShader中用到,Base (RGB)是在界面上显示的名称,你会在属性面板上看到,2D是图片维数,white是默认&#;。SubShader是处理渲染的主体,Tags是标签,Queue标签决定被渲染的次序,而Transparent是四个预定义的渲染队列之一,任何有关alpha混合的对象都应该在这里处理,看这里可以了解的更多:SubShader Tags,关闭光照,关闭z缓冲器的写操作,关闭混合,Alpha测试是当Alpha大于等于你之前设定的_Cutoff时有效,也就是说这里当alpha大于等于0.1的图素会被渲染出来,其他的就透明了。Pass通道里处理混合,先设置第一张图片:SetTexture [_Mask] {combine texture},这里是遮罩图片,然后第二张图片和前一张混合:SetTexture [_MainTex] {combine texture, previous},而我们之前关闭了混合,所以第二张图片只是纯粹的显示,但大括号里第二个参数表示alpha,这里previous表示我们用之前那张图片的alpha,而第一张图片的alpha除了白圆部分,其余部分都是0,所以这张图片除了与白圆 重合的地方,其他地方alpha也是0,这样就透明了,只剩下了圆的地方,想了解Pass看这里:着色器语法:Pass,想了解SetTexture看这里:着色器语法:Texturing。

写了这么多,纯粹手打,觉得好的麻烦支持一下,哈哈。Shader有一定难度,但据说会shader的程序员薪水都在2万以上啊,望&#;欲穿啊,所以大家努力学吧。

如果上面的没看懂,你又不想学,那就跳过吧,反正把代码粘过去就可以了。

c、创建一个material,Assets->Create->Material,然后Shader那里找到你建的那个shader,在Transparent下面。

d、这时界面上会出现Base(RGB)和Culling Mask,Base(RGB)里把你之前那个Render Texture拖上去,Culling Mask把那个白圆的图片拖上去,如下图:

这样你的材质就做完了。坚持到这步的为自己鼓个掌吧,你离成功不远了。

3、在界面的右上角用NGUI建地图

终于到了最后一步了,剩下的工作就简单多了,回到你的界面布局那里,有关NGUI界面布局不了解的看我前面的文章,在右上角的Anchor下建个Panel,起名MiniMapPanel,然后下面加两个sprite和一个Texture,一个sprite是圆框,一个sprite是小箭头,表示地图上的玩家,Texture用来接收之前的材质显示地图,如下图:

Texture那里大小调成*的,Material那里把之前做的材质拖上去就ok了,如果显示顺序有问题别忘了调Depth或Z&#;。

现在你应该可以看到东西了,但小箭头位置不对,当然,还没上代码呢。

创建一个MiniMap的脚本,我把全部代码贴上来。

[csharp] view plaincopypublic class MiniMap : MonoBehaviour { // Use this for initialization public GameObject point; public GameObject map; private GameObject hero; private float miniMapScaleRatio; void Start () { map.transform.localScale = new Vector3(Screen.height, Screen.height, 1); hero = GameObject.Find("/Blade_Girl_Prefab"); GameObject terrain = GameObject.Find("Terrain"); Terrain script = terrain.GetComponent<Terrain>(); miniMapScaleRatio = (float)map.transform.localScale.x / script.terrainData.size.x; } // Update is called once per frame void Update () { if (hero && point && map) { point.transform.rotation = Quaternion.Euler(0, 0, -hero.transform.rotation.eulerAngles.y); map.transform.localPosition = new Vector3() { x = -hero.transform.position.x * miniMapScaleRatio, y = -hero.transform.position.z * miniMapScaleRatio, z = 0, }; } } } 代码不多吧,point是玩家标志小箭头,map是地图面板,就是1里面那个MiniMapRenderPanel,public属性的,自己拖上去吧。hero是我们的主角,miniMapScaleRatio是地图和真实地形尺寸比例,start里的第一句是在干吗呢,虽然我们的地图是*的,但经过实测,发现这个尺寸会随着屏幕的高度而有误差,需要设置成屏幕的高度这种尺寸,好吧,我也需要有人帮我解释下,Update里时刻获得主角的转向,主角在世界中是绕y轴旋转的,小标志是绕z轴旋转的,并且方向相反,这里要注意一下。然后按照角色在地形上的位置乘以地图与地形的比例获得小标志在地图上的位置,噢啦,大功告成,打完收工。

Unity C#单例模式 转载自:

Unity3D使用NGUI制作小地图 转载自:

[Unity3d插件KGFMapSystem]非常不错的小地图的制作 转载自:

标签: unity3d制作ui

本文链接地址:https://www.jiuchutong.com/biancheng/377220.html 转载请保留说明!

上一篇:Chrome从V39版本开始不默认支持unity3d webplayer插件(chrome version)

下一篇:Unity C#单例模式(在unity中单例的主要作用)

  • 取得的高速公路发票可以抵扣吗
  • 购买性支出和转移性支出财政职能发挥方面有何不同
  • 固定资产一次性扣除申报表怎么填
  • 小企业费用包括哪些
  • 申报扣除的广告费支出须符合哪些条件
  • 企业股权转让是否交企业所得税
  • 不动产在建工程使用的外购物资可以抵扣吗
  • 出口退税申报系统汇率修改
  • 车辆购置税如何计算
  • 免抵退办法出口销售额和免税销售额的区别
  • 个体工商户多久不用自动注销
  • 票据权利的概念与性质
  • 十万位发票怎么开
  • 企业所得税减半征收计算公式
  • 购买固定资产的进口关税
  • 增值税普票税额
  • 销售,购买
  • 从租计征的房产税减半政策
  • 取得赔偿款的发票可以抵扣吗
  • 停车费属于不动产租赁服务税率
  • 收到一笔款在在当月已退回怎么做账?
  • 派遣公司乱扣钱没人管吗?
  • 未收到房租是否缴纳增值税
  • 苹果电脑初始化设置
  • 受托加工物资的账务处理例题
  • 事业单位工作人员暂行处分办法
  • 企业接受捐赠的固定资产账务处理
  • 打开浏览器时间长
  • 赠品不开发票合理么
  • Win10 Build21376内测版发布 重新设计默认用户界面字体
  • 企业公益性捐赠扣除比例
  • win10默认网关不可用总掉线解决方法
  • 收到的担保费如何记账
  • 股东以固定资产入股需要交税吗
  • 未分配利润转增股本要交税吗怎么交
  • 固定资产处置的三种方式
  • 社保新参统委托代发银行
  • 税务局规定多久开发票
  • 缴纳税款滞纳金怎么算
  • 进口商品会计分录怎么写
  • 专项附加可以叠加吗
  • 对公账户的钱都可以取吗
  • 周转材料主要包括什么和什么
  • 工程施工企业收入1750万,利润怎么算
  • 关税完税价格如何计算消费税
  • 委托代销安排的迹象有哪些
  • 企业开负数发票退货后如何处理?
  • 税控盘减免税款分录
  • 个体户记账报税
  • 往来账目
  • 给公司股东分红的账务处理
  • 什么叫摊销
  • 资产评估资产如何入帐
  • 建筑材料检测费入账科目
  • 一次性开票分期确认收入已什么做原始凭证
  • 预付账款怎么做账务处理
  • 房地产企业以土地入股如何交纳企业所得税
  • 私营企业固定资产法律制度
  • centos6.8安装不上
  • linux操作系统安装方法有哪几种
  • WIN10系统崩溃如何自救?
  • xp系统纯净版gho
  • 场景转换的技巧
  • 64位Win7环境下vs2013配置opengl
  • 控制程序的先后顺序是怎样的
  • js调用图片代码
  • javascript高级程序设计电子书
  • c# /n
  • 原生js页面滚动怎么设置
  • flask框架下使用scrapy框架
  • 贵州省税务网上缴费平台
  • 党日活动与专业建设结合
  • 金银首饰以旧换新业务按销售方实际
  • 安徽省国家税务局网
  • 江苏省无锡市国4车辆报废新规定
  • 下设机构和内设的区别
  • 税控盘清卡的步骤
  • 福建原盐和自然盐有什么区别
  • 小规模纳税人需要进项票吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设