unity3d 角色头顶信息3D&2D遮挡解决方案(一)
先上效果图,只凭文字描述,脑补应该有些困难- -
如图:有三个角色(我们暂且从左到右叫它们A、B、C),一个2D UI(中间动作选择的框框),一个cube(右边的方块)
cube挡住了角色C的头顶信息
2D UI挡住了角色和cube
共同点是只显示未被遮挡的部分,遮挡的部分不显示
相信大多数人在看我这篇文章之前已经看过雨松momo的《人物头顶名称与血条更新与绘制》
没看过的可以去看看:http://www.xuanyusong.com/archives/1032
如果直接使用雨松momo文章中的代码的话,那么你会发现有一些问题,如图
这里我没有用血条,只绘制了文字,都一样的!
第一:因为是用OnGUI绘制的,所以使用的过程之中角色昵称和血条会挡住NGUI创建的UI。你可以脑补一下当你打开背包时,一排文字和血条挡住了你的背包。。。
第二:当角色被其他物体遮挡时,这里我说的是3D物体,不是UI。怎么说比较好理解呢!!就好比角色走到了墙后面,角色已经被墙遮挡住了,但是角色昵称和血条依旧显示(或许有一些人就要这种效果!好吧,至少在我的项目中这种效果给我的感觉是非常差的)
第三:当同一个场景出现两个角色时,两个角色都有自己的昵称和血条,如果你和另个角色距离太远且旋转了角度时,名称和血条居然奇迹的出现在了天上!没错,就是天上
......以上所述只是指出一些bug,并没有多余的意思,大家勿喷,我也是菜鸟,只是和大家分享下经验!!
雨松momo的写这篇文章的目的也就是给大家一个思路,具体在项目中怎么实现成预想效果得靠自己了
这个思路挺好,但是由于一些我自身项目的原因就暂且不用这个思路,这个思路大家可以去看看,以后肯定能用到
现在用另外一种思路实现,这里我们要学到一个东西:Layer(层)
关于layer的介绍请看圣典:http://game.ceeger.com/Components/Layers.html
其实我自己也没有看过,为了写这篇文章才去搜的,自己没事的时候瞎点点就知道是干嘛的了
因为我们要用到NGUI,所以先导入NGUI插件包
进入正题:
1、创建一个空GameObject,改名为NamePanel,设为角色子物体,然后Reset并且调整位置到角色头顶位置
2、将NamePanel的Layer设置和角色同一个层,并且添加一个UIPanel
3、在NamePanel下添加UILabel,方法为:选中NamePanel->NGUI->Create->Label,并且将Label Overflow属性设置为ResizeFreely(自动适应文字大小以及长度的)
4、设置UILabel组件的属性。字体、显示文字、字体颜色。Effect选择OutLine,颜色选择为黑色,这个参数是描边的,让字体更清晰
咦,搞毛啊,字体怎么这么大啊?把字体修改小一点,10、5、1,尼玛怎么还是这么大,而且还看不清了
别急别急,不是你操作错误,是还没操作完!
我一开始遇到这个问题的时候我也纳闷了,后来想了想,有可能是没有添加UIRoot的原因
用过NGUI的都知道,UIRoot是NGUI必不可少的一部分,在手机上自适应分辨率就靠它了
那既然知道原因了,我们就添加一个UIRoot试试呗
5、选择NamePanel,添加一个UIRoot组件,Scaling Style选择FixedSizeOnMobiles
哈哈,字体恢复正常了!如果感觉字体比较小,可以在把字体调大一些
运行游戏,你会发现角色移动的时候,头顶信息虽然跟随角色了,但是角色旋转或相机旋转的时候,头顶信息旋转面向摄像机。如果你就想这样,那是大大滴不行的,不能图方便就少了代码
现在我们来写代码,代码很简单
public GameObject targets;
private Camera camera; void Start()
{
//获得主摄像机
camera = Camera.main;
} void Update()
{
//设置旋转角度
targets.transform.rotation = camera.transform.rotation;
}
保存代码,将脚本挂到角色上,然后把NamePanel拖到参数targets
最后运行游戏,在看看效果,ok,完美
最后总结一下:
代码上是非常简单的,看我代码就知道了,可以说就只有一句代码。。。
主要就是设置层,层一定要分清楚,很重要!
本文地址:http://www.cnblogs.com/shenggege/p/4179012.html
unity3d 角色头顶信息3D&2D遮挡解决方案(一)的更多相关文章
- unity3d 角色头顶信息3D&2D遮挡解决方案(二)
在阅读本文之前请先阅读上一篇文章:http://www.cnblogs.com/shenggege/p/4179012.html 本来一篇文章就可以说完了,但是上次只是实现了已知的一些功能 后来在实际 ...
- Unity3D人物头顶名称与血条更新与绘制
using UnityEngine; using System.Collections; public class NPC : MonoBehaviour { //主摄像机对象 private Cam ...
- 【转载】3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解
原文:3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解 3D中z值会影响屏幕坐标系到世界坐标系之间的转换,2D中Z值不会产生影响(而只 ...
- 智慧机房3D可视化技术解决方案
随着夏季气温越来越高,机房内大量设备同步工作时,难免使机房内温度飙升. 机房温度每升高10℃,计算机的可靠性就下降25% 磁盘磁带也会因热涨效应造成记录错误 计算机的时钟主频在温度过高都会降低 UPS ...
- Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
本文为霍格沃兹测试学院学员学习笔记. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...
- unity3d 摄像机跟随角色时被物体遮挡解决方案
参考文章:http://www.xuanyusong.com/archives/1991 在看此文章时请先看上面的参考文章 看完以上文章后,你也许会想人家都已经给出所有代码了,你还写个毛啊 别急,现在 ...
- Unity3D使用溶解技术解决障碍物遮挡
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- Unity3D 角色(物体) 移动方法 合集
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...
- Unity3D ——强大的跨平台3D游戏开发工具(五)
第九章 图形用户界面类G.U.I 您在玩很多3D游戏的时候,不知是否注意到在游戏界面中,总有一些图形和文字信息是不随着3D视角的改变而改变的.这也是由于游戏本身的要求而决定的.比如说英雄的生命值,聊天 ...
随机推荐
- window.jQuery || document.write("<script src='__PUBLIC__/assets/js/jquery.js'>"+"<"+"/script>")
今天无意中看到这样一段代码 <script type="text/javascript"> window.jQuery || document.write(" ...
- ServletRequest的四个主要方法
package com.yunqing.servlet; import javax.servlet.*; import java.io.IOException; import java.util.Ar ...
- Extjs header column 自定义排序规则
Extjs 的表格自带排序功能,这个功能在大部分情况下能够满足我们的需求,但是在某种情况下,例如IP排序,默认情况下,按照字符串进行排序, 此时我们需要自定义排序规则,这个时候就需要我们重写方法了, ...
- JQuery手写一个简单的轮播图
做出来的样式: 没有切图,就随便找了一些图片来实现效果,那几个小星星萌不萌. 这个轮播图最主要的部分是animate(),可以先熟悉下这个方法. 代码我放到了github上,链接:https://gi ...
- Knowledge Point 20180303 对比编译器、解释器与Javac编译原理
编译器与Javac编译原理 在前文我们知道了Java是一种编译语言和解释语言,它的源代码经过编译器Javac编译为能够被JVM识别的二进制语言,然后JVM将其解释为能够被平台识别的机器语言.那么什么是 ...
- Oracle 体系结构三 后台进程
实例后台进程在启动实例时启动,在终止实例时终止运行. SMON SMON(system monitor)起初的任务是安装和打开数据.SMON通过查找和验证数据库控制文件来安装数据库.此后,它通过查找和 ...
- oracle cascade用法
原文地址:https://www.cnblogs.com/moyijian/p/9940323.html#4111551 级联删除,比如你删除某个表的时候后面加这个关键字,会在删除这个表的同时删除和该 ...
- Error Note1:错误修复笔记
1.遍历同时修改数组内容导致崩溃 bugly上bug提醒如下图所示,经检查发现,可能是页面上数据加载惹得祸. 页面加载过程是这样的,首先进入页面,初始化页面,将本地数据加载到array中刷新table ...
- STL笔记
STL的基本概念: 1-容器:是可容纳各种类型的数据结构,是 类模板. 2-迭代器:是用于依次存放容器中的元素,类似指针. 3-算法: 是用于操作容器中元素的 函数模板. sort() 用来对 vec ...
- 关于Hibernate的部分知识总结
[部分内容参考地址:https://www.cnblogs.com/woniu2219/p/7111857.html] Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对J ...