# unit-client **Repository Path**: dzpk_1/unit-client ## Basic Information - **Project Name**: unit-client - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-15 - **Last Updated**: 2026-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 德州扑克客户端 ## 目录结构 .gitlab-ci.yml CI/CD自动化打包配置脚本 .cz-config.js GIT提交协作规范配置 Assets Extensions 放置Unity3D扩展 Modules 放置游戏资源 |__Common 放置通用资源 |__Texture |__Head 放置用于打包Altas的图片资源 |__Fonts 放置字体文件TTF,FNT等等 |__业务模块 |__Animations 放置动画文件 |__UI UI相关动画文件 |__其他 其他相关的动画文件 |__Prefabs 放置所有该业务相关的预制 |__Texture 放置所有图片资源 |__BG 放置大的背景图片,不加入Atlas打包 |__UI 放置sprite altas |__其他 放置其他类型的图资源 Proto Resources Scenes 放置所有场景文件 Scripts |__Editor 编辑器扩展 |__LuaScripts Lua代码 |__libs 放置第三方库和内建库 |__logics 业务逻辑相关 |__common 通用代码 |__consts 常量定义 |__services 服务类定义和管理,对于UI模块来看是属于Model这一块 |__业务模块 根据业务功能划分文件夹 |__utils 工具类 |__Runtime C#核心代码 |__Gizmos Gizmos相关 |__Lua Lua运行环境和工具 |__Native Native接口,提供给上层Api使用,如SDK。 |__Pattern 放置设计模式原型 |__Res 资源管理和版本控制 |__Utils 放置工具类 ## 开发相关 介绍基础业务开发流程。 1. 基础概念 ui.UIView:包含ui节点实例,所有ui元素的操作都在View中进行, View主要成员变量uiGameObject是Root的GameObject组件,uiTransform是Root的Transform组件。 ui.UIScene: 提供一系列场景切换所需要的接口。主要完成<显示loading-加载新场景资源-卸载上一个场景的资源-显示新场景>的过长。并包含一个Window对象。 ui.UIWindow: 窗口类,至少包含一个View作为RootView进行渲染。 ui.UIController: 视图控制类,当视图需要通过Model进行展示和更新的时候需要Controller做桥梁进行数据的同步展示。 Service: 提供基础的数据服务和通信服务。它扮演着Model的角色。 2. 基础的业务文件结构 * 新场景的基础文件结构 ``` logics |__hall |__controller -- 放置视图控制器 |__hall_main_c.lua.txt -- 视图控制类(文件命名以(_c)结尾) |__..._c.lua.txt -- 各种视图控制类 |__view |__hall_main_v.lua.txt -- 视图类(文件命名已(_v)结尾) |__..._v.lua.txt -- 各种视图类 |__hall_main.lua.txt -- 新场景的入口,只有在新的场景时需要,在场景中新建一个空对象附加LuaBehavior并作用该脚本。 |__hall_scene.lua.txt -- 进入新场景前一系列流程,只有在新的场景时需要。 |__hall_window.lua.txt -- ui元素操作,只有在新的场景时需要。 |__..._view.lua.txt -- 提供各式各样的视图类。 services |__hall_service.lua.txt -- 相关模块的通信/数据服务。 ``` * 仅只有View的文件结构 ``` logics |__common |__tipview.lua.txt -- 仅提供继承至ui.UIView类。使用ui.utils.addView(subview, parent); 将其加入到当前场景中。 ``` 3. 生命周期函数调用过程 场景启动的过程 ``` UIScene.loadRes -- 进入场景前,先加载资源(协程中)。 UIScene.unloadRes -- 卸载前一个场景的资源 UIScene.showScene -- 替换场景 UIScene.destroy -- 销毁前一个场景 xxx_main.start -- 新场景的Main脚本执行start UIWindow.ctor -- 创建一个窗口 UIView.ctor -- 创建一个视图 UIController.ctor -- 创建一个视图控制器 UIView.onEnter -- 执行视图的onEnter UIController.onEnter -- 执行视图控制器的onEnter ``` 场景销毁的过程 ``` UIScene.destroy -- 销毁场景 UIWindow.destroy -- 销毁窗口 UIView.onExit -- 执行视图的onExit UIController.onExit -- 执行视图控制器的onExit ``` 4. 预制和UI元素命名要求 统一使用大写开头并以(_)进行分割。 - 预制名称使用: 模块名_功能。如Hall_Main - UI元素命名:UI类型名_功能。如Button_Login 5. 网络通信 当前项目使用lua_socket进行网络通信。 通信协议使用Protobuf3。 libs/quick_tcp.lua.txt -- TCP的简易封装和使用。 utils/net_service.lua.txt -- 管理tpc连接器的创建和获取有效连接器,它可管理多个连接器。 logics/services -- 放置所有相关业务的处理服务。 Service类,是作为所有服务基类,扮演着Model的角色,它提供了: - 提供使用默认连接器进行发包和收包。 - Protobuf的序列化、反序列化和相关处理接口。 - 三种不同收包回调函数类型MSGTYPE_REQUEST(handleRequest)、MSGTYPE_RESPONSE(handleResponse)、MSGTYPE_NOTIFY(handleNotify)。 - 通用包头的创建、SO消息的序列化和反序列化。 ### OOP使用 本项目中OOP使用Quick-cocos中class的库完成OOP的使用。 ``` -- 类声明 local SomeBaseClass = class("SomeBaseClass"); function SomeBaseClass:ctor() -- 构造函数 end function SomeBaseClass:doSomething() print("DoSomething"); end -- 继承用法 local SomeSubClass = class("SomeSubClass", SomeBaseClass); function SomeSubClass:ctor() -- 调用父类方法 SomeSubClass.super.ctor(self); end -- 重载父类方法 function SomeSubClass:doSomething() print("DoSomething"); end ``` ### 在LUA中使用C#的协程 ``` -- 启动一个协程 local co = coli.cs_coroutine.start(function() coroutine.yield(CS.UnityEngine.WaitForSeconds(1)); print("1s after do something"); end); -- 手动停止协程 coli.cs_coroutine.stop(co); ``` ### 资源加载 项目中AssetBundle使用的是引用计数继续管理,当引用计数为0会将AB放入将要释放列表。 直到到达AssetBundle GC时间就会从内存中释放。 ``` -- 加载AssetBundle local co = coli.cs_coroutine.start(function() local loader = coli.resManager.loadAssetBundleAsync(coli.ab.E_Common_Prefabs); while not loader.IsCompleted do coroutine.yield(nil); end if loader.IsSuccess then print("asset bundle load success"); end end); -- 释放AssetBundle引用 coli.resManager.unloadAssetBundle(coli.ab.E_Common_Prefabs); -- 加载Asset local obj = coli.resManager.loadAsset(coli.ab.E_Common_Prefabs, "TipView"); local go = CS.UnityEngine.GameObject.Instantiate(obj); ``` ### 注意事项 * 代码中需要提取用于翻译的字符串或包含中文的字符串禁止使用Lua字符串连接符,一律使用string.format进行连接,并且统一调用gettext方法来获取翻译。 使用方式:gettext("德州")。