新手问题,关于4.6x版自带的新UI系统与OnGUI内的DrawTexture的
unity3d吧
全部回复
仅看楼主
level 6
corpus 楼主
这两天学习UI一直用的4.6版的内置UI功能。后来想实现一下场景内角色头顶的血条,在网上搜了看到有人在OnGUI函数内用GUI.DrawTexture()的方式来绘制血条,遂照做之。但是发现OnGUI里面画的东西总是盖在其他UI元素的上面,就像下面截图里这样。
截图里面红血条盖在按钮上面了。
请问各位高手这个怎么解决,或者说如果这种做法不行的话,一般大家都是怎么做这种3D场景内UI的?谢谢了先。
2015年05月11日 03点05分 1
level 11
标准游戏,是请美工在模型里绑定血条对象,这样才能3D显示,并且有远近、遮罩的效果。
2015年05月11日 03点05分 3
谢谢回复! 绑定血条是什么意思,是说血条的模型也是美术做的么? 如果是美术的模型那我是不是还要自己配上shader,比如说要把depth test关掉,这样才能让血条不被场景里东西挡住。
2015年05月11日 03点05分
@corpus 让美工在模型里一起做好血条,作为人物的一个子物体。你在脚本程序里对它进行操作。
2015年05月11日 04点05分
level 1
2015年05月11日 04点05分 4
谢谢回覆,学习了
2015年05月11日 04点05分
看了这个教程,但是他也是在ongui里面drawtexture出来的,和我那个没有区别,一样会盖住其他UI的。
2015年05月11日 04点05分
@corpus http://www.xuanyusong.com/archives/3293 UI深度问题吧,哪个先渲染把UI放到血条上面?我也新手
2015年05月11日 05点05分
回复 流雨分飞 :我现在还是不太明白这个4.6版的UI与原来在OnGUI里面的是不是完全没关系的两个模块。文档里提到的新UI是在OngUI之前更新并渲染的,而一般屏幕空间的UI都是不写不测深度的,纯粹靠draw的先后顺序表现前后。
2015年05月11日 06点05分
level 6
corpus 楼主
问题算是解决了,就是通过一个专门的shader绘制血条,这样血条的绘制时机就和其他物体一样,通过sprite renderer就能设置渲染顺序了。同时还可以保证是在4.6x 的UI系统之前绘制完成。
2015年05月12日 03点05分 6
你好,能说的再清楚一点吗?我也遇到了相同的问题,怎么解决啊?
2016年07月20日 11点07分
@风中过客0725 后来我自己写了个专门渲染血条的shader,做成材质赋予血条的模型上。这样就和场景里其他正常物体一样的绘制了。shader里面或者材质里都可以设置渲染排序序号,就可以自由控制到底啥时候画。
2016年07月20日 15点07分
GUI.Button或者其他控件哪里有设置shader的地方哦?在哪里设置shader?shader怎么写?我对shader一窍不通,没写过。能给个您的QQ号吗?我细细的请教您一下。
2016年07月21日 00点07分
@风中过客0725 不是用的GUI.Button那个老式的,我是用UnityEngine.UI里面的组件。而且这个血条最后我就没使用任何unity自带的UI组件,是自己做的模型配上脚本和自己写的shader的材质来实现的。
2016年07月21日 03点07分
level 12
ugui可以啊,但要把canvas的render mode改成第二或第三个,这样UI就能在场景中像其它物体一样显示了
2015年05月12日 06点05分 7
哦,是说把canvas改成screen space-camera或者world space,然后用slider来实现血条么?这个还真没试过,回头也要试试,谢谢指点[哈哈]
2015年05月12日 13点05分
回复 corpus :是的
2015年05月12日 13点05分
level 11
调整ui级数,把按钮的优先级放在贴图前面
2016年07月21日 04点07分 8
层主正解,这个方法后来我也用在漂浮伤害提示文字上了。
2016年07月21日 04点07分
不过我也没找到在哪控制screen space单个UI元素的排序,最后是把不同顺序的分开放在不同的canvas里面,然后给canvas指派层次序号的。
2016年07月21日 04点07分
level 13
直接用ugui作血条不就可以了吗?.
位置用 空间转屏幕就行了。。。。
2016年07月21日 04点07分 9
个人习惯,不喜欢创建太多组件。
2016年07月21日 04点07分
1