6.控件根对象
6.1 知识点
待解决两个问题
- 所见即所得(编辑模式下能看到GUI)
- 可以控制控件的绘制顺序
创建所有自定义GUI的根部类,添加ExecuteAlways特性
在类名添加ExecuteAlways
特性,可以让编辑模式下指定代码运行。
[ExecuteAlways]
//所有自定义GUI的根部类
public class CustomGUIRoot : MonoBehaviour
{
}
创建用于存储子对象所有GUI控件的容器
在Start方法中获取所有子对象的控件父类脚本
通过GetComponentsInChildren
方法获取所有子对象的控件父类脚本。
void Start()
{
//通过每一次绘制之前 得到所有子对象控件的 父类脚本
allControls = this.GetComponentsInChildren<CustomGUIControl>();
}
在OnGUI方法中遍历调用每个控件父类脚本的绘制方法
在OnGUI
方法中遍历调用每个控件父类脚本的绘制方法。
if (!Application.isPlaying)应该要被注释
因为非编辑状态下 隐藏了某个控件 不会修改allControls 导致还在绘制
//在这同一绘制子对象控件的内容
private void OnGUI()
{
//编辑状态下 才会一直执行
//if (!Application.isPlaying)
//{
//这句代码 浪费性能 因为每次 gui都会来获取所有的 控件对应的脚本 所以要在编辑状态下才会一直执行
//在编辑状态下运行是因为想一直看到控件的移动
//最后没开启是因为只得了一次子对象的CustomGUIControl 就算子对象被隐藏了也不会重写得CustomGUIControl 会有问题
allControls = this.GetComponentsInChildren<CustomGUIControl>();
//}
//遍历每一个控件 让其 执行绘制
for (int i = 0; i < allControls.Length; i++)
{
allControls[i].DrawGUI();
}
}
6.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//在类名添加ExecuteAlways特性 可以让编辑模式下让指定代码运行
[ExecuteAlways]
//所有自定义GUI的根部类
public class CustomGUIRoot : MonoBehaviour
{
//用于存储 子对象 所有GUI控件的容器
private CustomGUIControl[] allControls;
void Start()
{
//通过每一次绘制之前 得到所有子对象控件的 父类脚本
allControls = this.GetComponentsInChildren<CustomGUIControl>();
}
//在这同一绘制子对象控件的内容
private void OnGUI()
{
//编辑状态下 才会一直执行
//if (!Application.isPlaying)
//{
//这句代码 浪费性能 因为每次 gui都会来获取所有的 控件对应的脚本 所以要在编辑状态下才会一直执行
//在编辑状态下运行是因为想一直看到控件的移动
//最后没开启是因为只得了一次子对象的CustomGUIControl 就算子对象被隐藏了也不会重写得CustomGUIControl 会有问题
allControls = this.GetComponentsInChildren<CustomGUIControl>();
//}
//遍历每一个控件 让其 执行绘制
for (int i = 0; i < allControls.Length; i++)
{
allControls[i].DrawGUI();
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com