日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

fgui的ui管理框架_DCET: Unity3D客户端和.Net Core服务器双端框架,支持代码全热更(包括FGUI和双端行为树)...

發布時間:2023/12/9 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fgui的ui管理框架_DCET: Unity3D客户端和.Net Core服务器双端框架,支持代码全热更(包括FGUI和双端行为树)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

DCET是Unity3D客戶端和.Net Core服務器的雙端框架。

DCET與ET的差異

DCET是基于ET4.0、5.0、6.0進行二次開發的分支版本,主要差異如下:

移除UGUI模塊;

新增FGUI模塊,包括UI加載、UI管理、UI控件管理代碼自動生成插件等完整的FGUI工作流;

新增行為樹模塊,包括可視化編輯器、雙端運行時、邏輯全熱更的完整的行為樹工作流;

新增Lua模塊,包括CSharp.Lua(自動翻譯熱更層代碼為Lua)、xLua(執行CSharp.Lua翻譯的熱更層Lua代碼)、RapidJson、lua-protobuf、LuaSocket、LPeg、FFI for lua53等完整的Lua熱更工作流。

將框架模塊化,并使用Unity的PackageManager進行管理,可以根據項目需求,按需選擇模塊引用。同時將框架和游戲業務分離,使維護框架代碼更方便。

入門

1.搭建環境

?第一步:下載DCET,下載的方式分為三種:

使用Git命令進行下載,通過Git命令行工具,輸入:git clone https://github.com/DukeChiang/DCET.git 目標文件夾(如:D:/WorkSpace/DCET),回車即可下載。

使用SourceTree等可視化工具進行下載,找到Clone功能,輸入源路徑:https://github.com/DukeChiang/DCET.git,選擇目標路徑:D:/WorkSpace/DCET(示例),然后點擊Clone。如果Clone失敗,可以嘗試方式2進行下載,然后使用Add功能進行可視化管理。

?第二步:下載并安裝Unity2018.4.12f1,有兩種下載方式,根據自己的情況選擇一種方式下載,只需要能正常使用相應版本的Unity即可,理論上是支持大多數的Unity的版本的,不過由于Unity版本眾多,如果需要在其他版本的Unity中使用,需自行適配。下載地址如下:

?第三步:安裝VS2019,在安裝Unity時,可以選擇安裝VS2019,或者通過VS官網下載(https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=16),然后安裝的時候選擇:.NET桌面開發、使用C++桌面開發、使用Unity的游戲開發(可以去掉Unity編輯器安裝)、使用C++的Linux開發、.Net Core跨平臺開發。推薦安裝以上組件,在DCET開發中都可能用到。

2.運行指南

?第一步:啟動服務器:搭建環境完成之后,打開Server/Server.sln解決方案,點擊生成解決方案,如果控制臺輸出的日志中,所有項目都生成成功,即可點擊“Start”啟動服務器。如果控制臺輸出的日志中提示存在生成失敗的項目,則很可能是環境不全導致,右鍵點擊“DCET.Init”項目,點擊屬性,查看目標框架.NET Core 3.0是否正常安裝,如果未安裝,則需要下載并安裝(https://dotnet.microsoft.com/download),如果安裝之后,目標框架依然沒有.NET Core 3.0,說明VS版本過低,更新到最新版即可解決。

?第二步:啟動客戶端:打開Unity2018.4.12f1,點擊Open,選擇DCET路徑下的Unity目錄,點擊選擇文件夾,即可啟動DCET客戶端。此時,打開“Scenes/Init”場景,點擊運行按鈕,即可成功運行,點擊登錄,點擊進入地圖,然后就可以右鍵點擊屏幕,看到骷髏移動的狀態同步的官方示例。如果運行中,點擊登錄提示“System.Exception: Rpc error”,一般情況下是服務器未成功啟動,需要檢查第一步是否未完成。如果運行中,出現異常“XLua.LuaException: F:/DukeChiangGit/ET/Unity/Assets\Res/Lua/Hotfix/Message/AutoGeneratedCode/OuterMessage.lua.txt:600: attempt to call a nil value (method 'setIsRequired')”,一般情況下是未生成Wrap文件,點擊菜單欄XLua/Generate Code生成即可。

3.開發指南

?為了框架代碼維護更方便,且按需引用更方便,現已將框架模塊化,并通過Unity的PackageManager和Assembly Definition進行管理,所以相對于ET的目錄結構會存在一定的差異,但實際功能幾乎沒有差別。下文將分別闡述服務器和客戶端的開發指南。

服務器:服務器代碼所在目錄為DCET/Server,并通過DCET/Server/Server.sln解決方案管理所有項目(包括框架和游戲業務),框架代碼所在目錄為DCET/Server/Packages,具體的項目將在進階文檔中詳細介紹。游戲業務代碼所在目錄為DCET/Server/Assets,分為Init、Runtime、Hotfix、Benchmark四個項目,其中Init為入口項目,Runtime為非熱更項目、Hotfix為熱更項目、Benchmark為測試項目,依賴關系為Init→Benchmark→Hotfix→Runtime。

客戶端:客戶代碼所在目錄為DCET/Unity,并通過DCET/Unity/Unity.sln解決方案管理所有項目(包括框架和游戲業務),框架代碼所在目錄為DCET/Unity/Packages,具體的項目將在進階文檔中詳細介紹。游戲業務代碼所在目錄為DCET/Unity/Assets,分為Runtime、Hotfix、Editor三個項目,其中Runtime為入口項目和非熱更項目、Hotfix為熱更項目、Editor為編輯器項目,依賴關系為Editor→Hotfix→Runtime,Runtime通過反射或Lua的方式啟動Hotfix,所以不需要Runtime依賴Hotfix。

?值得注意的是框架和游戲業務的依賴關系為:游戲業務→框架,依賴不當將導致項目混亂,不利于維護。

?注:“A→B”表示A引用B,可以理解為A可以調用B,B不可以調用A。

進階

1.模塊概述

?DCET分為核心、下載器、配置、網絡、協程鎖、數值、尋路、行為樹、FGUI、Lua模塊, 每個模塊一般分為Editor、Runtime、Hotfix三個項目(程序集),其中Editor為編輯器相關功能,Runtime為非熱更相關功能,Hotfix為熱更相關功能,依賴關系為Editor→Hotfix→Runtime。而模塊間的依賴關系為Lua模塊→其他模塊→核心模塊,用戶可以遵循依賴關系輕松的移除或新增模塊。

?注:客戶端引用通過Assembly Definition進行管理,擴展名為.asmdef,存放于各模塊的各個文件夾根目錄;服務器引用通過項目名/依賴項右鍵進行管理。

2.核心模塊

?核心模塊是其他模塊的基礎,主要提供實體化(組件化)和事件系統的基礎功能支持,也是ET框架設計中最為精髓的部分。所在目錄為:Packages/DCET.Core,下文將重點介紹這兩個方面:

Entity

?Entity即為實體,是經過純粹的ECS不斷改良而來的實體化開發思想,他與Unity的GameObject有一定的相似之處,但又截然不同,具體的不同點在于Unity是采用的Entity+Component的設計思想,而ET采用的是一切皆Entity的設計思想,同時Entity也擁有Component的能力,這種設計將為代碼組織和重用帶來極大的便利,整個代碼結構就可以像樹狀圖一樣清晰,并且代碼也將可以像樹枝一樣被輕松的組合重用。舉個例子,角色有技能列表,各個技能操作方式不同,有直接使用型、有充能型。

public class Role : Entity

{

// 角色相關信息

}

public class SkillComponent : Entity

{

private readonly Dictionary idSkills = new Dictionary();

// 技能增刪查等管理方法

}

public class Skill : Entity

{

// 技能相關信息

}

public class SkillChargeComponent : Entity

{

public void Start()

{

// 充能開始

}

public void End()

{

// 充能結束

}

}

?根據以上示例可以看出,當為充能型技能時,可以為Skill加上SkillChargeComponent組件,技能釋放時就可以走充能邏輯;當技能為直接釋放型技能時,則不需要加SkillChargeComponent組件,也就不會走充能邏輯,這樣一來則可以輕松重用代碼邏輯,并且代碼組織結構也十分清晰。

?此外,Entity與Unity的MonoBehaviour一樣存在生命周期,而ET的生命周期實現方式略有不同,是通過Attribute標記和啟動時根據標記信息自動注冊,然后根據生命周期執行,具體用法如下:

[ObjectSystem]

public class TestComponentAwakeSystem : AwakeSystem

{

public override void Awake(TestComponent self, string param1)

{

self.Awake(param1);

}

}

[ObjectSystem]

public class TestComponentLoadSystem : LoadSystem

{

public override void Load(TestComponent self)

{

self.Load();

}

}

[ObjectSystem]

public class TestComponentUpdateSystem : UpdateSystem

{

public override void Update(TestComponent self)

{

self.Update();

}

}

[ObjectSystem]

public class TestComponentLateUpdateSystem : LateUpdateSystem

{

public override void LateUpdate(TestComponent self)

{

self.LateUpdate();

}

}

[ObjectSystem]

public class TestComponentDestroySystem : DestroySystem

{

public override void Destroy(TestComponent self)

{

self.Destroy();

}

}

EventSystem

?EventSystem即為事件系統,是解耦的重要方式。代碼和現實世界一樣,有著千絲萬縷的聯系,如果所有的聯系都如同亂麻一般緊密的耦合在一起,將對代碼的維護造成巨大的困難。這時候就需要將代碼以類為單位,將類引用和事件(或委托)作為聯系的橋梁,其中類引用是一種強聯系的方式,這種方式是最直接,最簡單,最方便,最緊密的聯系方式,但如果僅僅只用這種聯系方式也會造成代碼混亂,耦合緊密,難以重用,難以維護的結果。這時候也就需要事件(或委托)進行聯系,也就是解耦(一種弱聯系),當被引用類同時需要引用引用類時,就需要通過這種方式進行聯系,這種方式是能為重用創作條件、避免代碼形成網狀結構的聯系方式。最終代碼結構就形成樹狀結構,清晰明了,利于重用和維護。

?ET的事件系統實現方式,與上文提到的生命周期實現方式原理相同,具體的用法如下:

// 發起事件

Game.EventSystem.Run(EventIdType.Log, "Hello World");

// 捕獲事件

[Event(EventIdType.Log)]

public class Log_WriteLine: AEvent

{

public override void Run(string param1)

{

Console.WriteLine(param1);

}

}

3.AssetBundle模塊

?AssetBundle模塊主要負責資源打包、管理、下載等功能,所在目錄為:Packages/DCET.AssetBundle,具體的使用方法如下:

?配置資源服務器地址和服務器地址:Tools/Start Global Config

?構建資源包和安裝包:Tools/Build Installer (默認只會打包Init場景)

?啟動資源服:Tools/Start Asset Server

?資源管理組件:Hotfix/ResourcesComponent.cs

4.配置模塊

?配置模塊主要負責Excel配置表導出、解析、管理等功能,所在目錄為:Packages/DCET.Config,具體的使用方法如下:

?Excel配置表導出:Tools/Start Config

?配置表管理組件:Hotfix/ConfigComponent.cs

5.網絡模塊

?網絡模塊主要負責網絡消息收發、消息序列化/反序列化、消息管理、TCP/KCP傳輸協議,服務器啟動、更新、管理等功能,所在目錄為:Packages/DCET.Config,具體使用方法如下:

?生成Protobuf消息協議:Tools/Gen Proto

?服務器同步:Tools/Rsync

?服務器命令行:Tools/Start Server Command

?服務器重載:Tools/Start Server Manager

?消息分發組件:MessageDispatcherComponent.cs

?網絡數據發送組件:NetOuterComponent.cs (可以配置TCP/KCP/WebSocket傳輸協議)

?網絡數據接收組件:NetInnerComponent.cs (可以配置TCP/KCP/WebSocket傳輸協議)

6.協程鎖模塊

7.數值模塊

8.尋路模塊

9.行為樹模塊

10.FGUI模塊

11.Lua模塊

高級

1.xLua+CSharp.Lua適配原理

FAQ

待更新

技術支持

ET群:474643097

DCET新群:1105670843

總結

以上是生活随笔為你收集整理的fgui的ui管理框架_DCET: Unity3D客户端和.Net Core服务器双端框架,支持代码全热更(包括FGUI和双端行为树)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。