unity3d 角色头顶信息3D&2D遮挡解决方案(二)
在阅读本文之前请先阅读上一篇文章:http://www.cnblogs.com/shenggege/p/4179012.html
本来一篇文章就可以说完了,但是上次只是实现了已知的一些功能
后来在实际运用中遇到了一个问题,请看图

3D场景嘛!近大远小!
当我把视角移动得很远时,头顶信息就变得很小了,小得我看不见它显示的是什么
而且如果有多个玩家的话,每个玩家都有头顶信息
当我离另外一个玩家很远时,那个玩家的头顶信息就看不见了
那么要头顶信息有何意义?
本文就解决这个问题,其实很简单的
下面是解决后的截图:


聪明的小伙伴们是不是一眼就看出来什么思路了呢?
不管你看懂没看懂,请耐心的把本文看完!待我一一道来
首先,我们把要显示的头顶信息所有字体放大10倍
怕你们理解错误我举例说明:
ExpHUDText——FontSize:我原来是20,现在改为200
NameLabel——FontSize:同上
这里也许有小伙伴要发问了:那要是有图片怎么办?
嗯,的确,有些项目中需要制作血条,光字体放大了血条还是看不清楚不等于白说吗
我项目中不需要血条,我们这里就略过吧....
哈哈,跟大家开个玩笑!
这个问题我们在最后说,先继续往下看
我项目中用的是一个VIP logo,当玩家花钱充了VIP,这个logo就会显示出来
如图,左边的紫色钻石便是logo图片

因为角色名称有长有短,如果我的logo在固定的位置,那么就会出现logo被角色昵称遮挡
所以我们可以使用锚点来解决这个问题
值得注意的是,我的logo想一直显示在昵称最左边,那么我锚点的目标参照物就要设置成nameLabel
这样的话就可以一直保持在最左边了。
当然,具体看你项目需求,灵活运用
说到这里,如果你每一步都按照我说的做了,那么你会发现字体在场景中非常非常的大
这个时候,我们把playerName Scale的x、y、z都设置为0.1
为什么是0.1呢?因为上文中我们已经把字体放大了10倍
所以为了得到原本看见的字体尺寸,我们要修改playerName的大小。即:1 / 10 = 0.1
怕有些小伙伴看懵了,没事,我上截图来说明一下

如上图,playername只是一个空物体,它是头顶信息的容器
好了,这个时候,我们已经发现头顶信息恢复到原状了,而且还比以前清晰多了
我们手动放大playername,发现值越大,字体也就越大,值越小,字体也就越小
思路来了,我们能不能通过计算角色和摄像机的距离来动态修改这个值呢?
从而实现不管我们摄像机距离角色多远,字体都保持原有所看见的大小
为了证实这个想法,我们动手写代码试试
代码很简单,我就不一一解释了,不懂查手册
private Camera camera;//主摄像机
private GameObject player;//角色 void Start()
{
camera = Camera.main;
player = GameObject.Find("player");
} void FixedUpdate()
{
//计算角色和主相机的距离
Debug.Log(Vector3.Distance(player.transform.localPosition, camera.transform.localPosition));
}
将脚本挂在player身上,然后运行
在我的项目中,角色和摄像机最近距离为1.5,最远距离为3(这个值只是在我的项目中)
那也就是说,当角色和摄像机距离为1.5时,playername Scale为0.1
那么当摄像机距离为3时呢?即:0.1 / 1.5 * 3 = 当前 playername Scale
ok,写代码试试
//挂上脚本后把playerName拖放到个变量上
public GameObject playerName; private Camera camera;//主摄像机
private GameObject player;//角色 void Start()
{
camera = Camera.main;
player = GameObject.Find("player");
} void FixedUpdate()
{
//计算角色和主相机的距离
float Distance = Vector3.Distance(player.transform.localPosition, camera.transform.localPosition); //0.1f / 1.5f 约等于 0.07f
float temScale = Distance * 0.07f; //置新的 playerName 大小
playerName.transform.localScale = new Vector3(temScale, temScale, temScale);
}
挂上脚本以后运行试试,怎么样,是不是成功了?
不管你怎么移动摄像机,字体永远是这么大
看到这里,上文中说的图片logo知道咋解决了吧
设置好锚点和放大倍数就行了,像字体放大一样操作,其他不用管
然后运行的时候父物体放大,子物体也跟着放大了!
现在又有了一个新的问题,我使用HUDText插件显示 +经验值
因为放大了十倍的原因,HUDText移动速度很慢,而且距离也很小
如果不理解我说的这句话可以自己动手去试试,无法用截图来说明
解决方法很简单
调整HUDText的Offset Curve曲线就可以了
这是我自己的项目我就不打包共享了,也没有太多时间从新新建一个项目
因为我要抓紧学习,过完年带着这个demo去上海找工作,找不到工作可就惨了
好了,就先说到这吧,不懂的多看几遍,也可以给我留言
本文链接:http://www.cnblogs.com/shenggege/p/4192797.html
unity3d 角色头顶信息3D&2D遮挡解决方案(二)的更多相关文章
- unity3d 角色头顶信息3D&2D遮挡解决方案(一)
先上效果图,只凭文字描述,脑补应该有些困难- - 如图:有三个角色(我们暂且从左到右叫它们A.B.C),一个2D UI(中间动作选择的框框),一个cube(右边的方块) cube挡住了角色C的头顶信息 ...
- 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 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...
- Mycat高可用解决方案二(主从复制)
Mycat高可用解决方案二(主从复制) 系统部署规划 名称 IP 主机名称 用户名/密码 配置 mysql主节点 192.168.199.110 mysql-01 root/hadoop 2核/2G ...
- 基于HTML5技术的电力3D监控应用(二)
上篇介绍了我们电力项目的基本情况,我们选用HTML5技术还是顶着很大压力,毕竟HTML5技术性能行不行,浏览器兼容性会不会有问题,这些在项目选型阶段还是充满疑惑,项目做到现在终于快收尾了我们才敢松口气 ...
- 20145215&20145307《信息安全系统设计基础》实验二 固件设计
20145215&20145307<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux ...
- 20145218&20145240 《信息安全系统设计基础》实验二 固件设计
20145218&20145240 <信息安全系统设计基础>实验二 固件设计 实验报告链接:http://www.cnblogs.com/20145240lsj/p/6035512 ...
随机推荐
- 「Newcoder练习赛40D」小A与最大子段和
题目 挺好的一道题 我们考虑把\(i\)作为选取的最大子段的结束位置,我们如何往前计算贡献呢 考虑一下这个乘上其在队列中的位置可以表示为这个数被算了多少次,而我们往前扩展一位当前已经被扩展的就会被计算 ...
- Mark一下在模仿团购App搭建页面时犯的低级错误
1.关于Xib拖线错误 2.下面这个错误的根源其实是代码提示时直接敲下了回车,没看仔细,导致后来找了好久才发现该错误,郁闷啊!
- EF Core中Key属性相同的实体只能被跟踪(track)一次
在EF Core的DbContext中,我们可以通过DbContext或DbSet的Attach方法,来让DbContext上下文来跟踪(track)一个实体对象,假设现在我们有User实体对象,其U ...
- ZooKeeper系列(3)--基于ZooKeeper实现主从协作
基于ZooKeeper实现主从协作 主-从模式的模型中,主要包括三个角色: 主节点:主要负责监视新的节点和任务,分配任务给可用的从节点; 从节点:通过注册自己,确保主节点看到它们可以执行任务,收到主节 ...
- Web—03-神器Photoshop
常用图片格式 1.psd photoshop的专用格式. 优点:完整保存图像的信息,包括未压缩的图像数据.图层.透明等信息,方便图像的编辑. 缺点:应用范围窄,图片容量相对比较大. 2.jpg 网页制 ...
- Jquery中on绑定事件 点击一次 执行多次 的解决办法
举个例子,在同一个页面有下拉选择框 <select class="mySelect"> <option value="user">按用户 ...
- 前端ajax的各种与后端交互的姿势
前端中常常用的与后端交换数据的话,通常是要用到ajax这种方法的 但是交互的方式有很多种,很多取决于你后端的属性,我这儿主要列举我目前项目比较常用的两种方式 --一个是我们通用的web api和控制器 ...
- JS中的原型规则与原型链
1. 原型规则 A. 所有的引用类型(数组.对象.函数),都具有对象特性,即可自由扩展属性: var arr = []; arr.a = 1;B. 所有的引用类型(数组.对象.函数),都有一个_pro ...
- E. K Balanced Teams
类比背包问题,为每个学生附加一个权重$pos[i]$,意思是选择该学生后,之后可以选择$p[i]~p[i]+5$的学生. 转换公式: $$d[i][j]=max(d[i+1][q],d[i+pos][ ...
- BZOJ3675: [Apio2014]序列分割(斜率优化)
Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 4186 Solved: 1629[Submit][Status][Discuss] Descript ...