
UNITY × WWISE · TECHNICAL AUDIO CASE STUDY
GAME AUDIO SYSTEM
From sound design and Wwise playback logic to a data-driven narrative audio workflow

01 — PROJECT CONTEXT & SYSTEM ARCHITECTURE
FROM A SILENT PROTOTYPE TO A PLAYABLE AUDIO SYSTEM
This independent visual novel was still developing its audio framework when I joined. I took responsibility for the audio process from requirements and sound production through Wwise authoring, Unity integration, testing and iteration. My focus was to turn the project's audio needs into playable behaviors that supported both the interface and the unfolding story.
Because the script continues to grow, I built the workflow around a clear division of responsibilities. The story sheet describes the intended sound at each narrative node. Unity resolves that data and manages playback state. Wwise defines variation, transitions, routing and mix behavior. This gives audio design room to evolve while keeping the game-facing interface consistent.
加入这个仍在开发中的视觉小说项目时,项目尚未形成完整的音频框架。我负责从需求拆解、声音制作,到 Wwise 逻辑搭建、Unity 接入、测试与迭代的音频全流程,将界面交互与剧情演出的声音需求转化为游戏中实际可运行的表现。
考虑到剧本会持续扩展,我围绕清晰的职责划分搭建了工作流:剧情表格描述各个节点的声音意图,Unity 解析数据并管理播放状态,Wwise 负责随机变化、音乐衔接、总线路由和混音行为。音频内容与表现可以继续迭代,游戏侧则通过统一接口调用。

System boundary: story data describes intent, Unity validates and dispatches, Wwise determines sonic behavior.

A repeatable production path from design and authoring to integration and profiling.
02 — WWISE AUTHORING & PLAYBACK LOGIC
MAKE THE SYSTEM SERVE THE SOUND
I designed Wwise playback behavior around the listening experience. Main-menu selection feedback uses three authored variations in a Random Container with Avoid Repeating Last. The variation stays inside Wwise, so one meaningful game event can produce changing feedback without extra selection logic in the UI code.
Music, UI and Narrative content have independent routing, allowing their levels and playback activity to be inspected and adjusted separately. Narrative cues also distinguish sounds tied to the current dialogue node from sounds that continue until an explicit stop instruction. These rules give each sound a clear purpose and duration in the scene.
For the main-menu music, I authored the entry, loop region and crossfade overlap within one Music Segment. The loop boundaries align the musical phrase, while a separate Exit Cue supports the authored ending and fade-out. This makes repetition and departure part of the music's design, with the game issuing a simple playback or stop request.
我围绕实际听感设计 Wwise 的播放行为。主菜单选择反馈由三个声音变体组成,通过 Random Container 与 Avoid Repeating Last 形成有变化的交互反馈。随机逻辑保留在 Wwise 内,游戏侧只需发送一个含义明确的事件,无须在 UI 代码中逐个选择素材。
音乐、UI 与剧情音效采用独立路由,便于分别观察播放状态和调整混音。剧情音效还区分了随当前对白节点结束的声音,以及需要明确停止指令才结束的持续声音,让每个声音在场景中的作用与持续范围都清晰可控。
主菜单音乐的进入、循环区域与交叉淡化重叠均在一个 Music Segment 中完成。循环边界用于衔接乐句,独立的 Exit Cue 配合设计好的结束与淡出行为,让循环和离场都服务于音乐表达。游戏侧只需提出播放或停止请求。

UI variation is authored in Wwise, leaving Unity with a stable semantic event.

Routing and narrative lifecycle semantics remain visible and maintainable inside Wwise.

One segment contains the entry, loop and authored exit behavior—no duplicated track stack is required.
03 — UNITY–WWISE INTEGRATION
A STABLE INTERFACE BETWEEN GAME STATE AND AUDIO
Unity provides the runtime interface between game state and the authored audio. Dedicated UI, Music and Narrative components hold Wwise Event references and expose reusable playback methods. UI controls request semantic feedback, the music component coordinates menu and story playback, and the narrative director resolves the cues belonging to the active dialogue node.
The narrative layer tracks Playing IDs and End-of-Event callbacks so it can manage each sound's lifetime. Callback work returns to Unity's main thread through a queue, and session versions prevent an earlier dialogue session from changing the current state. Music and sound-effects settings are connected to separate RTPC controls, allowing players to adjust each category independently.
Unity 负责连接游戏状态与已经制作好的音频行为。独立的 UI、音乐和剧情音频组件保存 Wwise Event 引用,并提供可复用的播放接口:UI 控件请求对应的交互反馈,音乐组件协调主菜单与剧情音乐,剧情音频总控则解析当前对白节点上的声音提示。
剧情音频层通过 Playing ID 和 End-of-Event 回调跟踪声音生命周期,将回调任务经队列交回 Unity 主线程,并以会话版本避免旧对白流程的回调干扰当前状态。设置界面的音乐与音效滑块分别连接独立 RTPC,让玩家可以单独调整两类声音。

Dedicated components expose stable Events while hiding low-level playback and callback handling.

Independent Music and SFX RTPC controls are connected to the existing settings interface.
04 — DATA-DRIVEN NARRATIVE AUDIO
TURN THE STORY SHEET INTO THE AUDIO WORKSPACE
The story sheet is the working interface for narrative audio. Stable node IDs connect dialogue to BGM and SFX cues, and multiple cues can be assigned to one node. Readable cue names are resolved through a centralized binding layer, allowing the audio team to maintain intent in the same source as the story while Unity handles the corresponding Wwise calls.
The editor tool reads a selected CSV or the Feishu sheet, validates required headers and supports a configurable row limit for chapter testing. Generated data is written inside Unity's Assets folder, and access credentials stay in a local environment file. The update path is repeatable: update the sheet, validate it, regenerate the game data, rebuild affected SoundBanks when audio content changes, and test the result in Unity.
剧情表格就是叙事音频的工作入口。稳定的节点 ID 将对白与 BGM、SFX 提示关联起来,同一节点也可以配置多个声音。可读的提示名称通过集中绑定层对应到具体事件,使音频人员能够直接在剧情来源中维护声音意图,由 Unity 处理相应的 Wwise 调用。
编辑器工具支持读取指定 CSV 或飞书表格、校验必需表头,并通过可配置的行数限制进行篇章测试。生成数据写入 Unity 的 Assets 目录,访问凭据保存在本地环境文件中。后续更新按照固定流程进行:修改表格、校验、重新生成游戏数据;音频内容发生变化时重建相应 SoundBank,最后在 Unity 中验证。

The sheet is an explicit production contract, not an informal note passed to programmers.
For narrative and audio — Stable node IDs, readable cues and lifecycle intent remain visible in the same production source.
For programming — Runtime code resolves validated data through reusable directors rather than line-by-line audio calls.
05 — DEBUGGING & VALIDATION
FIX THE CAUSE WITHOUT BREAKING THE EXPERIENCE
A revealing test case was an archive-slot hover sound that occasionally played several times during one pointer entry. A broad cooldown reduced the repeats, but it also removed valid feedback when the player moved quickly across different slots. I used Unity logs and Wwise Profiler captures to distinguish a genuine new interaction from a duplicate playback request.
The resulting guard uses a narrow 0.015-second window scoped to UI sound identity, and updates its timestamp only after a successful Post Event call. It targets near-simultaneous duplicate requests while retaining feedback for rapid movement between controls. I used the same end-to-end tracing approach for missing events, picker refresh, duplicated bank media and narrative cue resolution: follow the sound from source asset and Wwise authoring through generated banks to Unity playback.
一次典型问题出现在存档格子的悬停反馈上:鼠标进入一次,有时却连续发出几个声音。扩大冷却时间虽然减少了重复,却也吞掉了玩家快速经过不同格子时本应出现的反馈。我结合 Unity 日志与 Wwise Profiler 捕获,区分真实的新交互与重复提交的播放请求。
最终的保护逻辑按 UI 声音标识区分,采用 0.015 秒的窄时间窗口,并只在 Post Event 成功后更新时间戳。它针对近乎同时发生的重复请求,同时保留快速跨控件移动的反馈。对于事件缺失、Picker 刷新、SoundBank 媒体重复及剧情提示解析问题,我也沿用同样的链路排查方法:从源素材、Wwise 对象与事件,追踪到生成的声音包和 Unity 中的实际播放。

Illustrated comparison: valid rapid navigation versus unintended duplicate playback requests.
TRACE THE COMPLETE PATH FROM SOURCE ASSET TO IN-GAME PLAYBACK
06 — DELIVERY & CURRENT RESULT
A FOUNDATION THE AUDIO CAN CONTINUE TO BUILD ON
The project now has a working foundation for UI feedback, interactive music and narrative sound. Separate Music, UI and Narrative SoundBanks support clear generation and loading responsibilities, while reusable Unity components connect authored playback to the game. The spreadsheet workflow gives future story and audio updates a consistent route into the project.
The result is a system that can keep developing alongside the game: sound design remains adjustable in Wwise, runtime behavior is managed through defined interfaces, and changes can be traced and verified from content to playback.
目前,项目已经建立起 UI 反馈、交互音乐和剧情音效的运行基础。Music、UI 与 Narrative 采用独立 SoundBank,明确生成和加载职责;可复用的 Unity 组件将制作好的播放逻辑接入游戏,表格工作流则为后续剧情和音频更新提供统一入口。
这套基础能够伴随游戏继续发展:声音设计可在 Wwise 中调整,运行行为通过明确的接口管理,内容变化可以从制作端一路追踪并验证到游戏中的实际播放。

Separate SoundBanks support clean generation and runtime loading boundaries.
WHAT I OWNED
I owned audio requirement breakdown, sound design, music implementation, Wwise project structure and playback logic, Unity–Wwise interface design, production-tool iteration, SoundBank delivery, profiling and debugging. The work connected creative decisions with the runtime behavior and production workflow needed to carry them into the game.
我负责音频需求拆解、声音设计、音乐实现、Wwise 工程结构与播放逻辑、Unity–Wwise 接口设计、制作工具迭代、SoundBank 交付,以及性能观察和问题排查。这项工作将声音创作决策与实际运行行为连接起来,并建立了让这些设计持续进入游戏的生产流程。
AUDIO DESIGN / TECHNICAL AUDIO — HAOLUN BIAN