什么是Raven引擎

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.toml | Rust 项目的配置文件,定义了项目的名称、版本、依赖等信息 |
Cargo.lock | 记录了项目依赖的确切版本,确保项目在不同环境下都使用相同的依赖版本 |
cli | 命令行工具相关的源代码 |
crates | 存放项目发布到 crates.io 的压缩包 |
crates.zip | 项目的发布压缩包 |
demo | 项目的示例代码 |
docs | 项目的文档 |
examples | 存放项目的示例代码 |
LICENSE-APACHE.txt | 项目的 Apache 2.0 许可证 |
README.md | 项目的自述文件 |
src | 项目的源代码文件夹 |
target | Rust 编译器生成的目标文件存放目录 |
常用命令
安装 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