Unity GUI 系统应知

版权声明:http://blog.csdn.net/admin_jhon https://blog.csdn.net/Admin_Jhon/article/details/78520023

概述

GUI系统主要部分:

  • OnGUI回调(这个回调是用于处理一切与GUI相关的逻辑)
  • Event,这是和GUI系统紧密关联的
  • GUIStyle 定义了一种样式,实际上是负责任意GUI的绘画
  • GUISkin 一组预定义的默认样式。
  • GUIUtilityEditorGUIUtility

OnGUI

由引擎自动调用。通常每帧至少两次,但可能由于其他事件的发生而被多次调用。
OnGUI看名字意思类似于“做GUI的东西”,但事实上它是一个事件处理器的回调。

Event

事件类信息事件的一般在OnGUI处理。只有一个静态成员 Event.current,这个属性保存了当前处理的EventType。

以下是几种不同类型的事件:

  • Mouse events

    MouseDown, MouseUp, MouseMove(editor only), MouseDrag, ScrollWheel等。

  • Keyboard events

    KeyDown、KeyUp。
    注意:不同于 Input.GetKeyDown / Up ,这些事件是映射操作系统键盘事件。所以当你按住一个键的时候,这个事件的调用频度是取决去系统的。这对于文本编辑器是很重要的。

  • The Repaint event

    绘制GUI上的元素。

  • The Used event type

    当你的控制器在处理事件的时候,不想让其他地方也受到这个事件的影响,可以采用 Use 的方式来“吃掉”这个事件。

  • MousePosition

    持有鼠标在GUI位置坐标。GUI坐标与屏幕坐标不同。GUI的原点在左上角,屏幕坐标原点在左下角。GUIUtility 里有提供API来转换这个两者的坐标系

  • Button

    有效的鼠标事件以及鼠标索引。(0-鼠标左键、1-鼠标中键、2-鼠标右键)

  • Modifiers

    持有关于Shift, Alt, Ctrl 这些按键的信息。

  • KeyCode

    有效的键盘事件,有键被按下/释放
    一些额外的修饰键的快捷键之类的东西。

GUIStyle

正如之前提到的GUIStyle负责渲染到屏幕上的控制。当 repaint event被检测到的时候,GUI就会调用绘制功能。GUIStyle由不同GUIStyleStates组成,但其中只有一个是“激活”的。使用哪个种是由什么画函数被调用时,所传递的参数,如果当前控制键盘焦点。
一个GUIStyle会产生0到3个drawcall

大多数的试用情景:

  • 通常是用来定义如何按钮/文本框/…通常的样子。
  • 一些在GUIContent中使用到的图片

GUISkin

正如之前所说,只是GUIStyle的集合。不用于GUIStyleGUISkin可以很容易的作为资源文件存放在项目中。

GUI vs GUILayout

基本上GUILayout只是一个GUI控件的扩展。大多数GUILayout函数只是调用GUI相当于函数添加布局。“正常”的GUI功能完全忽略了布局的事件。GUILayout函数使用一个内部系统,建立布局组织收集所有控件布局在一组事件和重新油漆事件被调用之前Unity分配的可用空间根据多少空间每一个控制要求。

EditorGUI(Layout) vs GUI(Layout)

EditorGUIEditorGUILayout只是扩展GUIGUILayout类只用于编辑器脚本位于UnityEditor.dll。这两个类不作为GUIGUILayout的替代。他们只是提供额外的控制,这是有用的在脚本编辑器定制检查员或EditorWindows

猜你喜欢

转载自blog.csdn.net/Admin_Jhon/article/details/78520023
今日推荐