Unity 3D 官方文档 UGUI总览 IMGUI OnGUI Editor脚本初窥2

版本:unity 5.6.3  语言:C#

 

总起:

本章会讨论OnGUI的剩下的内容,包括Skin和Style、Layout自动布局等。相信通过这两章对OnGUI的研究会对这套系统更加的了解。

 

Customization 皮肤定制:

这边讲到了GUIStyle和GUISkin,功能是对GUI的界面皮肤进行定制,当然只使用默认皮肤根本也不会影响代码的功能。

 

可以通过在Project窗口下右键新建一个GUISkin:



这边的GUISkin就包括了一套皮肤,包括Box、Button、Toggle等,而所谓GUIStyle是指某个组件的皮肤,比如点开上图的Box就是一个Style,Button又是另一个Style。

 

以下是应用一个GUIStyle的代码,只需要添加最后一个参数就OK了:

    public GUIStyle customButton;
    void OnGUI()
    {
        GUI.Button(new Rect(10, 10, 150, 20), "I am a Custom Button", customButton);
    }


GUISkin的用法是修改当前环境中的皮肤,也很方便:

    public GUISkin mySkin;
    void OnGUI()
    {
        GUI.skin = mySkin;
        GUI.Button(new Rect(10, 10, 150, 20), "Skinned Button");
    }

*需要注意的是别图省事直接修改默认的皮肤了,这样会导致Unity自己本身自带的窗口显示异常,修改皮肤就使用以上两种方法就够了。

 

自动布局 Layout:

再次强调一遍,GUI类下的组件都是固定摆放的,而GUILayout类是自动布局的,两者功能上是完全相同,区别仅仅是是否自动布局这点。

 

GUI.BeginGroup(Rect)和GUI.EndGroup()成对使用时,可以改变其中的组件的相对位置,相当于是放在了其父物体下:

    void OnGUI()
    {
        GUI.BeginGroup(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 50, 100, 100));
        GUI.Box(new Rect(0, 0, 100, 100), "Group is here");
        GUI.Button(new Rect(10, 40, 80, 30), "Click me");
        GUI.EndGroup();
    }

以上的代码下,虽然Box的位置是(0, 0),但因为使用到了Group放在了中间,所以Box的位置也是在中间。

 

下面开始讲自动布局。


GUILayout.BeginArea(Rect)和GUILayout.EndArea()成对使用,效果类似于GUI的Group,不多说。

 

GUILayout中最重要的两个组是BeginHorizontal()和EndHorizontal()、BeginVertical()和EndVertical(),可以自动进行水平和垂直布局:

    float sliderValue = 1.0f;
    float maxSliderValue = 10.0f;
    void OnGUI()
    {
        GUILayout.BeginHorizontal();
        if (GUILayout.RepeatButton("Increase max\nSlider Value"))
        {
            maxSliderValue += 3.0f * Time.deltaTime;
        }
        GUILayout.BeginVertical();
        GUILayout.Box("Slider Value: " + Mathf.Round(sliderValue));
        sliderValue = GUILayout.HorizontalSlider(sliderValue, 0.0f, maxSliderValue);
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();
    }

布局之间的嵌套应用完全也是没有问题的。

 

Unity的官方文档中下一篇讲到了对原本的OnGUI进行扩展,其实就是将几个组件封装到一个方法里,不多说了,但是在真正写一个窗口时很重要,比如说Vector3的三个水平的输入框,可以封装成一个方法,以后要调用到类似的就可以直接使用。

 

个人:

UGUI的所有内容就讲到这里了,我编写的过程中确实学到了很多知识,不过花费的时间确实是比较长的,每次遇到不清楚的知识点都会查阅资料,然后自己在工程上做测试。

 

……真希望自己还处于学生时代,能悠闲地把博客更完,哈哈。

 

然后因为要开始忙了,所以更新的不会很频繁,见谅见谅。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值