手把手教你用 DeepSeek 构建游戏开发知识库
使用 AI 写代码已有一段时间,从中感受到了科技创新的力量。AI是一个跨时代的产物,未来将和现在的微信一样,人人都会用到!本篇文章总结了我自己摸索使用 DeepSeek 自建 Cocos Creator 开发知识库的一些方法。本方法也可以用于构建公司内部知识库,提高公司知识储备复用率,最大化团队产能。环境搭建 一、基础平台配置注册华为旗下硅基流动(链接:https://siliconflow.cn
使用 AI 写代码已有一段时间,从中感受到了科技创新的力量。AI是一个跨时代的产物,未来将和现在的微信一样,人人都会用到!
本篇文章总结了我自己摸索使用 DeepSeek 自建 Cocos Creator 开发知识库的一些方法。
本方法也可以用于构建公司内部知识库,提高公司知识储备复用率,最大化团队产能。
环境搭建
一、基础平台配置
-
注册华为旗下硅基流动(链接:https://siliconflow.cn/zh-cn/)
-
新建一个API密钥(链接:https://cloud.siliconflow.cn/account/ak)
-
记录核心模型标识
deepseek-ai/DeepSeek-R1
deepseek-ai/DeepSeek-V3
Qwen/Qwen2.5-72B-Instruct-128K
二、开发工具部署
-
下载 Cherry Studio(链接:https://cherry-ai.com/)
-
下载直链(链接:https://cherrystudio.ocool.online/Cherry-Studio-0.9.17-setup.exe)
-
如果需要魔法的,点击此处(链接:https://gh.llkk.cc/https://github.com/CherryHQ/cherry-studio/releases/download/v0.9.17/Cherry-Studio-0.9.17-setup.exe)
-
安装
三、系统初始化
-
设置密钥

-
依次添加模型
deepseek-ai/DeepSeek-R1、deepseek-ai/DeepSeek-V3、Qwen/Qwen2.5-72B-Instruct-128K,自带的需要都删除掉。

-
嵌入模型

-
默认设置

-
角色添加



// 游戏开发专家角色配置模板:
你是一名有着丰富经验的游戏开发人员,擅长使用 GoLang 语言进行游戏服务端开发,精通 TypeScript 语言并能结合 Cocos Creator V3.8.5 游戏引擎熟练的进行游戏客户端开发。
你开发的程序性能优越,你写的代码精炼易读。
-
对话测试

知识库构建实战
下面我们来个最简单粗暴的知识库文件导入,看图:
一、添加知识库名称

二、另类知识库文件导入
-
源码批量导入
我们在导入的时候先定位到这个目录。
D:\DevSoft\cocos\editors\Creator\3.8.5\resources\resources\3d\engine\cocos·
-
文件搜索:**.ts*
-
全选导入(Ctrl+A)
-
导入完毕,把目录添加到AI
-
官方文档整合
-
Cocos Creator 3.8 用户手册(链接:https://docs.cocos.com/creator/3.8/manual/zh/)
-
Cocos Creator API(链接:https://docs.cocos.com/creator/3.8/api/zh/)


补充说明1:一定要如图3点地方选择全部 (*) 文件,否则 ts 文件不会显示,也搜索不到!

补充说明2:图中导入后要等待AI分析,蓝色小圆圈代表还在学习中,绿色的勾(√)代表是学习好的。等待全部学习完毕,就可以使用AI进行提问了。

我们来测试一下。
三、应用案例:智能分包管理系统
-
分包管理器类
首先,我们创建一个分包管理器类,用于处理分包的加载和更新。
import { _decorator, Component, resources, AssetManager, Asset, error, log, director, SceneAsset, progressives } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('PackageManager')
export class PackageManager extends Component {
@property({ tooltip: '分包配置文件路径', type: [String] })
packageConfigPaths: string[] = [];
private _packageConfig: { [name: string]: string[] } = {};
private _loadedPackages: Set<string> = new Set();
start() {
this.loadPackageConfig();
}
private async loadPackageConfig() {
for (const path of this.packageConfigPaths) {
try {
const config = await resources.loadAsync<Asset>(path, Asset);
const json = JSON.parse(config.text);
for (const packageName in json) {
this._packageConfig[packageName] = json[packageName];
}
} catch (err) {
error(`Failed to load package config from ${path}: ${err}`);
}
}
log('Package config loaded:', this._packageConfig);
}
public async loadPackage(packageName: string) {
if (this._loadedPackages.has(packageName)) {
log(`Package ${packageName} is already loaded.`);
return;
}
const packageAssets = this._packageConfig[packageName];
if (!packageAssets) {
error(`Package ${packageName} not found in package config.`);
return;
}
try {
await AssetManager.instance.loadBundle(packageName, (err, bundle) => {
if (err) {
error(`Failed to load bundle for package ${packageName}: ${err}`);
} else {
log(`Bundle for package ${packageName} loaded successfully.`);
}
});
for (const assetPath of packageAssets) {
await resources.loadAsync(assetPath);
log(`Asset ${assetPath} loaded successfully.`);
}
this._loadedPackages.add(packageName);
log(`Package ${packageName} loaded successfully.`);
} catch (err) {
error(`Failed to load package ${packageName}: ${err}`);
}
}
public async unloadPackage(packageName: string) {
if (!this._loadedPackages.has(packageName)) {
log(`Package ${packageName} is not loaded.`);
return;
}
const packageAssets = this._packageConfig[packageName];
if (!packageAssets) {
error(`Package ${packageName} not found in package config.`);
return;
}
for (const assetPath of packageAssets) {
resources.release(assetPath);
log(`Asset ${assetPath} released successfully.`);
}
AssetManager.instance.releaseBundle(packageName);
this._loadedPackages.delete(packageName);
log(`Package ${packageName} unloaded successfully.`);
}
public async loadScene(sceneName: string) {
const packageName = this.getPackageForScene(sceneName);
if (packageName) {
await this.loadPackage(packageName);
}
try {
await director.loadSceneAsync(sceneName);
log(`Scene ${sceneName} loaded successfully.`);
} catch (err) {
error(`Failed to load scene ${sceneName}: ${err}`);
}
}
private getPackageForScene(sceneName: string): string | null {
for (const packageName in this._packageConfig) {
const packageAssets = this._packageConfig[packageName];
if (packageAssets.includes(sceneName)) {
return packageName;
}
}
return null;
}
}
-
分包配置文件
假设我们有一个分包配置文件 packageConfig.json
,内容如下:
{
"main": [
"prefabs/player",
"prefabs/enemy",
"scenes/main"
],
"level1": [
"prefabs/level1/obstacle",
"prefabs/level1/boss",
"scenes/level1"
],
"level2": [
"prefabs/level2/obstacle",
"prefabs/level2/boss",
"scenes/level2"
]
}
-
使用分包管理器
在你的游戏场景中,你可以通过以下方式使用 PackageManager
:
import { _decorator, Component, director } from ‘cc’;
const { ccclass, property } = _decorator;
@ccclass(‘GameController’)
export class GameController extends Component {
@property({ type: PackageManager })
packageManager: PackageManager = null;
start() {
this.packageManager.loadPackage('main');
}
public async loadLevel1() {
await this.packageManager.loadScene('level1');
}
public async unloadLevel1() {
await this.packageManager.unloadPackage('level1');
}
}
-
配置项目
确保在 Cocos Creator 项目中正确配置分包,可以在 build.json
中指定分包:
{
"packages": [
{
"name": "main",
"include": [
"prefabs/player",
"prefabs/enemy",
"scenes/main"
]
},
{
"name": "level1",
"include": [
"prefabs/level1/obstacle",
"prefabs/level1/boss",
"scenes/level1"
]
},
{
"name": "level2",
"include": [
"prefabs/level2/obstacle",
"prefabs/level2/boss",
"scenes/level2"
]
}
]
}
-
构建和发布
在 Cocos Creator 中,使用 Build
功能构建项目,并确保分包配置正确应用。构建完成后,即可将资源发布到你的服务器或本地文件系统。
-
动态加载和卸载
通过 GameController
中的 loadLevel1
和 unloadLevel1
方法,可以在游戏运行时动态加载和卸载分包。
-
总结
这个分包管理器类提供了一个基本的框架,用于管理和加载游戏中的分包资源。
可以根据具体需求进行扩展和优化,例如添加错误处理、进度显示、缓存管理等功能。
技术提示:本文未使用 DeepSeek-R1 模型和 DeepSeek-V3 模型进行测试,但建议大家优先使用 DeepSeek-R1 模型,其综合表现接近 GPT-4 水平。
结束!
希望这个示例对你有帮助。
关于 DeepSeek 的崛起,大家怎么看?请在评论区留言!
更多推荐
所有评论(0)