The FTVO Unity Importer connects Frostune:VO with your Unity project through a local Unity Editor bridge.
This integration allows FTVO to push localized dialogue data, WAV files, runtime metadata, priority values, and playback-ready dialogue assets directly into Unity.
The current Unity importer is distributed as a simple Unity Assets plugin folder.
From your Frostune download library, download:
FTVO_Unity_Importer.zip
This ZIP contains the Unity importer folder that must be copied into your Unity project.
Unzip:
FTVO_Unity_Importer.zip
You should get a folder named:
FTVO_Unity_Importer
Copy that folder directly into your Unity project’s Assets folder.
Your Unity project should look like this:
YourUnityProject/
├─ Assets/
│ ├─ FTVO_Unity_Importer/
│ │ └─ Dialogue/
│ │ ├─ Editor/
│ │ │ ├─ FrostuneUnityBridgeServer.cs
│ │ │ └─ FrostuneUnityImporter.cs
│ │ └─ Runtime/
│ │ ├─ DialogueLine.cs
│ │ ├─ DialogueLocalizedEntry.cs
│ │ ├─ DialogueSceneAsset.cs
│ │ ├─ FTVODialoguePlayer.cs
│ │ ├─ FTVODialogueRuntime.cs
│ │ ├─ FTVOProfilerEvent.cs
│ │ └─ FTVOProfilerRuntime.cs
│ └─ Scenes/
└─ Packages/
After copying the folder, Unity should automatically compile the importer.
Do not install this version through Unity Package Manager.
For this release, simply unzip and copyFTVO_Unity_ImporterintoAssets.
After Unity finishes compiling, open the Unity Console.
You should see:
FTVO Unity Bridge listening on http://127.0.0.1:8799/ftvo/
You can also test the bridge manually in a browser:
http://127.0.0.1:8799/ftvo/ping
Expected result:
{
"ok": true,
"name": "Frostune Unity Bridge",
"version": "0.1",
"unity": "..."
}
If this works, FTVO can communicate with the Unity Editor.
In Frostune:VO:
Unity
Ping Unity
Push to Unity
FTVO will push the active locale into Unity and import the matching dialogue assets and WAV files.
When pushing to Unity, FTVO creates generated content under:
Assets/FTVO/
Example:
Assets/
└─ FTVO/
├─ Audio/
│ ├─ EN/
│ │ └─ New_Folder/
│ │ ├─ SCENE_1/
│ │ ├─ SCENE_2/
│ │ └─ SCENE_3/
│ └─ FR/
│ └─ New_Folder/
│ ├─ SCENE_1/
│ ├─ SCENE_2/
│ └─ SCENE_3/
└─ Dialogue/
└─ New_Folder/
├─ SCENE_1/
│ └─ SCENE_1.asset
├─ SCENE_2/
│ └─ SCENE_2.asset
└─ SCENE_3/
└─ SCENE_3.asset
The structure is intentional:
Assets/FTVO/Audio/<LANGUAGE>/...
contains localized WAV files.
Assets/FTVO/Dialogue/...
contains shared dialogue ScriptableObject assets.
The Unity importer supports localized dialogue entries.
Each DialogueSceneAsset contains dialogue lines, and each line can contain multiple localized entries.
Example:
DialogueSceneAsset
└─ Lines
└─ Line
├─ Text
├─ Voice
├─ Priority
├─ Delay Seconds
├─ Spatial Mode
└─ Localized
├─ en
│ ├─ Text
│ └─ Voice
└─ fr
├─ Text
└─ Voice
When you push English, FTVO adds or updates the English localized entry.
When you push French, FTVO adds or updates the French localized entry on the same line.
This keeps the Unity dialogue structure stable while allowing each language to have its own text and audio.
The importer includes a runtime component:
FTVO Dialogue Player
Add this component to a GameObject to play imported FTVO dialogue.
In Unity:
FTVO Dialogue Player
DialogueSceneAsset to the Scene field.AudioSource is assigned.Example setup:
GameObject
├─ AudioSource
└─ FTVO Dialogue Player
├─ Scene: SCENE_1.asset
├─ Override Culture: en
├─ Fallback Culture: en
├─ Use Priority Gate: enabled
├─ Apply Spatial Mode: enabled
└─ Play Audio: enabled
The runtime supports culture switching.
Set culture globally:
using Frostdraft.Dialogue;
FTVODialogueRuntime.SetCulture("fr");
Or per player:
player.SetCulture("fr");
player.PlayFirstLine();
If the requested culture is missing, the player falls back to the configured fallback culture, usually:
en
Create a small test script:
using UnityEngine;
using Frostdraft.Dialogue;
public class FTVOPlaybackTest : MonoBehaviour
{
public FTVODialoguePlayer player;
private void Awake()
{
if (player == null)
player = GetComponent<FTVODialoguePlayer>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
player.SetCulture("en");
player.PlayLineAtIndex(0);
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
player.SetCulture("fr");
player.PlayLineAtIndex(1);
}
}
}
Attach this script to the same GameObject as the FTVO Dialogue Player.
In Play Mode:
1 = play English
2 = play French
The Unity Game view must be focused for keyboard input to work.
FTVO Unity runtime includes a basic priority gate.
Each line can carry priority metadata from FTVO.
When Use Priority Gate is enabled:
Relevant component settings:
Use Priority Gate
Allow Equal Priority Interrupt
This helps prevent minor barks from interrupting important dialogue.
FTVO can push spatial metadata to Unity.
Each line can have a spatial mode:
2d
3d
When Apply Spatial Mode is enabled, the component updates the assigned AudioSource:
2d → AudioSource spatialBlend = 0
3d → AudioSource spatialBlend = 1
Teams can still override or extend the AudioSource setup for their own audio pipeline.
The FTVO Dialogue Player exposes UnityEvents in the Inspector.
Available events include:
On Line Started
On Line Finished
On Subtitle Text
These events can be used to:
Example:
On Subtitle Text → Subtitle UI component → SetText(string)
The Unity importer includes a runtime profiler buffer.
When FTVO Dialogue Player plays lines, Unity exposes playback events through:
http://127.0.0.1:8799/ftvo/vo-profiler
This allows FTVO to receive Unity runtime playback events such as:
Played
Finished
Interrupted
Blocked by priority
Stopped
The profiler can be cleared through:
http://127.0.0.1:8799/ftvo/vo-profiler/clear
FTVO can use this data to show runtime playback activity from Unity.
Recommended source control approach:
Assets/Frostune_Unity_importer plugin folder if your whole team needs the importer.Assets/FTVO/Dialogue assets if dialogue data should live in the project.Assets/FTVO/Audio WAV files if localized audio should live in the project.Assets/FTVO structure.If FTVO cannot connect to Unity:
Frostune_Unity_importer is inside the project’s Assets folder.FTVO Unity Bridge listening on http://127.0.0.1:8799/ftvo/
http://127.0.0.1:8799/ftvo/ping
If FTVO Dialogue Player does not appear in Add Component:
Assets/Frostune_Unity_importer/Dialogue/Runtime/
Assets/Frostune_Unity_importer/Dialogue/Editor/
Frostune_Unity_importer and choose Reimport.FTVO
Dialogue Player
Frostune
If Unity has any compile error, new components may not appear until the errors are fixed.
Check:
FTVO Dialogue Player has a DialogueSceneAsset assigned.AudioSource is assigned.Play Audio is enabled.Open the imported DialogueSceneAsset.
In the Inspector, expand:
Lines
Localized
You should see entries such as:
en
fr
If fr is missing, push the French locale from FTVO again.
If fr exists but has no audio clip, confirm that French WAV files exist under:
Assets/FTVO/Audio/FR/
Audio is intentionally separated by culture:
Assets/FTVO/Audio/EN/
Assets/FTVO/Audio/FR/
Dialogue data is shared:
Assets/FTVO/Dialogue/
This is expected.
The important validation is that each DialogueSceneAsset line contains multiple localized entries instead of duplicating the whole scene asset per language.
FTVO Dialogue Player for quick runtime validation.| Task | Workflow |
|---|---|
| Install Unity integration | Unzip and copy Frostune_Unity_importer into Assets/ |
| Verify bridge | Check Unity Console or /ftvo/ping |
| Push localized dialogue | Use Push to Unity in FTVO |
| Import WAV files | Generated under Assets/FTVO/Audio/<LANGUAGE>/ |
| Import dialogue data | Generated as DialogueSceneAsset under Assets/FTVO/Dialogue/ |
| Runtime playback | Add FTVO Dialogue Player to a GameObject |
| Switch culture | Use FTVODialogueRuntime.SetCulture("fr") or player override |
| Play dialogue | Use PlayFirstLine(), PlayLineAtIndex(), or PlayLine(lineId) |
| Manage priority | Enable Use Priority Gate |
| Manage subtitles | Use On Subtitle Text UnityEvent |
| Manage 2D/3D playback | Enable Apply Spatial Mode |
| Runtime profiling | Use FTVO profiler or /ftvo/vo-profiler |