Game Development

Simulating People

1. Conditional NPC Dialogue

Create small narrative experience that centers around speaking with non-player characters with dialogue created using ADialogueSystem and a spreadsheet.

The prototype requirements are:

A Dialogue System

“A Dialogue System” is a character dialogue toolset for Unity that allows authors to create conditional character dialogue using google sheets. The system allows authors to dynamically create state data, and dynamically select dialogue based on that state. The state can also be accessed and modified from outside the spreadsheet as well. Go here to download A Dialogue System and see its GitHub page for setup instructions for further instructions.

In this system, dialogue is structured around a “quest state” that defines the broad chapter or level in which it applies. Each dialogue entry is associated with a character and consists of two conditions and an effect. Authors can read from and write to a shared “blackboard,” a state storage system that tracks labeled data. Conditions act as queries to the blackboard, determining whether a dialogue line is triggered, while effects allow authors to update the blackboard, modifying the game’s state dynamically.

At the approprite time for your game, you can modify the DialogueManager.scc.questState variable to move on to the next set of character dialogue options.

Visual Asset Resources

Turning in your prototype

Your prototype should be playable at:

http://<YOUR_GITHUB_USERNAME>.github.io/game-dev-spring2025/builds/people-1

2. Interactive NPC Dialogue

Last week you used my custom conditional dialogue system, and this week you be making creative use of a more fully featured interactive narrative tool, Ink in order to have interactive character dialogue (note, you are not required to use Ink if you think you can achieve scalable/interesting interactive dialogue in some other way - e.g. building off of ADialogueSystem).

The requirements of this prototype are:

Setup

Using my example

Get the unitypackage here.

I have created a function called LaunchKnot that is expected to be called as a coroutine. E.g. StartCoroutine(LaunchKnot("IntroductoryScene"));. In order for this to work, you need to create the following UI elements and assign them to InkStoryManager.cs:

  1. A Text box game object, called TextBoxUI in my example. This will contain the text from Ink.
  2. A text box that is a child of TextBoxUI to assign to TextBox.
  3. An empty GameObject on the canvas with a Layout (e.g. GridLayout, HorizontalLayout) conponent to assign to ChoicesUI.
  4. A prefab that will be instantiated whenever a choice is present. It should be a button.

Turning in your prototype

Your prototype should be playable at:

http://<YOUR_GITHUB_USERNAME>.github.io/game-dev-spring2025/builds/people-2