# Gtframework **Repository Path**: allenxzp_admin/gtframework ## Basic Information - **Project Name**: Gtframework - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-27 - **Last Updated**: 2024-03-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## GTFramework 一套用于流程化,剧情化的任务执行框架。可用于通用的3D,VR等项目 ## 一.Demo目录介绍 Artwork:美术资源目录,包含模型,贴图,特效等 Game Main:工程资源目录,包含预制体,配置表,场景,声音等 GTFramework:GT框架代码目录,包含核心框架必须的一些plugins和代码 HybridCLRData:热更生成目录,不需要可删除 Plugins:工程需要的插件目录,包括Dotween,NodeGraphProcessor,Odin。 Resources:OpenXR需要的一些配置 Samples:XR Interaction Toolkit插件示例 Setting:URP相关配置 StreamingAssets:资源Bundle目录,导出工程时需要打包拷贝到此目录 XR,XRI:OpenXR相关目录 ## 二.ConfigWindow介绍 ### 1.Setting配置 1.通过菜单GT/ConfigWindow打开配置面板 2.点击Setting页签配置必须的目录: 配置表等根目录 Comm仓库目录:./Common excel的导出json目录: ExcelOutput Path:GameMain/DataTables .proto文件导出pb目录 ProtoOutput Path:GTFramework/Scripts/Hotfix/Runtime/Network/Packet 配置表实体类目录 DataTable Code Path:GTFramework/Scripts/Hotfix/Runtime/DataTable ### 2.Excel 工具 支持一键刷新,选择,导出Excel数据和实体类 配置表统一放在工程根目录的Config目录下,可以根据自己需要添加删除 当前配置说明 AudioConfig:声音配置 NpcConfig:游戏NPC配置 TaskConfig:任务流程配置 ExamConfig:考试试题配置(可选) Game Config:游戏通用配置(可选) ### 3.Proto工具 支持一键刷新,导出.proto文件 ### 4.TTS工具 支持从TaskConfig文件。提取文本,配置声音类型,一键增量导出所有音频,删除无用音频 # 三.TaskGraph介绍 ### 1.创建TaskGraph文件 1.通过鼠标右键>Create>GraphProcessor>TaskGraph创建Graph文件 2.所有的TaskGraph文件建议统一放置到GameMain/NodeGraphs目录下 3.每个TaskGraph对应一个Common/excels/TaskConfig.xlsl文件,excel文件需要自己创建,复制Demo的即可。 4.TaskConfig编号要和TaskGraph编号一致,比如:TaskConfig103->TaskGraph103 5.Graph文件和Excel文件支持双向导入,数据互通 6.场景的SceneData中Graph需要指定TaskGraph文件,代表当前场景加载哪一个TaskGraph ### 2.TaskGraph编辑器面板 1.InitScene:初始化场景必须的SceneData目录 2.Reload:重新加载Graph的节点游戏对象 3.Format:格式化节点位置,建议节点比较乱时再点。 4.保存:保存节点信息到excel,同时导出运行时json。快捷键:Alt+S 5.导入Excel:从excel配置导入数据节点到Graph文件 6.TaskGraphEditor面板开发是基于Odin插件和NodeGraphProcessor插件。 ### 3.TaskGraph节点介绍 在TaskGraph面板右键点击CreateNode,或者点击空格按钮,即可开始创建Node Graph插件自带的节点不能使用,必须使用Task目录下的节点,因为我们数据方式不同。 Task目录下,目前支持的节点有: 1.BranchSelect:多人指定人物分支 2.BranchTouch:选择触摸物体分支(触摸不同物体走不通分支) 3.BranchUI:选择UI分支(ui页面的选择按钮,选择不同按钮,走不同分支) 4.If:条件分支(条件满足走true分支,不满足走false分支) 5.Switch:switch分支(条件必须是int类型,数值是几就走第几个分支) 6.KeyNode:关键节点,用于定位和跳转 7.JumpNode:跳转任务节点,可以跳转到指定KeyNode节点 8.WaitUntil:阻塞节点,直到条件达成 9.Task:通用多目标任务节点,最常用节点 ## 四.TaskConfig参数介绍 ## 二.任务参数 | id | PrevId | NextID | Type | Branch | Rect | Desc | AutoFinish | Delay | UserData | Goals | | ---- | :------ | :----- | :----- | :----- | :------ | :----- | ---------- | ------ | --------- | ------------ | | 任务编号 | 前置任务 | 后置任务 | 任务类型 | 分支id | Graph位置 | 任务描述 | 自动完成 | 自动完成延迟 | 自定义数据 | 目标列表 | | int | int\[] | int\[] | string | int | int\[] | string | bool | float | string\[] | string\[]\[] | ### id 任务编号,无需手动编辑,自动配置, PrevId 节点的前置任务 NextId 节点的后置任务 Type TaskNode的类型 Branch 节点分支编号 Rect TaskNode节点在Graph中的位置存储,用于excel导入Graph使用 ### Desc 任务描述,最好简介明了的说清楚当前任务内容。 ### AutoFinish自动完成 AutoFinish:是否自动完成 Delay:延迟完成任务 常用于设置位置,播放动画之类的无操作指令 ### UserData自定义节点数据 用于特殊TaskNode节点的特殊自定义属性,没有可空 ### Goals目标 一条任务的目标数组,可以配置单个或多个目标,按照顺序执行,知道所有的Goals目标全部处于完成状态,当前Task才会完成,并执行下一个任务。 #### 源数据示例: ```c //p2点展示对话 {Talk,0,NpcTalk,p2,,} //高亮提示点击lock1,lock2任意对象,播放转动动画 {Touch,0,Or,True,lock1|lock2,Animate:rotate} //高亮MeterDoor,粗细10,颜色Green {Hilight,1,MeterDoor,10,Green} //展示传送点tele1,触发后进入ToolsScene场景 {Teleport,0,tele1,Scene,库房,,ToolsScene} //播放特效声音2004(滴滴声),2s自动结束 {Audio,0,Effect,2004,2} //在p4点展示ArrowPanel界面 {UI,0,Arrow,p4} //对象Player移动到p2点 {Object,1,Player,MoveTo:p2} ``` #### 类型描述 | Key | 类型 | 参数列表 | 描述 | | --------- | ---- | ---------------------------------- | ------------------- | | Panel | 对话 | {uiname,point,#cmds} | 对话类,界面类 等UI展示 | | Touch | 点击 | {type(or,and,sync),items\[],#cmds} | 拾取,触摸,点击,射线 等类型 | | Hilight | 高亮 | {enable,items\[],width,color} | 3D物体的外轮廓高亮 | | Teleport | 传送点 | {type\[l,t,s],Id} | VR传送点,位置传送,出发,场景切换 | | Audio | 声音 | {type\[e,a,m],id,loop} | 播放背景音乐,音效等,或者指定人物说话 | | Object | 对象函数 | {objects\[],#cmds} | 场景Object执行特定函数命令 | | Condition | 条件目标 | {key,value} | 用于存储key-value类型键值对 | ## 五.场景配置 ### 1.场景对象 场景对象需要操作的必须添加SceneObject组件 场景对象需要交互的,勾选Interactable ### SceneObject:所有场景对象的基类 ItemObject:物品类基类 PointObject:物体点信息类 ### EquipObject:手持工具装备类,用于触碰操作, MultiMeter:万用表 TestPencil:电笔 ### RoleObject:角色类基类 Npc:Npc类 VRPlayer:VR主角 PCPlayer:PC主角 ### 2.场景结构 场景要想运行Task任务,必须包含一下结构,可以通过TaskGraph的InitScene一键创建 SceneData:场景所有物体对象数据管理,添加组件SceneObjetData PointData:场景所有点信息数据管理,添加组件PointObjectData Npcs:示例,npc存放节点 System:系统npc,必须有,用于通用命令执行 Tools:示例,工具存放节点 ..... XR Origin:VR控制器节点,需要添加组件VRMainPalyer ## 六.Command命令 项目的所有操作均使用命令模式触发: 1.方便事件函数的统一模块化, 2.方便任务指令的回滚, 3.方便配置 ### 命令介绍 #### 1.通用命令,任意目标 CommonCommand\:ICommand\ Animate:播放动画 Active:控制激活 Enable:控制组件Enable ActiveChild:子节点激活 State:状态,通用任意物体的任意种状态 Layer:控制物体层级 Hilight:高亮控制 Position:设置位置 Rotate:设置旋转 Scale:设置缩放 MoveTo:移动到,使用Dotween播放 Parent:设置父节点 Display:屏显控制 #### 2.物体命令,ItemObject目标 Alpha:设置透明度, Color:设置颜色 Collider:设置碰撞 Rigidbody:设置刚体 LoadItem:加载子物体 UnloadItem:卸载子物体 Lable:显示文本提示,用于提示拿取工具 LableMark:显示文本提示,可勾选,用于工器具选择 #### 3.表记命令,MeterObject目标 Button:表记的虚拟按钮 ID:表记的硬件id显示 #### 4.角色命令,RoleObject目标 LoadEquip:加载装备 UnLoadEquip:卸载装备 Panel:显示UI Dress:穿戴,手套 UnDress:脱下,手套 #### 5.无目标命令 Audio:播放声音 FlyWord:场景飞字提示 CreateObj:创建3D物体 LoadScene:加载场景 TaskJump:任务跳转 ## 七.任务快进和回退 任务快进快退,可以使用TaskGraph中JumpTask节点控制。 JumpTask有两种模式: Direct:直接跳转,没有快进快退 Rollback:有任务回滚和快进 代码原理: 快进:TaskManager.ForwardState() 回退:TaskManager.BaseTask() 框架支持快进和回退功能,但是如果要扩展命令,记得把do和undo逻辑写完。 示例: ```c //移动命令 private ECommandReply CheckMoveTo(MoveToCommand cmd, bool undo) { cmd.Owner.DOKill(true); if (undo) { cmd.Owner.transform.DOMove(cmd.Origin.Position, cmd.Duration); cmd.Owner.transform.DORotate(cmd.Origin.Rotation, cmd.Duration); } else { cmd.Owner.transform.DOMove(cmd.Target.Position, cmd.Duration); cmd.Owner.transform.DORotate(cmd.Target.Rotation, cmd.Duration); } return ECommandReply.Y; } ``` ## 八.UI框架 GT使用的是GameFramework框架,UI采用了GF的UI框架进行扩展 1.3DUI基类UGUI3DForm 2.TaskGraph展示的类,建议统一集成自BaseTaskForm 3.所有UI统一采用0.001倍缩放进行配置,方便所有UI的大小统一控制 4.所有UI文本统一使用TextMeshProUGUI显示文本,保持字体和显示的一致性。