什么是Raven引擎

logo

Raven 是一款基于 Rust 语言开发的现代化视觉小说/文字冒险游戏引擎,专注于为开发者提供简洁高效的叙事工具链。凭借 Rust 的内存安全性与高性能特性,Raven 能够流畅运行于多平台,同时通过声明式脚本语法和模块化设计,大幅降低视觉小说的开发门槛。

这个文档是什么?

这份文档不是面对开发者的开发教程,而是源码编译手册,想研究和深度改造引擎的开发者可以阅读此文档 得到引擎改造思路和详尽的编译方法,同时可以了解引擎的架构

开源地址

https://github.com/e72uj/Raven

联络我们

🐧群:818497392

稳定性警告

⚠️ 注意:当前项目处于早期开发阶段,API 会有重大变更,不建议在生产环境中使用。

或者:

状态 Raven 引擎目前处于 Alpha 阶段,核心功能仍在开发中,存在不稳定因素。

系统要求

下面为作者的设备 配置为真实的调试和运行机器 芯片: M4 pro 内存: 24G 硬盘: 512G

开发环境配置

下面演示一下Raven开发环境配置的流程:

安装Rust

编译和运行Raven引擎需要使用rust,请访问官方进行数据

https://www.rust-lang.org/zh-CN/

拉取最新代码

使用GitKraken 或者是 GitHub Desktop 工具进行代码拉取。地址如下:

https://github.com/E72UJ/Raven.git

创建 crates 目录

drwxr-xr-x@ 13 furau  staff         416  6 10 11:42 assets
-rw-r--r--@  1 furau  staff      126301  5 18 18:29 Cargo.lock
-rw-r--r--@  1 furau  staff         995  5 18 18:04 Cargo.toml
drwxr-xr-x@  7 furau  staff         224  5 27 19:59 cli
drwxr-xr-x@  8 furau  staff         256  5 18 16:53 crates
-rw-r--r--@  1 furau  staff  1713670585  5 28 00:04 crates.zip
drwxr-xr-x@  6 furau  staff         192  6  2 05:39 demo
drwxr-xr-x@  8 furau  staff         256  6 11 17:59 docs
drwxr-xr-x@  9 furau  staff         288  6  7 08:54 examples
-rw-r--r--@  1 furau  staff       10172  5 14 14:02 LICENSE-APACHE.txt
-rw-r--r--@  1 furau  staff        1151  6  2 05:43 README.md
drwxr-xr-x@  3 furau  staff          96  5 15 08:19 src
drwxr-xr-x@  8 furau  staff         256  5 14 06:10 target

编译程序

编译依赖包

Windows 编译手册

Macos 编译手册

常用词汇表

基本概念

引擎架构

graph LR A[创作工具] -->|生成| B[YAML配置文件] C[资源文件] -->|路径引用| B B -->|输入| D[Rust渲染引擎] D -->|输出| E[视觉小说画面]

工作流程

目录结构

资产文件结构

const EMBEDDED_FONT_FIRA_MONO: &[u8] = include_bytes!("../../crates/assets/fonts/FiraMono-Medium.ttf");
const EMBEDDED_FONT_GENSEN_MARU: &[u8] = include_bytes!("../../crates/assets/fonts/GenSenMaruGothicTW-Bold.ttf");
const EMBEDDED_FONT_SOURCE_HAN: &[u8] = include_bytes!("../../crates/assets/fonts/SourceHanSansSC-Medium.otf");
const EMBEDDED_RAVEN_EXE: &[u8] = include_bytes!("../../crates/assets/Raven");
const EMBEDDED_PORTRAIT_ALICE: &[u8] = include_bytes!("../../crates/assets/portraits/alice.png");
const EMBEDDED_PORTRAIT_BOB: &[u8] = include_bytes!("../../crates/assets/portraits/bob.png");
const EMBEDDED_PORTRAIT_NARRATOR: &[u8] = include_bytes!("../../crates/assets/portraits/narrator.png");
const EMBEDDED_SVG_SCIHUB: &[u8] = include_bytes!("../../crates/assets/portraits/SciHub.svg");
const EMBEDDED_MAIN_YAML: &[u8] = include_bytes!("../../crates/assets/main.yaml");
const EMBEDDED_DIALOGUES_YAML: &[u8] = include_bytes!("../../crates/assets/dialogues.yaml");
const EMBEDDED_CHAR_HEROINE_DEFAULT: &[u8] = include_bytes!("../../crates/assets/characters/heroine/default.png");
const EMBEDDED_CHAR_PROTAGONIST_DEFAULT: &[u8] = include_bytes!("../../crates/assets/characters/protagonist/default.png");
const EMBEDDED_CHAR_VILLAIN_DEFAULT: &[u8] = include_bytes!("../../crates/assets/characters/villain/default.png");
const EMBEDDED_SVG_LONG: &[u8] = include_bytes!("../../crates/assets/characters/svg/long.svg");
const EMBEDDED_SWF_66: &[u8] = include_bytes!("../../crates/assets/swf/66.swf"); // 新增SWF资源
文件/文件夹描述
assets存放项目所需的资源文件,如图片、字体等
Cargo.tomlRust 项目的配置文件,定义了项目的名称、版本、依赖等信息
Cargo.lock记录了项目依赖的确切版本,确保项目在不同环境下都使用相同的依赖版本
cli命令行工具相关的源代码
crates存放项目发布到 crates.io 的压缩包
crates.zip项目的发布压缩包
demo项目的示例代码
docs项目的文档
examples存放项目的示例代码
LICENSE-APACHE.txt项目的 Apache 2.0 许可证
README.md项目的自述文件
src项目的源代码文件夹
targetRust 编译器生成的目标文件存放目录

常用命令

安装 rust

# Linux/macOS
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Windows (PowerShell)
$env:RUSTUP_DIST_SERVER = "https://mirrors.ustc.edu.cn/rust-static"
$env:RUSTUP_UPDATE_ROOT = "https://mirrors.ustc.edu.cn/rust-static/rustup"
irm https://sh.rustup.rs -UseBasicParsing | iex

优化编译

cargo build --release

执行案例程序

cargo run --example goto

常用cargo 指令

| `cargo clean` | 清理项目的构建成果 |
| `cargo update` | 更新项目的依赖项 |
| `cargo add` | 添加新的依赖项 |
| `cargo remove` | 移除项目的依赖项 |

常量值表

常用按钮组颜色

const NORMAL_BUTTON: Color = Color::srgba(0.1, 0.1, 0.1, 0.8);
const HOVERED_BUTTON: Color = Color::srgb(0.25, 0.25, 0.25);
const PRESSED_BUTTON: Color = Color::srgb(0.35, 0.75, 0.35);

参考资料

bevy 案例

https://bevy.org/examples/

bevy github 案例

https://github.com/bevyengine/bevy/tree/main/examples

bevy-flash

https://github.com/aojiaoxiaolinlin/bevy_flash