Skip to content

A Unity project, a GalGame framework based on UGC, you can write standardized story JSON files to play in GalEngine.

License

MIT, CC0-1.0 licenses found

Licenses found

MIT
LICENSE.txt
CC0-1.0
LICENSE.Illistration
Notifications You must be signed in to change notification settings

MillenTec/GalEngine

Repository files navigation

GalEngine

剧情引擎

🚧目前它仍然在开发阶段🚧

简体中文 | English


最近GalGame这个游戏品类成为了bilibili中讨论比较多的话题,于是初学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开源,这意味着你可以:

  • 自由使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本 但是你应当需要:
  • 署名: 你应当在项目中署以我的名并携带此许可证的副本

1.3.2.资源

该项目的所有UI以CC0 1.0协议开源,这以为这你可以:

  • 随意以任何形式使用资源,并且无需署名等

该协议仅作用于UI,即/Resources/Image/Illustration下的所有.ai文件

2.创作

2.1.剧情包创作

首先,在未来我会开发GalCraft项目,届时将可以使用图形化界面制作剧情包而无需手动操作JSON文件;不过当前仍需要手动编写JSON文件,接下来讲解的是JSON文件的格式以及一个标准剧情包的规范 配置文件: 首先,你的包应该需要一个config.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文件应当包裹在一个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": [

                ]
            }
        ]
    },
]

注意,以上所有涉及路径的字段都使用相对路径(相对于包的根目录)

目录结构: 建议的目录结构应该为:

.
├─config.json     # 配置文件
├─cover.png       # 封面
├─LICENSE.txt     # 许可证
├─image
│  ├─background   # 背景图
│  ├─char         # 角色立绘
│  └─diff         # 面部差分
├─plot
│   └─index.json  # 入口JSON文件
└─sounds
    ├─effects     # 音效
    ├─music       # 音乐
    └─vocals      # 配音

2.2.其他自定义

目前仅开放了对于页面背景的自定义,后续可能会开放如UI等的自定义 页面背景: 当前的页面背景是使用Stable Diffusion生成的,你可以选择自己喜欢的图画替换掉它; 你应该在Application.persistentDataPath下操作这些内容,这个目录的位置视情况而定,如在Windows下直接编译好的这个游戏的这个目录就应该在C:\Users\Your_name\AppData\LocalLow\MillenTec\GalEngine; 你可以新建一个UI文件夹,并在其下建立pageBackground子目录,其中应该包含config.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. 克隆仓库
git clone https://github.com/MillenTec/GalEngine.git
  1. 在Unity Hub使用对应版本的Unity Engine打开文件夹
  2. 点击播放以在Unity编辑器内运行
  3. 或者点击文件->生成设置->选择目标平台->生成->选择目录以构建为.exe可执行文件

5.第三方

Newtonsoft.Json:

HarmonyOS Sans:

6.关于我

你好,我是来自中国的MillenTec,一个还在学习中的C#新手,一个二次元技术宅; 你可以叫我“Millen”或者“米伦”,不过当然这不是我的真实名字

联系我:

About

A Unity project, a GalGame framework based on UGC, you can write standardized story JSON files to play in GalEngine.

Topics

Resources

License

MIT, CC0-1.0 licenses found

Licenses found

MIT
LICENSE.txt
CC0-1.0
LICENSE.Illistration

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published