ET学习日志之运行demo

DCET下载:https://github.com/DukeChiang/DCET

如果下载缓慢可以导入到码云仓库再下载

 

相比较 ET 所有模块都丢到了 PackageManager 将框架和游戏业务分离后,维护业务更方便了。

Assembly Definition 使用超方便,但是解决方案项目越来越多了。。

ET学习日志之运行demo_第1张图片

先来启动demo,打开Server/Server.sln解决方案,设置DCET.Init为启动项,启动服务器

或者返回unity 点击菜单 Tools/Start Server Command,启动服务器

Unity 运行后 点击登录,看到以下画面为运行demo成功

ET学习日志之运行demo_第2张图片

接下来看看目录结构

可以看到Assets非常简练,所有模块都放在了Packages,专注业务开发就行

 

ET学习日志之运行demo_第3张图片

 

Demo 使用的FairyGUI比较老,使用最新的可以把下面这个ET的修改为DCET的代码生成

FairyGUI 生成模板修改

个人感觉 demo 创建UI是比较繁琐的,这里提供一个工具

using FairyGUI;
using System.Threading.Tasks;

namespace DCET
{
    public sealed class FGUIHelper
    {
        static FGUIHelper _inst;
        FUIComponent manager;

        public FGUIHelper()
        {
            manager = Game.Scene.GetComponent();
        }

        static FGUIHelper Inst
        {
            get { return _inst ?? (_inst=new FGUIHelper()); }
        }

        public static T Get(string name) where T : FUI
        {
            return Inst.manager.Get(name) as T;
        }

        public static void Remove(string name)
        {
            Inst.manager.Remove(name);
        }
        public static void Remove(FUI ui)
        {
            Inst.manager.Remove(ui.Name);
        }

        public static async Task Add(string packName, string resName, bool asChildGObject = true) 
            where T : FUI
            where K:Entity,new()
        {
            var ui = Get($"{packName}.{resName}");
            if (ui != null)
            {
                return ui.GetComponent();
            }

            TaskCompletionSource tcs = new TaskCompletionSource();
            UIPackage.CreateObjectAsync(packName, resName, go => { tcs.SetResult(EntityFactory.Create(Game.Scene,go)); });
            ui = await tcs.Task;
            Initialization(ui);
            Inst.manager.Add(ui, asChildGObject);
            return ui.AddComponent();
        }

        public static void Clear()
        {
            Inst.manager.Clear();
        }

        static void Initialization(FUI ui)
        {
            var com = ui.GObject as GComponent;
            var closeBtn = com.GetChild("closeBtn");
            if (closeBtn != null)
            {
                closeBtn.asButton?.onClick.Add(() =>
                {
                    Inst.manager.Remove(ui.Name);
                });
            }
        }
    }
}

 

 

 

 

 

以及GList 的Item池

using FairyGUI;
using System;
using System.Collections.Generic;

namespace DCET
{
    public class GListPoolComponent:Entity where T : FUI 
    {
        Dictionary pairs = new Dictionary();

        public T Get(GObject go)
        {
            if (pairs.ContainsKey(go.id))
            {
                return pairs[go.id];
            }
            var ui = EntityFactory.Create(Game.Scene,go);
            pairs.Add(go.id, ui);
            return ui;
        }

        public override void Dispose()
        {
            base.Dispose();
            foreach (var item in pairs.Values)
            {
                item.Dispose();
            }
            pairs.Clear();
        }
    }
}

 

你可能感兴趣的:(ET框架,DCET,Unity,ET框架)