CockleBurs:一个功能全面的 Unity 开源游戏开发框架
CockleBurs:一个功能全面的 Unity 开源游戏开发框架
CockleBurs 是一个功能全面的 Unity 完全免费开源游戏开发框架,旨在提高开发效率,简化游戏架构,实现模块化、可扩展的设计。它通过对 Unity 原生功能的扩展和封装,提供了多种高效工具和系统,涵盖了角色控制、生命周期管理、UI 定制、事件系统、网络功能等多方面内容。
核心角色与控制系统
在 CockleBurs 框架中,设计了四种核心角色,每种角色都有其独特的功能和行为逻辑,能够满足不同类型的游戏开发需求。
核心角色
- 旁观者 (Spectator):负责观战和观察角色动作,没有直接控制的权限,通常用于镜头管理或观战模式。
- 控制器 (Controller):作为游戏角色的控制逻辑,处理输入和角色的行为。可以通过继承实现 AI 或玩家控制器。
- 棋子 (Pawn):游戏中的实际对象,代表角色实体,可以是可控角色或 AI 角色。
- 角色控制器 (PlayerController):控制具体的玩家角色,通过与Pawn和Controller交互,实现角色的控制 移动、攻击等功能。
角色类实现
- BPawn:代表基础的游戏角色,包含了角色的基本行为和属性。
- BController:负责管理Pawn的输入与行为,通过脚本扩展来实现自定义行为。
- PlayerController:状态机脚本系统,支持通过面板配置新增Action(动作),可以扩展不同的行为逻辑,自带基础Action 走、跑、跳等。
- NetworkPawn(待定):提供网络同步功能的基础Pawn
控制系统特征功能
- PlayerController 的状态机模式:开发者可以使用Action系统来为角色配置不同的行为。通过状态机机制,PlayerController能够动态切换角色的行为状态,例如从行走状态切换到跑步状态,或从地面状态切换到跳跃状态。
- Controller 基于 CC(Character Controller)实现:使用 Unity 的CharacterController组件来处理物理碰撞和角色移动。开发者可以继承Controller类来创建 AI 控制器或玩家控制器,统一使用Move方法来处理角色的移动逻辑。
- PlayerCameraManager:管理控制器的摄像机以及旁观者模式下的摄像机视角,提供摄像机切换功能,确保角色在不同场景中的视角流畅过渡。
其他核心
- CLz_MonoBehaviour:替代了 MonoBehaviour,提供了额外的功能,如缓存的 transform 和脚本图标
- Editor:用于管理Behaviour 的检视窗口,使得检视器更加高效和定制化。 新的检视器属性(Inspector Attributes):为 [SerializeField] 提供了额外的功能,如只读模式、图层和标签下拉菜单、HDR 颜色等,使得在编辑器中的属性展示更加直观和灵活。 新的检视器属性
- 提供属性:允许对属性进行自定义展示,包括标题、提示工具(Tooltips)、滑块、文本区域等, Condition Attributes):这些属性可以根据特定条件控制字段和属性的可见性和可编辑性 提供了一个简单高效的单例模式实现,方便管理全局唯一的对象实例。
- LazyBehaviour:实现了延迟加载单例模式,在需要时才会初始化单例实例,以提高性能。
- RectTransform:使得对 RectTransform 属性的访问更加简便,并且表现与编辑器中的 RectTransform 面板一致。
生命周期管理
CockleBurs 提供了一个独特的生命周期管理系统,将 Unity 的方法拆分为2个生命周期回调函数,使开发者可以更精确地控制组件的初始化和更新过程。这种设计能够提高组件的可控性,适用于需要复杂初始化逻辑或有特殊更新需求的游戏对象。
生命周期回调函数
以下是 CockleBurs 生命周期中的主要回调函数:
- OnComponentEnable():组件启用时调用,类似于 Unity 的OnEnable(),用于处理组件的启用逻辑。
- OnInitialization():初始化时调用,用于执行对象的初次设置和数据准备。
- OnStart():启动时调用,与 Unity 的Start()类似,用于开始组件的核心逻辑。
- OnPreUpdate()和OnUpdate():Update()之前和每帧更新时调用,负责处理对象的帧更新逻辑。
- OnPreFixedUpdate()和OnFixedUpdate():FixedUpdate()之前和固定时间间隔更新时调用,用于处理物理更新或其他定时事件。
- OnPostFixedUpdate()和OnPostLateUpdate():用于在FixedUpdate()或LateUpdate()之后执行的操作。
- OnSceneLoaded()和OnSceneUnloaded():场景加载或卸载时调用,用于处理场景切换的逻辑。
通过这种细化的生命周期管理,CockleBurs 可以应对复杂的场景管理和对象生命周期控制需求。
CockleBurs Assembly
是一个程序集缓存系统,通过对程序集的缓存处理
控制台系统
是一个功能强大的控制台系统,支持实时调用静态方法、修改静态变量等功能。它为开发者提供了强大的调试工具,简化了游戏开发过程中的调试和测试工作。
- GameDebug:允许开发者使用颜色标注的日志输出,增强了调试信息的可读性。GameDebug还可以同时显示在 Unity 控制台和框架的内置控制台中 还提供类似ue左侧显示蓝色Debug。
- 静态方法调用和变量修改:开发者只需添加标识,即可在控制台中实时调用静态方法或修改静态变量,从而在游戏运行时进行灵活的调试操作。
- GUI绘制
- 回车确定输入
- 根据输入显示建议
- 上下键可以将建议输入到输入框中
- Tab键可以补充输入的
旧版本
游戏管理器与初始化
类是 CockleBurs 框架的核心管理器,它统一了所有系统和 API 的访问接口,开发者可以通过语法快速调用各种功能。这极大地简化了 API 的调用流程,提供了更为统一的代码结构。
- GameInitializer:负责在游戏启动时初始化所有系统和管理器,确保游戏在运行时一切准备就绪。
UI 定制与扩展
提供了丰富的 UI 定制功能和扩展,帮助开发者更轻松地实现复杂的 UI 效果。
- UI 面板过渡:框架内置了简单的 UI 面板过渡效果,支持面板的平滑显示和隐藏。
- GUI 扩展封装:对 Unity 的原生 GUI 系统进行了封装,提供了更加便捷的 API,样式。
- Imge形状改变:允许开发者通过简单的配置改变 UI 图像的形状,而不需要复杂的自定义组件。
- 程序化曲线UI(待定):跳动,特殊的效果
事件系统与状态机
CockleBurs 框架包含了一个功能强大的事件系统和状态机系统,能够帮助开发者轻松管理游戏中的各种事件和复杂的行为逻辑。
事件系统
框架提供了四种类型的事件系统,支持泛型、枚举等不同类型的事件注册与触发:
- Generic Events:通用事件,适用于大多数场景。
- Enum Events:基于枚举类型的事件系统,方便管理和触发特定类型的事件。
- EventGen:提供事件生成的功能,使得事件的创建和管理更加便捷。
关于监听事件
旧版本新版本都是用Game.链式调用
状态机系统
CockleBurs 的状态机系统允许开发者管理游戏中的状态转换。这种状态机系统非常适合处理复杂的角色行为、游戏关卡逻辑等场景。
版本管理
是一个唯一的 ScriptableObject,用于版本管理与检测。在大型游戏开发项目中,确保不同版本之间的一致性是至关重要的。通过系统,开发者可以轻松管理项目的版本控制,确保游戏在不同平台和版本之间的兼容性。
系统模块
提供了一系列系统模块,用于扩展 Unity 引擎的功能:
- Animator:包括AnimatorHash、EventOnEnter、PlaySoundOnEnter、AnimatorHashDebugger
- Asset:基于Addressables和AssetBundle的资源管理系统 AssetBundle加载地图和mod
- Audio:基于对象池的音频系统,简化了音效调用
- ComponentSave:反序列化保存组件的变量,用于单例全局管理比 如角色基础数值 包含:JSON,SteamCloud,PlayerPrefs,Xml,Binary
- Event:分发Event管理器 提供了四种事件类型,支持泛型与枚举编辑器Event配置
- Localization:本地化系统,支持LocalizationSystem和LocalizeTMProFontEvent
- MapScene:基于Addressables, ScriptableObject 的场景管理系统
- ObjectPool:对象池管理,提升对象的复用效率
- StateMachine:状态机系统,用于管理复杂的行为逻辑
- Tag:基于 ScriptableObject 的自定义标签系统,比 Unity 官方标签系统更高效
- TaskScheduler:简单的任务调度系统
- Time:类似于 Unreal Engine 的Timer
ComponentSave
Animator
CocKleBurs.GameFrameWork.Editor
基础:全深黑主题 ,UnityEditorDarkMode边框黑和面板全黑 AssetBundleBuilder打包面板,ManualRefresh,TransPositionEditor,ScenePreview,CLZ可视化编程(已删除),行为树待定,EventEditor,PrefabEditor,SetDataEditor,SwitchToSceneView,UniqueHashIdEditor GameDebugEditor:你可以控制哪些GameDebug显示在编辑器里
CocKleBurs.Utils
CodeGen,Data,DataStructure,Interpolation,Quad,Serializer,Attributes,PathUtility,PrefabData
PathUtility:在这里你可以找到所有的编辑器扩展的路径,保存的路径等等 Attributes:可以看到所有的标识 Quad:提供基础的QuadTree Interpolation:提供SnapshotInterpolation,和简单的过渡
特殊: CocKleBurs GameFrameWork 面板 :配置Tag Event,预制体,SetData,基础预制体,场景管理,对象特征。。。。
CocKleBurs.Data
二进制,Steam,Xml等等...
TestRunne
目前只有一个对AdvancedTimerTests
团队协作
CocKleBurs.Notion提供指引脚本或者介绍 点击按钮跳转网页Notion指定页面介绍
未来增加Notion的数据库SO封装,增加一个汇报Bug给开发者的数据库
CocKleBurs.Plugins
Harmony,Facepunch
第三方(待定):SteamBuildUploader,UnityFolder
CocKleBurs.QualitySettings
开箱即用的画面设置(HDRP)将支持URP 和内置管线
CocKleBurs.Resources
包含一些Icons
CocKleBurs.Settings
包含一些编辑器保存
CocKleBurs.Steamworks
开箱即用的P2P 大厅 VoiceChat 专项服务器 包含一些Example对于Steam ChatManager FriendDetailsPanel LobbiesListManager SteamRelayServer 等等
提供SO架构
包含State Machines 常见Events Float,Int,Vector3,Vector2 和自定义
关于网络
关于网络 CocKleBurs框架有FishNet版本和Netick版本
那么他们有不同的特征:
FishNet:
CocKleBurs.Transport:KcpTransport,FishyUnityTransport,Edgegap KcpTransport,Voice,NetworkAudioSync,NetworkParticleSystem,EOSTransport ChatBehaviour,SimpleBandwidthDisplay不基于事件
Sync:SyncAudio,SyncCollectionViewer,SyncRenderer,SyncUnityEvent NetworkDiscoveryHud,NetworkDiscovery 对于编辑器扩展包括IL你可以看到每个RPC从哪里调用那个方法每个RPC的字节和同步变量的字节
提供不是Pro版本的延迟补偿 提供基础的组件同步物理 类似Mirror 等等 开箱即用
广播的二次封装
几个CCU测试的示例 和一个坦克示例 提供Oninput方法类似Fusion
示例
FishNet快速管理多个管理器 面板
对于FishNet和Netick都有的:
BaseEnity和NetworkEntity
CKBNetwork 提供对网络场景加载功能的简化访问 包括生成,场景跳转 NetworkRunner,NetworkEvents 类似Fusion的使用方式
编辑器效果更好的NetworkObject
Netick提供:
提供用法像FisnNet的访问方式和一些简化访问
其他(待定)
RuntimeGizmoAPI Replay回放API
CocKleBurs.Example
包含常见使用CocKleBurs GameFrameWork示例 ScriptTemplates
关于CocKleBurs框架
将会有一个完整流程使用CocKleBurs的多人FPS游戏验证框架内的所有功能,当完成后边开源集成进框架内,最后阶段便是可生产状态