Narrative design usage examples
Four worked Narrative Design examples from a single-trigger welcome sequence to an adaptive multi-section scenario with dynamic feedback.
Example 1: scripted welcome sequence
Setup
2
Set the visitor's name before the session
public class ReceptionController : MonoBehaviour
{
[SerializeField] private ConvaiNarrativeDesignManager _narrativeManager;
[SerializeField] private string _visitorName;
private void Start()
{
_narrativeManager.UpdateAndSendTemplateKey("VisitorName", _visitorName);
}
}Example 2: branching conversation
Setup
public class OrientationController : MonoBehaviour
{
[SerializeField] private ConvaiCharacter _character;
[SerializeField] private ConvaiNarrativeDesignManager _narrativeManager;
[SerializeField] private TextMeshProUGUI _activeTopicLabel;
private void OnEnable()
{
_character.NarrativeDesign.OnSectionChanged += OnSectionChanged;
}
private void OnDisable()
{
_character.NarrativeDesign.OnSectionChanged -= OnSectionChanged;
}
// Called by UI buttons
public void SelectTopic(string triggerName)
{
_character.NarrativeDesign.InvokeTrigger(triggerName);
}
// Called by a free-text input field's submit event — plain text context injection
// The character responds naturally in its own words
public void AskFollowUp(string userQuestion)
{
_character.NarrativeDesign.InvokeSpeech(userQuestion);
}
// Called when a scripted announcement is needed — character says this verbatim
public void AnnounceToUser(string announcement)
{
_character.NarrativeDesign.InvokeSpeech($"<speak>{announcement}</speak>");
}
private void OnSectionChanged(string previous, string next)
{
// Update breadcrumb UI — look up the human-readable name from the Manager
if (_narrativeManager.FindSectionConfig(next) is { } cfg)
_activeTopicLabel.text = cfg.SectionName;
}
}Example 3: proximity-triggered exhibit tour
Setup
Example 4: adaptive scenario with dynamic feedback
Session lifecycle
Implementation
Next steps
Narrative design scripting referenceTroubleshoot narrative designLast updated
Was this helpful?