Skip to content

资源、音频和字体

Galgo 通过 ResourceManager 统一加载图片、音频和字体。资源可以来自 embed.FS、本地文件路径或额外资源根。

加载顺序

默认资源查找顺序:

  1. 如果 NewEngine 传入了 *embed.FS,先尝试从 embed FS 打开。
  2. 再尝试按本地文件路径打开。
  3. 最后尝试从额外资源根中查找。

额外资源根适合 DLC、用户包、外置语音包等:

go
engine.ResourceManager.AddSearchRoot("./dlc/episode_2")

之后脚本仍可以写相对路径:

go
galgo.Bg("dlc_room", "assets/bg/dlc_room.png")

图片资源

图片主要用于背景、立绘、标题背景和 CG 画廊。

背景:

go
galgo.Bg("classroom", "assets/bg_classroom.jpg")

立绘:

go
galgo.Sprite("Aria", "aria_happy", "assets/char_aria.jpg", galgo.PosCenter)

标题页背景:

go
galgo.Config{
    TitleBgImagePath: "assets/title_bg.png",
}

CG 画廊配置:

go
GalleryCGs: []galgo.GalleryCGItem{
    {Key: "classroom", Path: "assets/bg_classroom.jpg", Name: "夕阳教室"},
},

Bg 设置成功时会自动调用 UnlockCG,因此背景可以直接作为 CG 解锁。

音频资源

Galgo 内置三类音频通道:

  • BGM:背景音乐,通常循环播放。
  • SE:音效,通常短促播放。
  • Voice:角色语音,通常跟台词同步。

播放 BGM:

go
galgo.PlayBGM("school_life", "assets/bgm_school.mp3")

播放 SE:

go
galgo.PlaySE("door", "assets/se_door.ogg")

带语音台词:

go
galgo.TextWithVoice("Aria", "欢迎回来。", "aria_welcome", "assets/voice/aria_welcome.ogg")

音乐画廊配置:

go
GalleryBGMs: []galgo.GalleryBGMItem{
    {Key: "school_life", Path: "assets/bgm_school.mp3", Name: "校园日常"},
},

音量

设置页内置 VolumeValue

go
galgo.SettingsComponent{
    ID:    "bgm",
    Label: "BGM Volume",
    Kind:  galgo.SettingsComponentSlider,
    Value: &galgo.VolumeValue{Channel: "bgm"},
}

Channel 可选值:

  • "bgm"
  • "se"
  • "voice"

字体

如果不指定字体,Galgo 会尝试查找系统字体。建议正式项目明确设置:

go
galgo.Config{
    FontPath: "assets/fonts/NotoSansCJK-Regular.otf",
}

字体需要覆盖项目使用的语言。中文、日文、韩文建议使用 CJK 字体,否则会出现缺字或乱码。

embed 使用建议

把资源嵌入二进制可以降低部署复杂度:

go
package main

import "embed"

//go:embed assets/*
var assets embed.FS

初始化:

go
engine, err := galgo.NewEngine(config, &assets)

开发期资源经常变化时,本地路径更方便。发布前再决定是否 embed。

资源 key 命名

资源 key 是缓存和引用的标识,建议稳定:

  • 背景:bg_classroom_day
  • 立绘:aria_happy
  • BGM:school_life
  • SE:door_open
  • Voice:aria_001

避免在 key 中使用空格、中文标点或临时文件名。路径可以改,key 尽量不改。

Released under the project license.