2.准备工作和面板基类

2.准备工作


2.1 知识点

创建Unity工程,导入艺术资源,NGUI插件和XMl数据管理器。

创建Unity必备的文件夹Resources和StreamingAssets

分析面板的泛型基类要做的事

创建面板基类BasePanel脚本,T约束为类。所有面板都继承面板基类。设置成单例。提供初始化接口。通过显示和隐藏面板的虚函数。

/// <summary>
/// 面板基类,所有面板都会继承它,方便使用节约代码量。
/// </summary>
/// <typeparam name="T">泛型类型参数,必须为class引用类型。</typeparam>
public abstract class BasePanel<T> : MonoBehaviour where T : class
{
    // 创建一个静态的T类型对象instance,用于存储BasePanel子类的实例化对象,是单例模式的实现方法之一。
    private static T instance;
    
    // 创建一个只读的属性,用于获取static对象,使用lambda表达式进行简化,方便调用。
    public static T Instance => instance;
    
    // 在Awake函数中赋值instance为this对象的T类型,利用了泛型的强转机制。
    protected virtual void Awake()
    {
        instance = this as T;
    }
    
    // 在Start函数中调用Init方法初始化,该方法被定义为抽象函数,必须在子类中进行实现。
    void Start()
    {
        Init();
    }
    
    /// <summary>
    /// 主要用于 初始化 控件的事件监听等逻辑,是一个抽象函数,需要在子类中具体实现。
    /// </summary>
    public abstract void Init();
    
    /// <summary>
    /// 显示自己,将此游戏对象激活显示。
    /// </summary>
    public virtual void ShowMe()
    {
        this.gameObject.SetActive(true);
    }
    
    /// <summary>
    /// 隐藏自己,将此游戏对象去激活隐藏。
    /// </summary>
    public virtual void HideMe()
    {
        this.gameObject.SetActive(false);
    }
}

2.2 知识点代码

// 引用了System.Collections、System.Collections.Generic和UnityEngine命名空间。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 面板基类,所有面板都会继承它,方便使用节约代码量。
/// </summary>
/// <typeparam name="T">泛型类型参数,必须为class引用类型。</typeparam>
public abstract class BasePanel<T> : MonoBehaviour where T : class
{
    // 创建一个静态的T类型对象instance,用于存储BasePanel子类的实例化对象,是单例模式的实现方法之一。
    private static T instance;

    // 创建一个只读的属性,用于获取static对象,使用lambda表达式进行简化,方便调用。
    public static T Instance => instance;

    // 在Awake函数中赋值instance为this对象的T类型,利用了泛型的强转机制。
    protected virtual void Awake()
    {
        instance = this as T;
    }

    // 在Start函数中调用Init方法初始化,该方法被定义为抽象函数,必须在子类中进行实现。
    void Start()
    {
        Init();
    }

    /// <summary>
    /// 主要用于 初始化 控件的事件监听等逻辑,是一个抽象函数,需要在子类中具体实现。
    /// </summary>
    public abstract void Init();

    /// <summary>
    /// 显示自己,将此游戏对象激活显示。
    /// </summary>
    public virtual void ShowMe()
    {
        this.gameObject.SetActive(true);
    }

    /// <summary>
    /// 隐藏自己,将此游戏对象去激活隐藏。
    /// </summary>
    public virtual void HideMe()
    {
        this.gameObject.SetActive(false);
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏