Unity UI
一、GUI(IMGUI)
1.1定义
即时模式用户交互界面,是一个完全独立的功能系统,不同于Unity基于游戏对象的UI,是一个代码驱动的用户交互界面
1.2 作用
(1)程序员创建的游戏内部的调试工具
(2)为脚本组件创建自定义检视面板
(3)创建新的编辑器窗口和工具以拓展unity本身(一般用作内置游戏工具)
1.3 弊端
丑,代码驱动,一般不作为玩家制作ui功能
1.4 工作原理
(1)在继承MonoBehavior的脚本的生命周期函数OnGUI中编写相关功能,并将脚本挂载到合适的对象上。
(2)OnGUI()每帧都会调用,在LateUpdate之后,OnDisable之前执行无需显式创建和销毁GUI控件
在继承MonoBehaviour的脚本中的特殊函数里调用GUI提供的方法,类似生命周期函数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class lesson1 : MonoBehaviour
{
private void OnGUI()
{
//在其中书写 GUI相关代码 即可显示GUI内容
}
//注意:
//1.它每帧执行 相当于是用于专门绘制GUI界面的函数
//2.一般只在其中执行GUI相关界面绘制和操作逻辑
//3.该函数 在 OnDisable之前 LateUpdate之后执行
//4.只要是继承Mono的脚本 都可以在OnGUI中绘制GUI
}
为了驱动该系统,需要在实现脚本上调用OnGUI函数,例如:
Void OnGUI(){
if (GUILayout.Button("Press Me"))
Debug.log("Hello!");
}
1.5 函数
基本函数 | 参数 | 解释 |
---|---|---|
public static bool Button (Rect position, string text); | position | 屏幕上用于按钮的矩形 |
public static bool Button (Rect position, Texture image); | text | 要在按钮上显示的文本 |
public static bool Button (Rect position, GUIContent content); | content | 该按钮的文本、图像和工具提示 |
public static bool Button (Rect position, string text, GUIStyle style); | style | 要使用的样式。如果省略则当前使用GUISkin的button样式 |
public static bool Button (Rect position, Texture image, GUIStyle style); | ||
public static bool Button (Rect position, GUIContent content, GUIStyle style); |
1.6 控件声明的关键信息
Type(Position,Content)
~Type是指控件类型,通过调用GUI类或GUILayout类中的函数来声明该类型
~Position是控件函数中的第一个参数,是一个Rect。Rect有最左侧位置、最顶部位置、总宽度、总高度四个属性,对应于像素值。坐标系基于左上角。
~Content是控件的第二个参数,控件一起显示的实际内容。
1.要显示文本,将字符串作为Content参数传递。
2.要显示图像,声明Texture2D变量。将其作为Content参数传递。
3.还可通过一起显示图像和文本。
4.还可以定义工具提示(Tooltip),当鼠标悬停在GUI上时将工具提示显示。
1.7 创建一个单击按钮
当用户点击该按钮时,立即执行一些操作。
// Draws 2 buttons, one with an image, and other with a text
// And print a message when they got clicked.using UnityEngine;
using System.Collections;public class ExampleClass : MonoBehaviour
{
public Texture btnTexture; void OnGUI()
{
if (!btnTexture)
{
Debug.LogError("Please assign a texture on the inspector");
return;
} if (GUI.Button(new Rect(10, 10, 50, 50), btnTexture))
Debug.Log("Clicked the button with an image"); if (GUI.Button(new Rect(10, 70, 50, 30), "Click"))
Debug.Log("Clicked the button with text");
}
}
1.8 GUI控件绘制的共同点
1.他们都是GUI公共类中提供的静态函数 直接调用即可
2.他们的参数都大同小异
位置参数:Rect参数 x y位置 w h尺寸
显示文本:string参数
图片信息:Texture参数
综合信息:GUIContent参数
自定义样式:GUIStyle参数
3.每一种控件都有多种重载,都是各个参数的排列组合
必备的参数内容 是 位置信息和显示信息
二、UGUI
2.1 六大基础组件
Canvas对象上依附的:
Canvas:画布组件,主要用于渲染UI控件
Canvas Scaler:画布分辨率自适应组件,主要用于分辨率自适应
Canvas Raycaster:射线事件交互组件,主要用于控制射线相应相关
RectTransform:UI对象位置锚点控制组件,主要用于控制位置和对其方式
EventSystem对象上依附的:
EventSystem和Standalone Input Module:玩家输入事件响应系统和独立输入模块组件,主要用于监听玩家操作
EventSystem事件系统(即键盘、鼠标、触摸或者自定义输入)
总结:
(1)如何在Unity使用UGUI——无需引入内容,直接右键使用
(2)六大基础组件在哪里——Canvas对象和EventSystem对象上
(3)六大基础组件概述----六大组件分别有什么作用
2.2 课后测试
2.2.1 canvas
(1)canvas组件用来干什么?
画布组件,用于渲染显示ui控件,ui控件必须作为子对象
(2)场景中可以有多个canvas对象
不同的渲染和分辨率适应方式(不常用)
(3)canvas组件的3种渲染方式
覆盖模式:ui始终显示在最前面
摄像机模式:3D物体可以显示在ui前
3D模式:用于制作3DUI,在VR和AR中常用,游戏中的3D UI效果才使用
2.2.2 CanvasScaler
CanvasScaler----画布控制器
作用:负责不同分辨率下UI控件的大小自适应,不负责位置,位置由之后的transform进行控制,主要提供了三种负责分辨率自适应的模式。
2.2.3 相关知识
(1)屏幕分辨率:当前设备的分辨率,编辑器下Game窗口的state统计数据实时查看当前屏幕分辨率,这会参与分辨率自适应的计算;
(2)画布大小和缩放系数:通过一定算法以屏幕分辨率和参考分辨率参与计算得出缩放系数,该结果会影响所有UI控件的缩放大小。选中canvas在transform中的宽高和缩放,宽高x缩放=画布;
(3)参考分辨率:在缩放模式的宽高模式中出现的参数,参与分辨率自适应的计算
2.2.4 Graphic Raycaster
1.Graphic Raycaster组件用来干啥?
用于UI元素的射线检测,用于触发交互
2.Graphic Raycaster参数
Ignore Reversed Graphic:是否忽略反转图形
Blocking Objects:射线被哪些类型的碰撞器阻挡(在覆盖渲染模式下无效)
Blocking Mask:射线被哪些层级的碰撞器阻挡(在覆盖渲染模式下无效)