您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity入门 >
    OnGUI的视觉化编辑
    时间:2015-02-28 09:10 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



            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。



    public class MyGUIBox : MonoBehaviour {
     
      //按钮文字
     
      public string text;
     
      //大小位置
     
      public Rect position;
     
      //深度
     
      public int depth;
     
      //颜色及透明度
     
      public Color color = Color.white;
     
      //是否启用
     
      public bool isEnabled = true;
     
      //样式设置
     
      public GUIStyle style;
     
      void OnGUI(){
     
      GUI.color = color;
     
      GUI.depth = depth;
     
      GUI.enabled = isEnabled;
     
      GUI.Box(position , text , style);
     
      }
     
      }



    这样子就可以随时把 script 拉到任意物件中为游戏画面增加一个 GUI.Box,

    并可随意调整文字内容、大小、位置、透明度、样式等,不过比较建议是先建立空物件( GameObject / Create Empty )给这个 Script 专用,

    如此的话,画面上有很多 GUI 元素的时候,我们可以为 GUI 专用的物件在 Hierarchy 视窗中编排他们的父子层结构,方便将来维护;

    或是为这个 GUI 专用物件制作 Prefab,那麽将来需要此 GUI 元素,只需要将此 Prefab 拉到场景中即可,相当便利。


    接下来,只要在以上范例的 public class MyGUIBox 的上一行加入 [ExecuteInEditMode] ,使这个 script 在编辑模式执行,

    那么 GUI 将可以不用执行整个游戏程式就能处于执行状态,如此只要调整 Inspector 视窗中的 position 栏位(以上面程式为例)

    就能边看 Game 视窗内容边调整 GUI 位置大小。


    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。