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

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

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

|
||||
|
||||
使用案例
|
||||
``` csharp
|
||||
/// <summary>
|
||||
|
@@ -1,4 +1,6 @@
|
||||
## 3-4.对象池模块 - ObjectModule
|
||||
对象池较中量级,在客户端开发中是一个经常使用的技术,技术点我相信大家都懂,这里不过多讨论。
|
||||
|
||||
使用案例
|
||||
``` csharp
|
||||
/// <summary>
|
||||
|
@@ -1,5 +1,115 @@
|
||||
## 3-5.UI模块 - UIModule
|
||||
使用案例
|
||||
``` csharp
|
||||
一个游戏70%都是UI,剩下30%才是GamePlay,所以有一套简洁强大的商业化UI模块以及UI开发工作流将是项目的一大利器,能够提高至少一倍的开发效率。
|
||||
|
||||
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
|
||||
``` 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
|
||||
|
||||
### 日志记录编辑器下运行
|
||||

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

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

|
||||
|
||||
### TODO - IOS环境运行
|
||||
## 7.流程模块 - ProcedureModule
|
||||
待补充
|
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 |