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

来源:互联网 发布:游族网络大皇帝礼包 编辑:程序博客网 时间:2024/06/05 16:21

版本:unity 5.6.2  语言:C#

 

总起:

在脚本中添加OnGUI方法后,UI可以使用代码进行完全控制,虽然因为效率的问题现在已经很少使用了,但在Editor脚本中,如果你需要扩展一下Unity编辑器的功能,那掌握该GUI的编写还是非常必要的。

 

官方给出了三种该UI的用途:

1.游戏中Debug时需要显示一些简单的UI;

2.Component脚本创建一个自定义的Inspector;

3.创建一个Editor Window,扩展Unity本身。

 

以下是一个OnGUI使用的小例子:

    void OnGUI()    {        if (GUILayout.Button("点我"))            Debug.Log("Hello!");    }

把上面的方法放到任意一个脚本中,然后挂到场景中,运行后就能看到左上角一个按钮,点击就会执行if中的方法。

 

一些基本使用:

GUI.Button可以创建一个按钮、GUI.Box则能创建一些简单的信息,其中Box的第一个参数Rect需要四个int参数,前两个是对锚点的偏移,而后两个是Box本身的宽高。

 

UGUI中,大家一开始就会接触锚点和轴点以保证UI的适配,而在OnGUI中没有那么明显的设置,需要通过Screen.Width和Screen.height获取当前屏幕的宽高来手动调节锚点。

 

举两个例子:

1.右上:new Rect(Screen.width - 100, 0, 100, 50);

2.中央:new Rect((Screen.width - 100) / 2 , (Screen.heigth - 50) / 2, 100, 50)。

 

通常GUI的第一个参数就是上面的Rect,而第二个参数能控制显示具体的内容:string、Texture2D。

 

如果需要string和Texture2D同时显示,则可以使用GUIContent类,不过提供的显示效果有限,只能图片后面跟着文字。

 

显示控制:

这边介绍一些GUI常用的方法,比如GUI.Label可以创建一个文字标签。

 

当然比起GUI,更常用的是GUILayout,因为GUILayout可以自动进行布局,而GUI的所有控件的显示必须指定Rect,不过除了是否自动布局这点,其他的都是一样的。

 

♦ Label

单纯的显示一些文字图片,不能被点击。

 

Button

按钮,在点击释放的时候就会触发if内的代码。

 

RepeatButton

同样是按钮,不同的是,按住的时候每帧都会触发if中的事件。我们可以通过下图看到差别:


TextField

提供了可交互功能的Label,用户可以输入文字,返回值是文本框内的文字,用法:tmpStr = GUILayout.TextField(tmpStr)。

 

TextArea

文本区域,类似TextField,但是他提供了多行显示。

 

Toggle

复选框,返回值是当前选项的bool值,当然功能没有UGUI的Toggle可以控制显示很多效果。

 

♦ Toolbar

Toolbar是一组按钮,在同一情况下只能被选中一个,返回值是当前选中的int。UGUI提供的组件比这边的少很多,原因是很多都能进行替代,比如这个Toolbar就可以使用UGUI中的Toggle实现。

 

SelectionGrid

类似Toolbar,但可以显示多行按钮。

 

HorizontalSlider

水平的滑动条,最小值和最大值需要自己指定。

 

VerticalSlider

垂直的滑动条。

 

HorizontalScrollbar

水平滚动条,其实跟Slider差不多,只是显示效果不太一样。

 

VerticalScrollbar

垂直滚动条。

 

ScrollView

滚动视图,自带两个滚动条,返回值是Vector2,指明当前滚动到的位置。参数中第二个Rect指明里面内容的大小。

 

Window

一个可以拖动的窗口,这个可以看作是一个独立的UI页,需要单独显示在一起的UI组可以放到其中,并且在其回调方法中可以指定被拖动的范围。

    // 位置大小设定    Rect rect = new Rect(20, 20, 120, 50);    void OnGUI()    {        rect = GUI.Window(0, rect, WindowFunction, "window");    }    // 拖动时执行的方法    void WindowFunction(int windowID)    {        // 窗口内部按钮        if (GUILayout.Button("btn"))            print("click");        // 指定可以拖动,该Rect并不是想象中的一个拖动范围,只是指定点窗口的哪个区域可以拖动        // 而且可拖动区域不会超过该窗口        GUI.DragWindow(new Rect(0, 0, 120, 50));    }


GUI.changed

当前UI是否变化,可以通过该值来处理值变化后的一些情况。

 

OK,内容不算多,之后的内容等下一章再介绍。

 

个人:

这两天笔记本坏了,准备更换一台台式,就是现在显卡、内存条、SSD太贵了。



原创粉丝点击