Unity Editor学习笔记

一、生命周期

void Awake():
void OnGUI():绘制窗口时调用
void Update(): 更新
void OnFocus():当窗口获得焦点时调用一次
void OnLostFocus():当窗口失去焦点时调用一次
void OnHierarchyChange():当Hierarchy视图中的任何对象发生改变时调用一次
void OnProjectChange():当Project视图中的资源发生改变时调用一次
void OnInspectorUpdate(){ this.Repaint(); }:窗口面板更新,必须重绘,否则不会更新
void onSelectionChange():{
//当窗口出去开启状态,并且在Hierarchy视图中选择某游戏对象时调用
foreach(Transform t in Selection.transforms){
//有可能是多选,因此Selection是个数组或者其他结构类型来的
}

二、Unity编辑器的扩展:IMGUI(Immediate Mode GUI)

1、定义:

所有关于 Editor 的相关 UI,包括 Inspector、Hierarchy、Window、Game 视图上动态创建的那些半透明 UI、还有 Scene 视图上可添加的辅助显示 UI.

2、名字来源于两种类型的UI系统:immeditate 和 retained

  • retained:当设置好各种组件(例如Text、button之类的信息)后,或者修改它们的相关属性,这些组件的相关信息和改动会被保存下来(retained),系统会根据这些新的信息来绘制响应事件。UGUI即是典型的retained mode GUI。
  • immediate:系统不会保存UI控件上的各种信息,不会用上次的状态继续工作,而是反复询问这些控件的信息。例如OnGUI()绘制。

3、相关类介绍

  • Editor类:继承ScriptableObject,只能定制针对脚本的扩展,从脚本内容欧冠在Inspector里的显示布局,到变量在Scene视图的可视化编辑

  • EditorWindow类:继承ScriptableObject,主要是扩展编辑器的功能,有独立的窗口,使用OnGUI函数绘制2D的UI

  • 在Game视图上显示的ingameGUI主要是GUI和GUILayout,另外与之对应的editor-only类是editorGUI和EditorGUILayout两个类。

  • GUI和EditorGUI提供的接口为Fiexed Layout,基本上都是需要传入一个rect变量指定控件的位置和大小,当窗口大小改时控件会保持不变。可以将代码放到GUI.BeginGroup()和GUI.EndGroup()之间将控件进行分组或者划分子区域进行布局。

  • GUILayout和EditorGUILayout则是与前面两个对应的AutoLayout类,不需要指定控件的位置和大小,会根据当前显示区域的大小自动调整布局适应变化。多个控件默认是从上到下的顺序排序,可以用GUILayout.beginHoriztontal(),GUILayout.EndHorizontal(),GUILayoutBeginVertical(),GUiLayoutEndVertical()将代码写到这些调用之间进行水平或者垂直排列控件。

  • GUIUtility类提供了一些工具方法,如获取控件id,转换Screen和GUI之间的坐标等。

  • EditorGUIUtility类是针对Editor提供一些工具方法,除了GUIUtility那些方法外还增加了很多有用的方法,如获取内建资源图标、高亮选中某个物体、产生复制粘贴命令等。

  • Event:该类包含了所有用户输入(按钮、鼠标点击、UI相关布局和绘制事件)。调用Event.current获得当前事件信息,查看EventType枚举定义可查询全部可用类型事件。这个信息在OnGUI、OnInspector、onSceneGUI里面都可以使用以处理一些特定逻辑。

三、自定义控件

  • GUIContent:定义了控件需要显示什么,包含三个基本要素(图片、文本、鼠标停留的提示信息tooltip,play mode运行时tooltip无效)。
  • GUIStyle:定义了控件要如何显示,包括Normal Hover Active等状态切换显示、文字大小颜色、指定图标显示位置等各种信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值