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