分享一个好玩的:一次提示词让AI同时开发双引擎框架
既然是两个引擎的代码要同时生成,我就要把这两个引擎的框架代码做好规划,统一的放到一个文件夹下,让Cursor的工程关联到这个文件夹。在你的设计下,使用AI 写框架,具体代码不用自己写,能节约大家的时间,提升工作效率。对框架来说目录结构很重要,当用AI把大部分的框架的核心接口都生成出来后,我们进一步对目录结构做好规范,并同步设计思路给到AI,让它接下来的工作更"懂你",符合你的要求。AI 要用的好,
最近玩AI上瘾了,之前发布的《AI写游戏框架系列课程》正式开启交付与更新,之前的规划是每个引擎都生成一次。后来我想能否把Unity/Cocos双引擎框架合并到一个项目,让AI根据提示词一次性生成两个引擎的代码框架。没有想到结果令人意外:太好玩了。我采用的AI编程工具为Cursor。
1: AI 同时开发双引擎框架的准备
step 1: 创建双引擎目录结构
既然是两个引擎的代码要同时生成,我就要把这两个引擎的框架代码做好规划,统一的放到一个文件夹下,让Cursor的工程关联到这个文件夹。我先创建了AIGameFramework文件夹,然后在AIGameFramework文件夹下分别创建了两个项目工程:
UnityGameFramework: Unity版本为 2022.3
CocosGameFramework: Cocos Creator 3.8.6

打开Curor的Open Project,把文件夹AIGameFramework作为工程的文件夹。
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀
step 2: 根据设计者意图来做好根目录结构。
AI 要用的好,需要人来给他指明一些方向,所以我们在使用AI写框架的时候,先给他指明一些基本的方向,目录结构就是很重要的一环。我们先创建根目录结构:
Boot: 用来存放启动代码,启动资源,热更新检查下载等代码;
Framework: 用来存放游戏框架的代码,框架代码,编辑器扩展代码;
Game: 用来存放游戏逻辑相关的资源,代码,编辑器扩展代码;
step3: 制作好启动场景
分别创建一个Startup场景,作为游戏的启动场景,Startup场景下放一个Boot节点,用来作为启动代码的挂载节点。


2: 下提示词,说明设计意图与需求
【第1轮提示词】: 我想写一个游戏框架,这个框架的使用规范与方式,接口等,最大限度的同时支持Cocos, Unity。结合这个意图,分析整个项目的目录结构。

【生成分析】在生成文档时,我发现它理解错误了,其实我并不需要一个引擎适配层。通常情况下只要框架的使用方式,接口保持一致即可,并不需要引擎适配层,因为TypeScript与CSharp 无法做到真正的一次开发多引擎运行。赶紧停止生成。
【第2轮提示词】: 你理解错误我的意思,我是要把两个引擎分别独立开发,Unity是Unity, Cocos是Cocos,只是最后框架代码的结构,接口,使用方式一致。请重新调整你的思路。





【结果分析】初步理解了我的设计意图,设计想法,并给出了基本接口,命名规范等建议与文档。接下来我们就要先确定命名规范,让框架的两个引擎使用同样的命名规范。
【第3轮提示词】:
很好,接下来我们首先规定命名规范:
类文件名:使用 Unity方式
方法名:使用Unity的方式
接口文件: I开头
属性名:使用Unity的方式
私有字段:使用Cocos TypeScript方式

【结果分析】:本轮AI已经完全了解的代码的命名规则。接下来可以让他先生成一个初步的结构,我们来一步步调整。
【第4轮提示词】: 很好,先按照你的思路定义好命名规范与结构,先生成代码与接口,具体实现先不做。

【结论分析】:先暂时把框架代码模块先都生成出来了,具体的实现,我们后续一个个模块的调整。它分为:
1: Core(IModule核心机制),主要生成了一个基于IModule的管理,把每个框架的模块规定为一个IModule。
2:Module,游戏框架的核心模块:声音,资源,UI,网络等。
3: Utility: 工具性质相关的代码,日志,节点池,Timer等
这些虽然与我的设计目标有些出入,但是先让它生成,后续我们一个个机制的修改。先完整重要的IModule机制。
【第5轮提示词】:修改IModule的接口,把Update名字 改成OnUpdate,以用来区分开来引擎unity/cocos的Update接口。
【第6轮提示词】:完成ModuleManager代码里面的: Initialize/RegisterModule/GetModule/UpdateModules/ShutdownAll函数代码逻辑。
using System.Collections.Generic;using UnityEngine;namespace Framework.Core{/// <summary>/// 模块管理器/// </summary>public class ModuleManager{private Dictionary<System.Type, IModule> _moduleDict;private List<IModule> _moduleList;/// <summary>/// 初始化模块管理器/// </summary>public void Initialize(){_moduleDict = new Dictionary<System.Type, IModule>();_moduleList = new List<IModule>();}/// <summary>/// 注册模块/// </summary>/// <typeparam name="T">模块类型</typeparam>/// <param name="module">模块实例</param>public void RegisterModule<T>(T module) where T : class, IModule{if (module == null){UnityEngine.Debug.LogError($"[ModuleManager] 尝试注册空模块: {typeof(T).Name}");return;}System.Type moduleType = typeof(T);// 检查模块是否已注册if (_moduleDict.ContainsKey(moduleType)){UnityEngine.Debug.LogWarning($"[ModuleManager] 模块已存在,将被替换: {module.ModuleName}");_moduleList.Remove(_moduleDict[moduleType]);}// 注册模块_moduleDict[moduleType] = module;_moduleList.Add(module);// 初始化模块module.Initialize();UnityEngine.Debug.Log($"[ModuleManager] 模块注册成功: {module.ModuleName}");}/// <summary>/// 获取模块/// </summary>/// <typeparam name="T">模块类型</typeparam>/// <returns>模块实例</returns>public T GetModule<T>() where T : class, IModule{System.Type moduleType = typeof(T);if (_moduleDict == null || !_moduleDict.ContainsKey(moduleType)){UnityEngine.Debug.LogWarning($"[ModuleManager] 模块未注册: {moduleType.Name}");return null;}return _moduleDict[moduleType] as T;}/// <summary>/// 更新所有模块/// </summary>/// <param name="deltaTime">帧间隔时间</param>public void UpdateModules(float deltaTime){if (_moduleList == null || _moduleList.Count == 0){return;}// 遍历所有模块并调用 OnUpdatefor (int i = 0; i < _moduleList.Count; i++){if (_moduleList[i] != null){try{_moduleList[i].OnUpdate(deltaTime);}catch (System.Exception e){UnityEngine.Debug.LogError($"[ModuleManager] 模块更新失败: {_moduleList[i].ModuleName}, 错误: {e.Message}");}}}}/// <summary>/// 关闭所有模块/// </summary>public void ShutdownAll(){if (_moduleList == null || _moduleList.Count == 0){return;}// 按相反顺序关闭模块(后注册的先关闭)for (int i = _moduleList.Count - 1; i >= 0; i--){if (_moduleList[i] != null){try{_moduleList[i].Shutdown();UnityEngine.Debug.Log($"[ModuleManager] 模块关闭成功: {_moduleList[i].ModuleName}");}catch (System.Exception e){UnityEngine.Debug.LogError($"[ModuleManager] 模块关闭失败: {_moduleList[i].ModuleName}, 错误: {e.Message}");}}}// 清空所有模块_moduleList.Clear();_moduleDict?.Clear();UnityEngine.Debug.Log("[ModuleManager] 所有模块已关闭");}}}
【分析结论】:完成设计需求。
3:重新规范设计思路
对框架来说目录结构很重要,当用AI把大部分的框架的核心接口都生成出来后,我们进一步对目录结构做好规范,并同步设计思路给到AI,让它接下来的工作更"懂你",符合你的要求。
之前我们是分为Boot, Framework, Game三个根目录,然后AI帮我们在Framework下自动生成了框架接口代码与结构。接下来我们再来细化你需求。
Boot/Framework/Game文件夹下我们要分:
AssetsPackage: 用来存放我们的资源相关;
Runtime: 用来存放我们运行时的代码;
Editor: 用来存放我们编辑器扩展相关代码;
3rd: 用来存放我们的使用的第三方的库。
我们要把这个设计意图,告诉AI,并让它同步,然后让它调整代码。
【本轮提示词】
整理项目的目录结构,在Boot目录下,创建3个文件夹AssetsPackage,Editor, Runtime三个文件夹。AssetsPackage用来放资源,Editor用来放编辑器模式下的扩展代码,Runtime用来放运行时框架的代码。
整理项目的目录结构,在Framework目录下,创建4个文件夹:AssetsPackage,Editor, Runtime,3rd。AssetsPackage用来放资源,Editor用来放编辑器模式下的扩展代码,Runtime用来放运行时框架的代码,3rd用来存放第三方代码与库。把之前生成的代码与目录,结构不变,整体移动到Runtime文件夹下。检查刚才移动的所有代码,确保引用路径等,正确,无语法错误。
整理项目的目录结构,在Game目录下,创建4个文件夹:AssetsPackage,Editor, Runtime,3rd。AssetsPackage用来放资源,Editor用来放编辑器模式下的扩展代码,Runtime用来放运行时框架的代码,3rd用来存放第三方代码与库。

4: 框架启动流程的实现
接下来设计Boot代码,Boot启动流程的核心关键主要有以下步骤:
(1)热更检查版本与更新;
(2)初始化游戏框架 ;
(3)进入到游戏GameApp的初始化流程逻辑;
【本轮提示词】:
在Boot/Runtime文件夹下,新建一个Boot组件代码,该代码将要挂载到Startup场景中的Boot节点。Boot组件代码,
接口1:热更相关的接口,检查版本与资源更新,预留接口,暂时不实现。
接口2: 初始化Framework下的游戏框架与模块。
接口3:初始化游戏的GameApp, 添加GameApp组件到Boot节点下,并调用它的初始化接口。
在Boot组件开始运行的时候,先调用接口1,完成后调用接口2,再调用接口3,完成初始化。
修改代码,删除掉Framework/Runtime/Core/GameManager代码,把里面的ModuleManager放到Boot中。做好相关的代码调整,直接在Boot中来包含ModuleManager。
修改Boot代码,Start 启动的时候,把它所在的节点,变成永不删除的节点
【结论分析】:完全实现了我的Boot的设计意图,代码如下:
namespace Boot.Runtime{/// <summary>/// Boot 组件(挂载到 Startup 场景的 Boot 节点)/// </summary>public class Boot : MonoBehaviour{private ModuleManager _moduleManager;private GameApp _gameApp;private async void Awake(){// 将 Boot 节点设置为永不删除(跨场景保留)DontDestroyOnLoad(gameObject);// 按顺序执行初始化流程await InitializeHotUpdate(); // 接口1:热更新检查InitializeFramework(); // 接口2:初始化框架InitializeGameApp(); // 接口3:初始化游戏应用}private void Update(){// 更新所有模块if (_moduleManager != null){_moduleManager.UpdateModules(Time.deltaTime);}}/// <summary>/// 接口1:热更新相关接口(检查版本与资源更新)/// </summary>/// <returns>更新任务</returns>private async Task InitializeHotUpdate(){// TODO: 实现热更新检查逻辑// 1. 检查版本// 2. 检查资源更新// 3. 下载更新资源UnityEngine.Debug.Log("[Boot] 热更新检查完成");await Task.CompletedTask;}/// <summary>/// 接口2:初始化 Framework 下的游戏框架与模块/// </summary>private void InitializeFramework(){// 初始化模块管理器_moduleManager = new ModuleManager();_moduleManager.Initialize();UnityEngine.Debug.Log("[Boot] 框架初始化完成");}/// <summary>/// 接口3:初始化游戏的 GameApp/// </summary>private void InitializeGameApp(){// 添加 GameApp 组件到 Boot 节点下_gameApp = gameObject.GetComponent<GameApp>();if (_gameApp == null){_gameApp = gameObject.AddComponent<GameApp>();}// 调用 GameApp 的初始化接口_gameApp.Initialize();// 将 GameApp 注册到模块管理器if (_moduleManager != null){_moduleManager.RegisterModule(_gameApp);}else{UnityEngine.Debug.LogError("[Boot] ModuleManager 未初始化,无法注册 GameApp");}UnityEngine.Debug.Log("[Boot] GameApp 初始化完成");}private void OnDestroy(){// 关闭所有模块if (_moduleManager != null){_moduleManager.ShutdownAll();}}}}
import { _decorator, Component, director } from 'cc';const { ccclass, property } = _decorator;import { ModuleManager } from '../../Framework/Runtime/Core/ModuleManager';import { IModule } from '../../Framework/Runtime/Core/IModule';import { GameApp } from '../../Game/Runtime/GameApp';/*** Boot 组件(挂载到 Startup 场景的 Boot 节点)*/@ccclass("Boot")export class Boot extends Component {private _moduleManager: ModuleManager;private _gameApp: GameApp;protected async onLoad(): Promise<void> {// 将 Boot 节点设置为永不删除(跨场景保留)director.addPersistRootNode(this.node);// 按顺序执行初始化流程await this.InitializeHotUpdate(); // 接口1:热更新检查this.InitializeFramework(); // 接口2:初始化框架this.InitializeGameApp(); // 接口3:初始化游戏应用}protected update(deltaTime: number): void {// 更新所有模块if (this._moduleManager) {this._moduleManager.UpdateModules(deltaTime);}}/*** 接口1:热更新相关接口(检查版本与资源更新)* @returns 更新任务*/private async InitializeHotUpdate(): Promise<void> {// TODO: 实现热更新检查逻辑// 1. 检查版本// 2. 检查资源更新// 3. 下载更新资源console.log('[Boot] 热更新检查完成');}/*** 接口2:初始化 Framework 下的游戏框架与模块*/private InitializeFramework(): void {// 初始化模块管理器this._moduleManager = new ModuleManager();this._moduleManager.Initialize();console.log('[Boot] 框架初始化完成');}/*** 接口3:初始化游戏的 GameApp*/private InitializeGameApp(): void {// 添加 GameApp 组件到 Boot 节点下this._gameApp = this.getComponent(GameApp);if (!this._gameApp) {this._gameApp = this.addComponent(GameApp);}// 调用 GameApp 的初始化接口this._gameApp.Initialize();// 将 GameApp 注册到模块管理器if (this._moduleManager) {this._moduleManager.RegisterModule(this._gameApp);} else {console.error('[Boot] ModuleManager 未初始化,无法注册 GameApp');}console.log('[Boot] GameApp 初始化完成');}protected onDestroy(): void {// 关闭所有模块if (this._moduleManager) {this._moduleManager.ShutdownAll();}}}
END
在你的设计下,使用AI 写框架,具体代码不用自己写,能节约大家的时间,提升工作效率。后续最终我们会把该框架在在Github与码云上开源,欢迎大家来使用。(虽然是AI写的,但是是我的意图)
需要学习《AI开发双引擎》课程的同学,可以来参加报名,今天最后一天。
《AI游戏开发系列》于2026年正式开始同步更新。本次更新内容为《AI搭建自己的游戏项目通用框架与实战(Cocos/Unity双引擎)》。
课程目录:
第001节: 下提示词,让AI清楚游戏框架的设计思路与原则;
第002节: 代码设计与AI生成:游戏框架的启动流程;
第003节: 代码设计与AI生成:游戏的资源管理模块;
第004节: 代码设计与AI生成:游戏的事件订阅与发布模块;
第005节: 代码设计与AI生成:游戏的Excel表格数据模块;
第006节: 代码设计与AI生成:游戏的定时器模块;
第007节: 代码设计与AI生成: 游戏的Debug日志模块;
第008节: 代码设计与AI生成:游戏的Timer管理模块;
第009节: 代码设计与AI生成: 游戏的UIMgr管理模块;
第010节: 代码设计与AI生成:常用工具函数模块;
第011节: 代码设计与AI生成:游戏战斗场景的结构框架2D/3D;
第012节: 代码设计与AI生成:技能与多层Buff框架;
第013节:代码设计与AI生成:基于ECS架构的战斗单元与System迭代
第014节:框架+AI开发: 基于框架的2D Demo《RPG/SLG斜45度地图Demo》
第015节:框架+AI开发:基于框架的3D Demo案例《第三人称游戏Demo》
第016节:整理好框架+初始化提示词,方便开发自己的项目。
更多推荐

所有评论(0)