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

来源:互联网 发布:板球座子cad图纸数据 编辑:程序博客网 时间:2024/04/27 09:23

孙广东 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);


              


3、还有就是 如果 UI Canvas 设置为 Screen Space - ovelad , 那就简单了,就是转换为屏幕坐标系啊。

            Vector3 first =
                CameraManager.Instance.mainCamera.GetComponent<Camera>().WorldToScreenPoint(character.transform.position);

            skillList.transform.position = first;





1 0
原创粉丝点击