[+] Books
@@ -1,6 +1,17 @@
|
|||||||
## 3-1.资源模块 - ResourceModule
|
## 3-1.资源模块 - ResourceModule
|
||||||
资源模块运行模式有EditorSimulateMode、OfflinePlayMode以及HostPlayMode
|
资源模块运行模式有EditorSimulateMode、OfflinePlayMode以及HostPlayMode
|
||||||
编辑器模式下以顶部导航栏的选项卡为优先选项,打包后以Scene场景中ResourceModule脚本的Enum选项卡为优先选项(打包后不会走EditorSimulateMode)
|
编辑器模式下以顶部导航栏的选项卡为优先选项,打包后以Scene场景中ResourceModule脚本的Enum选项卡为优先选项(打包后不会走EditorSimulateMode)
|
||||||
|
|
||||||
|
cene窗口Resource对象可以设置一些资源模块的常用设置,比如打包后的资源模式、资源校验等级以及自动卸载资源间隔等。
|
||||||
|

|
||||||
|
|
||||||
|
Menu窗口TEngineSetting可以设置一些资源模块的热更新设置,比如资源服务器地址以及在线参数等。备注在Luban目录下有一个基于Node的静态文件服务器,可以把在线参数以及AB放入用于做热更新测试。
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
常用接口
|
||||||
|
remark:资源模块初始化的生命周期已经在流程模块实现了,具体有需求可以自定义开发。
|
||||||
``` csharp
|
``` csharp
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取当前资源包版本。
|
/// 获取当前资源包版本。
|
||||||
|
@@ -1,4 +1,9 @@
|
|||||||
## 3-3.内存池模块 - MemoryPool
|
## 3-3.内存池模块 - MemoryPool
|
||||||
|
内存池更为轻量化,相对于对象池更适合一些更抽象碎片化的内存对象。
|
||||||
|
|
||||||
|
Scene窗口MemoryPool对象可以设置内存池检查,防止回收问题与内存泄漏问题。
|
||||||
|

|
||||||
|
|
||||||
使用案例
|
使用案例
|
||||||
``` csharp
|
``` csharp
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
## 3-4.对象池模块 - ObjectModule
|
## 3-4.对象池模块 - ObjectModule
|
||||||
|
对象池较中量级,在客户端开发中是一个经常使用的技术,技术点我相信大家都懂,这里不过多讨论。
|
||||||
|
|
||||||
使用案例
|
使用案例
|
||||||
``` csharp
|
``` csharp
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -1,5 +1,115 @@
|
|||||||
## 3-5.UI模块 - UIModule
|
## 3-5.UI模块 - UIModule
|
||||||
使用案例
|
一个游戏70%都是UI,剩下30%才是GamePlay,所以有一套简洁强大的商业化UI模块以及UI开发工作流将是项目的一大利器,能够提高至少一倍的开发效率。
|
||||||
``` csharp
|
|
||||||
|
|
||||||
|
UI脚本为纯C#实现,脱离Mono的生命周期,由UIModule的帧更新驱动并管理UI的生命周期。
|
||||||
|
|
||||||
|
IUIBehaviour为UI通用行为接口、UIBase为UI基类、UIWindow为UI窗口基类,UIWidget为UI组件基类。
|
||||||
|
|
||||||
|
### 前期配置:
|
||||||
|
注意!!!!m_item节点为特殊节点表示是UI下的UIWidget组件,不会继续往下遍历生成UI代码。若需要这个UIWidget组件m_item的代码则在m_item右键生成这个组件的UI脚本。
|
||||||
|
|
||||||
|
Scene窗口下右键ScriptGenerator菜单下About目录有默认UI命名前缀规范。
|
||||||
|

|
||||||
|
|
||||||
|
有自定义需求可以在TEngineSetting下进行自定义。
|
||||||
|

|
||||||
|
### 开发工作流:
|
||||||
|
1.遵守前期默认配置或者自定义配置进行UI编排
|
||||||
|

|
||||||
|
|
||||||
|
2.在UI的根节点右键ScriptGenerator生成UI代码到剪贴板上!!!
|
||||||
|

|
||||||
|
|
||||||
|
3.自行创建UI脚本到需要的目录下并复制UI脚本。
|
||||||
|
|
||||||
|
举例
|
||||||
|
``` csharp
|
||||||
|
namespace GameLogic
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// BattleMainUI面板
|
||||||
|
/// <remarks>UIWindow需要以下特性,UILayer可以自行定义,fullScreen表示为全屏面板会停止和隐藏这个面板堆栈后面的面板。</remarks>
|
||||||
|
/// </summary>
|
||||||
|
[Window(UILayer.Bottom,fullScreen:true)]
|
||||||
|
class BattleMainUI : UIWindow
|
||||||
|
{
|
||||||
|
private TouchMove m_touchView;
|
||||||
|
|
||||||
|
#region 脚本工具生成的代码
|
||||||
|
private RectTransform m_rectContainer;
|
||||||
|
private GameObject m_itemTouch;
|
||||||
|
private Button m_btnLeaveBattle;
|
||||||
|
private GameObject m_goTopInfo;
|
||||||
|
private Button m_btnPause;
|
||||||
|
public override void ScriptGenerator()
|
||||||
|
{
|
||||||
|
m_rectContainer = FindChildComponent<RectTransform>("m_rectContainer");
|
||||||
|
m_itemTouch = FindChild("m_rectContainer/m_itemTouch").gameObject;
|
||||||
|
m_btnLeaveBattle = FindChildComponent<Button>("m_btnLeaveBattle");
|
||||||
|
m_goTopInfo = FindChild("m_goTopInfo").gameObject;
|
||||||
|
m_btnPause = FindChildComponent<Button>("m_goTopInfo/m_btnPause");
|
||||||
|
m_btnLeaveBattle.onClick.AddListener(OnClickLeaveBattleBtn);
|
||||||
|
m_btnPause.onClick.AddListener(OnClickPauseBtn);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 事件
|
||||||
|
|
||||||
|
private void OnClickPauseBtn()
|
||||||
|
{
|
||||||
|
BattleSys.Instance.Pause = !BattleSys.Instance.Pause;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnClickLeaveBattleBtn()
|
||||||
|
{
|
||||||
|
BattleSys.Instance.StopBattle(isBattleEnd:false,isWin:false);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//注册事件举例
|
||||||
|
public override void RegisterEvent()
|
||||||
|
{
|
||||||
|
//通过AddUIEvent这样注册事件会把事件的生命周期绑定给面板,面板销毁的时候自动移除监听。
|
||||||
|
AddUIEvent(ActorLogicEventDefined.OnMainPlayerBagDataChange, RefreshUI);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void BindMemberProperty()
|
||||||
|
{
|
||||||
|
//特殊的m_item节点的域不属于父级UIWindows,所以如注意所说需要同样创建这个UIWidget的脚本并生成代码过去。 可以如下创建或者走type、path创建。
|
||||||
|
m_touchView = CreateWidget<TouchMove>(m_itemTouch);
|
||||||
|
}
|
||||||
|
|
||||||
|
......
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace GameLogic
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 移动操作UIWidget。
|
||||||
|
/// </summary>
|
||||||
|
class TouchMove : UIWidget, IUICtrlMove
|
||||||
|
{
|
||||||
|
public override void BindMemberProperty()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//注意Update只有在重写了此方法才会驱动这个Widget或者面板的Update。
|
||||||
|
public override void OnUpdate()
|
||||||
|
{
|
||||||
|
TProfiler.BeginSample("CheckMoveTouchFinger");
|
||||||
|
CheckMoveTouchFinger();
|
||||||
|
TProfiler.EndSample();
|
||||||
|
|
||||||
|
TProfiler.BeginSample("UpdateTouchMovePos");
|
||||||
|
UpdateTouchMovePos();
|
||||||
|
TProfiler.EndSample();
|
||||||
|
|
||||||
|
TProfiler.BeginSample("UpdateKeyMove");
|
||||||
|
UpdateKeyMove();
|
||||||
|
TProfiler.EndSample();
|
||||||
|
}
|
||||||
|
......
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
@@ -1,4 +1,52 @@
|
|||||||
## 3-6.配置表模块 - ConfigLoader
|
## 3-6.配置表模块 - ConfigLoader
|
||||||
``` csharp
|
接入最佳游戏配置解决方案 - <a href="https://github.com/focus-creative-games/luban"><strong>Luban</strong></a>
|
||||||
|
|
||||||
|
<a href="https://luban.doc.code-philosophy.com/#/manual/traits"><strong>Luban文档 </strong></a>
|
||||||
|
|
||||||
|
### 介绍
|
||||||
|
luban是你的最佳游戏配置解决方案。
|
||||||
|
|
||||||
|
luban高效地处理游戏开发中常见的excel、json、xml之类的数据,检查数据错误,生成c#等各种语言的代码,导出成bytes或json等多种格式。
|
||||||
|
|
||||||
|
luban统一了游戏配置开发工作流,极大提升了策划和程序的工作效率。
|
||||||
|
|
||||||
|
核心特性
|
||||||
|
强大的数据解析和转换能力 {excel(csv,xls,xlsx)、json、bson、xml、yaml、lua、unity ScriptableObject} => {binary、json、bson、xml、lua、yaml、erlang、 custom format}
|
||||||
|
增强的excel格式,可以简洁地配置出像简单列表、子结构、结构列表,以及任意复杂的深层次的嵌套结构。
|
||||||
|
完备的类型系统,支持OOP类型继承,搭配excel、json、lua、xml等格式数据灵活优雅表达行为树、技能、剧情、副本之类复杂GamePlay数据
|
||||||
|
支持生成c#、java、go、c++、lua、python、javascript、typescript、erlang、rust、gdscript 代码
|
||||||
|
支持生成 protobuf(schema + binary + json)、flatbuffers(schema + json)、msgpack(binary)
|
||||||
|
强大的数据校验能力。ref引用检查、path资源路径、range范围检查等等
|
||||||
|
完善的本地化支持。静态文本值本地化、动态文本值本地化、时间本地化、main-patch多地区版本
|
||||||
|
强大灵活的自定义能力,支持自定义代码模板和数据模板
|
||||||
|
通用型生成和缓存工具。也可以用于生成协议、数据库之类的代码,甚至可以用作对象缓存服务。
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
### 在TEngine中Luban工具集位于以下目录
|
||||||
|

|
||||||
|
|
||||||
|
使用案例
|
||||||
|
``` csharp
|
||||||
|
/// <summary>
|
||||||
|
/// 道具配置表管理器。
|
||||||
|
/// </summary>
|
||||||
|
public class ItemConfigMgr: Singleton<ItemConfigMgr>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 道具Table。
|
||||||
|
/// </summary>
|
||||||
|
private TbItem TbItem => ConfigLoader.Instance.Tables.TbItem;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取道具配置表。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemId">道具Id。</param>
|
||||||
|
/// <returns>道具配置表。</returns>
|
||||||
|
public ItemConfig GetItemConfig(int itemId)
|
||||||
|
{
|
||||||
|
TbItem.DataMap.TryGetValue(itemId, out var config);
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
@@ -1,15 +1,2 @@
|
|||||||
# TEngine
|
## 7.流程模块 - ProcedureModule
|
||||||
|
待补充
|
||||||
### 日志记录编辑器下运行
|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
### Win64位包运行
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
### 安卓真机运行
|
|
||||||

|
|
||||||
|
|
||||||
### TODO - IOS环境运行
|
|
BIN
Books/src/3-1-1.png
Normal file
After Width: | Height: | Size: 222 KiB |
BIN
Books/src/3-1-2.png
Normal file
After Width: | Height: | Size: 181 KiB |
BIN
Books/src/3-3-1.png
Normal file
After Width: | Height: | Size: 315 KiB |
BIN
Books/src/3-5-1.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
Books/src/3-5-2.png
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
Books/src/3-5-3.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
Books/src/3-5-4.png
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
Books/src/3-6-1.png
Normal file
After Width: | Height: | Size: 18 KiB |
17
Luban/gen_code_bin_to_project.bat
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
set WORKSPACE=..
|
||||||
|
|
||||||
|
set GEN_CLIENT=%WORKSPACE%\Luban\Luban.ClientServer\Luban.ClientServer.exe
|
||||||
|
set CONF_ROOT=%WORKSPACE%\Luban\Config
|
||||||
|
set DATA_OUTPUT=%ROOT_PATH%..\GenerateDatas
|
||||||
|
|
||||||
|
%GEN_CLIENT% -j cfg --^
|
||||||
|
-d %CONF_ROOT%\Defines\__root__.xml ^
|
||||||
|
--input_data_dir %CONF_ROOT%\Datas ^
|
||||||
|
--output_code_dir %WORKSPACE%/Assets/GameScripts/HotFix/GameProto/GameConfig ^
|
||||||
|
--output_data_dir %WORKSPACE%/Assets/AssetRaw/Configs/bytes/ ^
|
||||||
|
--gen_types code_cs_unity_bin,data_bin ^
|
||||||
|
-s all
|
||||||
|
|
||||||
|
echo ======== 生成配置文件结束 ========
|
||||||
|
|
||||||
|
pause
|