6.控件根对象

6.控件根对象


6.1 知识点

待解决两个问题

  1. 所见即所得(编辑模式下能看到GUI)
  2. 可以控制控件的绘制顺序

创建所有自定义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

×

喜欢就点赞,疼爱就打赏