码迷,mamicode.com
首页 > 其他好文 > 详细

uGUI元素显示在角色的头顶上

时间:2015-05-26 10:49:47      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:canvas   3d   unity   ugui   

孙广东 2015.5.26

转载请注明出处:http://blog.csdn.net/u010019717

我们 游戏完全使用UGUI来工作,所以游戏中的很多元素都是UGUI的 Game Canvas画布设置为;World Space , 主要也是为了以后一下牛叉的效果

还有一个UI Canvas画布设置为;Screen Space - Overlay 就是这些元素会在最前方,在屏幕上的。

还有一组是:Spines Layer, 主要是放着spine制作的角色


2种解决方案:

第一种是 为角色创建子对象了类型是Canvas画布,Unity的官方事例是这么做的,可以自己去看看。这样在Hierarchy上是有上下级的层级关系的。

这种的话,Canvas的类型最简单是设置为:Screen Space - Overlay



第二种呢,其实也很简单,就是我得到角色的位置position, 然后转换为屏幕坐标系,然后在转换为UGUI所在画布和相机的坐标系即可,得到了这个就赋值给UI即可了。但是这样在Hierarchy上是没有上下级的层级关系的。一个属于Game Canvas画布,一个在Spines Layer中,但是角色会有UI的引用。

     Vector3 first = ExploreBattleManager.Instance.MainCamera.GetComponent<Camera>().WorldToScreenPoint(transform.position); //把角色在主摄像机的世界坐标转化为屏幕坐标[注:first的结果的z值是原来世界坐标的z]
     first = new Vector3(first.x, first.y, 100);	// 设置这个z的意思是想让角色的位置映射到UICamera的多远距离的平面上。 这里我们希望映射到Game Canvas画布相对于相机的距离,怎么看?如果是Screen Space - Camera的话就是如下图的Plane Distance值了。  如果是World Space :值就是两个z值的差了:
     skillList.transform.position = ExploreBattleManager.Instance.UICamera.GetComponent<Camera>().ScreenToWorldPoint(first);


技术分享              技术分享技术分享



??
??

uGUI元素显示在角色的头顶上

标签:canvas   3d   unity   ugui   

原文地址:http://blog.csdn.net/u010019717/article/details/46003339

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!