第六章 基本框架(Framework)
七 视图(View&UI)
关于View与UI,一搜一大堆。
我们也不过多介绍了。
我们将使用Stack方式来打开我们的UI。
我们所有的View都存储在一个叫做ViewDictionary
的字典中,它继承了IDictionary
。并且主要核心算法(打开,关闭,销毁等)全部都放在它之中。使用名字string
来作为Key,当然你也可以不使用名字,修改其使用Enum
。
而Manager持有一个ViewDictionary
,作为DontDestroy的父对象。
我们只来简单介绍一下核心部分,打开View,还有关闭中间View的方法。
当然,除了这两个,还有销毁,获取等等一系列,就不在这里说明了。
1 打开(Open View)
1.1 流程图(Flow Chart)
1.2 核心代码块(Main Code)
/// <summary>
/// 获取或实例化view。
/// 实例化时:
/// 1、预制体带组件,直接返回。
/// 2、预制体不带组件,动态添加组件。
/// 错误:
/// 1、找不到组件的类型。
/// 2、组件类型是Abstract。
/// 3、组件类型没有继承自ViewBase。
/// </summary>
/// <param name="viewName"></param>
/// <returns></returns>
protected ViewBase GetOrInstantiateView(string viewName)
{
ViewBase view;
if (!m_ViewDict.TryGetValue(viewName, out view))
{
// 获取Prefab
GameObject prefab = GetOrLoadPrefab(viewName);
if (prefab == null)
{
Debug.LogError("[InstantiateView] Prefab is not found.");
return null;
}
// 实例化并检测组件
GameObject viewGameObject = GameObject.Instantiate(prefab);
view = viewGameObject.GetComponent<ViewBase>();
if (view == null)
{
// 没有找到组件,动态添加
Type type = GetViewComponentType(viewName);