[HOWTO] How To: Set Up Quests Without Conversations
Posted: Wed Jun 19, 2019 11:37 am
The Dialogue System's Quest Tutorial shows how to start and complete quests by talking to an NPC.
It's also possible to start and complete quests without conversations. It's slightly more complicated, but when you have done it once it's fairly easy.
To see an example, examine the Dialogue System's DemoScene2. It has a quest named "Enemy Attack". The goal of this quest is to kill 5 enemies.
Each enemy GameObject has an Increment On Destroy component:
When the enemy is killed, it increments a Dialogue System variable named "enemiesKilled". Then it invokes the DialogueSystemTrigger.OnUse method of another GameObject named "Enemies".
The Enemies GameObject has a Dialogue System Trigger that does several things:
In the Conditions section, it requires that the enemiesKilled variable is at least 5 and the Enemy Attack quest is active.
If the Conditions section is true, then the actions in the Actions section will run. The Actions section sets the Enemy Attack quest to success and shows an alert message to the player.
Extra Info: Chained Quests
If you wanted to start another quest as soon as Enemy Attack is successful, you could add an OnExecute() UnityEvent:
Create a new GameObject (for example named "Another Quest"), add a Dialogue System Trigger, and call its DialogueSystemTrigger.OnUse method.
The new GameObject ("Another Quest") will need a Dialogue System Trigger that sets the next quest active:
Extra Info: Automatically Gaining Quest On Start
If you want to give the player a quest as soon as a scene starts, create an empty GameObject. Add a Dialogue System Trigger, and set the Trigger dropdown to OnStart:
In the Conditions section, require that the quest is unassigned. In the Actions section, set the quest active.
Extra Info: Scene Changes
Use these techniques to change scenes.
When Unity changes scenes, it destroys the GameObjects in the outgoing scene. These scene-changing techniques tell Increment On Destroy components that the GameObject is about to be destroyed because of a scene change, so they should not increment their variables in this case.
It's also possible to start and complete quests without conversations. It's slightly more complicated, but when you have done it once it's fairly easy.
To see an example, examine the Dialogue System's DemoScene2. It has a quest named "Enemy Attack". The goal of this quest is to kill 5 enemies.
Each enemy GameObject has an Increment On Destroy component:
When the enemy is killed, it increments a Dialogue System variable named "enemiesKilled". Then it invokes the DialogueSystemTrigger.OnUse method of another GameObject named "Enemies".
The Enemies GameObject has a Dialogue System Trigger that does several things:
In the Conditions section, it requires that the enemiesKilled variable is at least 5 and the Enemy Attack quest is active.
If the Conditions section is true, then the actions in the Actions section will run. The Actions section sets the Enemy Attack quest to success and shows an alert message to the player.
Extra Info: Chained Quests
If you wanted to start another quest as soon as Enemy Attack is successful, you could add an OnExecute() UnityEvent:
Create a new GameObject (for example named "Another Quest"), add a Dialogue System Trigger, and call its DialogueSystemTrigger.OnUse method.
The new GameObject ("Another Quest") will need a Dialogue System Trigger that sets the next quest active:
Extra Info: Automatically Gaining Quest On Start
If you want to give the player a quest as soon as a scene starts, create an empty GameObject. Add a Dialogue System Trigger, and set the Trigger dropdown to OnStart:
In the Conditions section, require that the quest is unassigned. In the Actions section, set the quest active.
Extra Info: Scene Changes
Use these techniques to change scenes.
When Unity changes scenes, it destroys the GameObjects in the outgoing scene. These scene-changing techniques tell Increment On Destroy components that the GameObject is about to be destroyed because of a scene change, so they should not increment their variables in this case.