孙广东 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);
原文地址:http://blog.csdn.net/u010019717/article/details/46003339