OnGUI的视觉化编辑

Unity 的 GUI 主要分成两种制作方式,一种是以 Component 方式直接附给场景物件使用,像是 GUITexture 及 GUIText,它们的建立及调整相当方便,不用在执行期就能看得到,而且因为继承自 Component,所以也可以直接使用transform、gameObject 等变数内容,几乎是可像 3D 场景中的物件使用相同的操作方式,可惜运用范围不广,也难以制作表单栏位等介面;另一种则是在 OnGUI 中撰写的 GUI、GUILayout 等,这些可以配合 GUISkin、GUIStyle 灵活运用制作各种表现方式的使用者介面,可惜的是它必须一行一行的撰写程式码,而且只有在游戏执行期才会呈现出来,变成制作时只能倚重程式设计人员撰写,调整时必须执行游戏把调整结果的位置及宽高等资讯记录下来,再另行修改;这在游戏制作上相当的不方便,所以我们必须将它改善为不用那麽倚重程式设计人员一行一行撰写 GUI 程式码,以及不需要在执行期就能可视化编辑调整,那么将可以省略掉许多多余的工作,也使制作团队合作上更为便利。


在 OnGUI 中的程式撰写上,可以很清楚的发现,我们不断的在调用重复的功能,而且 GUI 的大小位置则是在 GUI 程式码中利用 Rect 设置,所以我们以 Component 的观念撰写只有 OnGUI 的 script,可能会调整到的值都以 public 修饰词使它们在 Inspector 视窗上可以调整,那么使用起来就和 GUITexture 有点像了。所不同的是 GUITexture 的位置、大小会受 transform 的影响,而我们制作的 GUI 则不会;以下是把 GUI.Box 独立出来的简单 script。


  1. public class MyGUIBox : MonoBehaviour {

  2.   //按钮文字

  3.   public string text;

  4.   //大小位置

  5.   public Rect position;

  6.   //深度

  7.   public int depth;

  8.   //颜色及透明度

  9.   public Color color = Color.white;

  10.   //是否启用

  11.   public bool isEnabled = true;

  12.   //样式设置

  13.   public GUIStyle style;

  14.   void OnGUI(){

  15.   GUI.color = color;

  16.   GUI.depth = depth;

  17.   GUI.enabled = isEnabled;

  18.   GUI.Box(position , text , style);

  19.   }

  20.   }
复制代码


这样子就可以随时把 script 拉到任意物件中为游戏画面增加一个 GUI.Box,并可随意调整文字内容、大小、位置、透明度、样式等,不过比较建议是先建立空物件( GameObject / Create Empty )给这个 Script 专用,如此的话,画面上有很多 GUI 元素的时候,我们可以为 GUI 专用的物件在 Hierarchy 视窗中编排他们的父子层结构,方便将来维护;或是为这个 GUI 专用物件制作 Prefab,那麽将来需要此 GUI 元素,只需要将此 Prefab 拉到场景中即可,相当便利。接下来,只要在以上范例的 public class MyGUIBox 的上一行加入 [ExecuteInEditMode] ,使这个 script 在编辑模式执行,那么 GUI 将可以不用执行整个游戏程式就能处于执行状态,如此只要调整 Inspector 视窗中的 position 栏位(以上面程式为例)就能边看 Game 视窗内容边调整 GUI 位置大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值