# GalEngine
**Repository Path**: MillenTec/GalEngine
## Basic Information
- **Project Name**: GalEngine
- **Description**: A Unity project, a GalGame framework based on UGC, you can write standardized story JSON files to play in GalEngine.
- **Primary Language**: C#
- **License**: CC0-1.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-27
- **Last Updated**: 2025-12-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
GalEngine
剧情引擎
🚧目前它仍然在开发阶段🚧
最近`GalGame`这个游戏品类成为了[bilibili](https://www.bilibili.com)中讨论比较多的话题,于是初学Unity的我就决定要不做个GalGame试试看吧(绝对不是为了蹭热度🤨)
## 1.简介
### 1.1.什么是`GalGame`
`GalGame`本质是一个游戏分类,源自于日本,意思是`美少女游戏`,"Gal"即是日语`ギャル`("美少女")一词的音译;
GalGame也被称为"视觉小说",其剧情内容以恋爱为主,本质就是一种剧情游戏分支,但是GalGame这一分类要求以剧情为主导,也就是说有其他非剧情主要玩法的游戏不能被归类的GalGame;
所以说,GalGame本身是一个比较正常的游戏分类,不过在bilibili由于某些特殊原因成为了一个梗
### 1.2.关于GalEngine
正如其名字,这是一个用来制作GalGame的引擎,我搭建了一个GalGame的基本框架,通过规范格式编写记录剧情内容的JSON文件,即可在GalEngine中播放这段剧情;
你可以将制作好的剧情包放置在特定的目录(`{Application.persistentDataPath}/Packs`),GalEngine会扫描那个目录并列出其中所有包,用户可以点击列出的包以进入剧情;
这是我的第一个Unity且是第一个C#项目,最早的代码(剧情播放部分,即`DisplayTalkingInformation`类)甚至是在我接触C#仅2周、Unity仅4天后写出来的,直至撰写此文本时(2025.12.27)我也才接触Unity约一个多月,所以可能有很多逻辑不甚清晰、解决方案并不算完美,请各位谅解,我还有很多要学
### 1.3.开源
#### 1.3.1.代码
该项目的所有代码脚本使用[MIT LICENSE](https://mit-license.org/)开源,这意味着你可以:
- 自由**使用、复制、修改、合并、发布、分发、再许可和/或销售**本软件的副本
但是你应当需要:
- **署名**: 你应当在项目中署以我的名并携带此许可证的副本
#### 1.3.2.资源
该项目的所有UI以[CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt)协议开源,这以为这你可以:
- 随意以任何形式使用资源,并且无需署名等
> 该协议仅作用于UI,即`/Resources/Image/Illustration`下的所有`.ai`文件
## 2.创作
### 2.1.剧情包创作
首先,在未来我会开发GalCraft项目,届时将可以使用图形化界面制作剧情包而无需手动操作JSON文件;不过当前仍需要手动编写JSON文件,接下来讲解的是JSON文件的格式以及一个标准剧情包的规范
**配置文件**:
首先,你的包应该需要一个`config.json`配置文件,并将其放在包的根目录,格式应该像这样:
```json
{
"title": "Your Pack Title", // 包的标题
"author": "Your_name", // 你的名字
"link": "https://your.social.link", // 你的链接,可选
"id": "your_pack_id", // 包的唯一标识码
"version": "1.0.0", // 包的版本,可选
"description": "Your pack description", // 对于包的描述,可选
"license": "MIT", // 包的协议,可选
"cover": "cover.png", // 封面图,可选,1556*1182或778:591的比例(这比例很诡异,请原谅我搞出了如此怪异的比例),否则会被拉伸
"index": "plot/index.json" // 开始的文件(剧情JSON文件)
}
```
**剧情文件**:
这是你的包的核心,它包含了整个剧情的内容,目前它有着**node**(普通节点)和**branch**(选择分支)两种节点类型
```json
[ //你的整个JSON文件应当包裹在一个Array里
// 简单节点示例
{
"node": 0, // 节点的编号,从0开始,与父级Array索引相同
"type": "node", // 节点类型(node或branch)
"character": "character_name", // 角色名字,留空则无
"description": "the character description", // 对于角色的描述(如“陌生的女孩”、“咖啡店店员”等描述性词汇),以小字体显示在角色名字旁边
"value": "character talk", // 说话的内容,显示在对话框
"background": "image/background/background.png", // 画面背景,没有则沿用上一节点的(测试中)
"voice": "sounds/vocals/voice.ogg", // 配音(开发中)
"sound": "sounds/effects/sound.ogg", // 音效(开发中)
"character_illustration": "image/char/character.png", // 留空则无(开发中)
"facial_differential": "image/diff/character_name.feel.png" // 角色面部差分,留空则沿用上一个,如果没有则使用默认差分(开发中)
},
// 分支节点示例
{
"node": 1,
"type": "branch",
"choice": [
{
"ordinal": 0, // 选项ID,从0开始,与Array索引对应
"value": "Choice1", // 选项文本
"branch": [
// 内部放置其他节点,相当于开了第二个顶层Array
]
},
{
"ordinal": 1,
"value": "Choice2",
"branch": [
]
}
]
},
]
```
> 注意,以上所有涉及路径的字段都使用相对路径(相对于包的根目录)
**目录结构**:
建议的目录结构应该为:
```bash
.
├─config.json # 配置文件
├─cover.png # 封面
├─LICENSE.txt # 许可证
├─image
│ ├─background # 背景图
│ ├─char # 角色立绘
│ └─diff # 面部差分
├─plot
│ └─index.json # 入口JSON文件
└─sounds
├─effects # 音效
├─music # 音乐
└─vocals # 配音
```
### 2.2.其他自定义
目前仅开放了对于页面背景的自定义,后续可能会开放如UI等的自定义
**页面背景**:
你应该在`Application.persistentDataPath`下操作这些内容,这个目录的位置视情况而定,如在Windows下直接编译好的这个游戏的这个目录就应该在`C:\Users\Your_name\AppData\LocalLow\MillenTec\GalEngine`;
你可以新建一个`UI`文件夹,并在其下建立`pageBackground`子目录,其中应该包含config.json以及你的背景图片
```json
{
"image": "background.png" // 背景图的相对路径
}
```
## 3.开发环境
- **Unity**: Unity 2022.3.62f1c1 LTS
- **IDE**: JetBrains Rider 2025.3.1 非商业用途授权
- **.NET框架**: .NETFramework v4.7.1
- **语言版本**: C# 9.0
- **操作系统**: Windows 11 Pro 25H2
- **UI设计**: Adobe Illustrator 2024
## 4.快速开始
1. 克隆仓库
```bash
git clone https://github.com/MillenTec/GalEngine.git
```
2. 在Unity Hub使用对应版本的Unity Engine打开文件夹
3. 点击播放以在Unity编辑器内运行
4. 或者点击`文件`->`生成设置`->选择目标平台->`生成`->选择目录以构建为`.exe`可执行文件
## 5.第三方
**Newtonsoft.Json**:
- LICENSE: [MIT LICENSE](https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)
- GitHub: https://github.com/JamesNK/Newtonsoft.Json
**HarmonyOS Sans**:
- Website: [汉仪字库](https://www.hanyi.com.cn/custom-font-case-7)
- LICENSE: [LICENSE](third_party\LICENSE.HarmonyOS-Sans)
## 6.关于我
你好,我是来自中国的MillenTec,一个还在学习中的C#新手,一个二次元技术宅;
你可以叫我“Millen”或者“米伦”,不过当然这不是我的真实名字
**联系我**:
- GitHub: [MillenTec](https://github.com/MillenTec)
- bilibili: [MillenTec](https://space.bilibili.com/3546591566760474)
- Email: MillenTec@outlook.com