Creating in-game tutorials

Announcements, support questions, and discussion for Quest Machine.
1988Oleg1988
Posts: 11
Joined: Tue Apr 23, 2024 12:23 pm

Creating in-game tutorials

Post by 1988Oleg1988 »

Hello!
I bought this wonderful asset a couple of years ago and now I'm trying to learn how to work with it. I watch lessons, read documentation.
But it's terribly long.
In my game, I need to make a tutorial. I need a solution to a simpler problem, i.e. show the inscription, move the camera, etc.
I want to ask if this asset is suitable for creating a tutorial in the game. It's just that the examples on the official channel are focused on creating quests with dialogues and so on. Is there a lesson where I could look more specifically at solving my problem?
1988Oleg1988
Posts: 11
Joined: Tue Apr 23, 2024 12:23 pm

Re: Creating in-game tutorials

Post by 1988Oleg1988 »

Another error appeared when creating a quest.

StackOverflowException: The requested operation caused a stack overflow.
System.Int32.Equals (System.Int32 obj) <0x272a82da400 + 0x00018> in <1fd52158108c4fe3a6817b50854eb75e>:0
System.Collections.Generic.GenericEqualityComparer`1[T].Equals (T x, T y) (at <1fd52158108c4fe3a6817b50854eb75e>:0)
System.Collections.Generic.Dictionary`2[TKey,TValue].FindEntry (TKey key) (at <1fd52158108c4fe3a6817b50854eb75e>:0)
System.Collections.Generic.Dictionary`2[TKey,TValue].TryGetValue (TKey key, TValue& value) (at <1fd52158108c4fe3a6817b50854eb75e>:0)
PixelCrushers.QuestMachine.Quest.GetContentByID (System.Int32 contentID) (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest.cs:1202)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:26)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
PixelCrushers.QuestMachine.LinkQuestContent.GetEditorName () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Content/LinkQuestContent.cs:27)
User avatar
Tony Li
Posts: 22871
Joined: Thu Jul 18, 2013 1:27 pm

Re: Creating in-game tutorials

Post by Tony Li »

Hi,

Regarding that error, did you try to link the quest content to itself (i.e., link it to the Link quest content)? (In QM version 1.2.51, to prevent you from making this kind of infinite loop, the editor won't allow you to point a Link quest content to a Link quest content.)

Do you happen to have a license for the Dialogue System for Unity? There is a tutorial example for that. You might prefer to use the Dialogue System in this case.

However, if you don't have the Dialogue System, or if you prefer to use Quest Machine, here's a tutorial example:

QM_TutorialExample_2024-12-24.unitypackage
1988Oleg1988
Posts: 11
Joined: Tue Apr 23, 2024 12:23 pm

Re: Creating in-game tutorials

Post by 1988Oleg1988 »

Regarding that error, did you try to link the quest content to itself (i.e., link it to the Link quest content)? (In QM version 1.2.51, to prevent you from making this kind of infinite loop, the editor won't allow you to point a Link quest content to a Link quest content.)
After restarting unity the error disappeared
Do you happen to have a license for the Dialogue System for Unity? There is a tutorial example for that. You might prefer to use the Dialogue System in this case.
Yes, I have a license for the dialog system. I have already used it to create a tutorial.

I still don't understand what the fundamental functional difference is between the Quest machine and the dialogue system. I thought that they complement each other, but I come to the conclusion that these are 2 parallel branches.

I also thought that the Quest machine could save the status of completed quests.
User avatar
Tony Li
Posts: 22871
Joined: Thu Jul 18, 2013 1:27 pm

Re: Creating in-game tutorials

Post by Tony Li »

Hi,

Here's the comparison chart: Dialogue System & Quest Machine

You can use them together (they have integration) or separately.

Quest Machine and the Dialogue System share the same save system. When you import either asset, it imports the save system. Quest Machine can save the state of completed quests. You have the option to remember completed quests or not. See the Quest Journal component's Save Settings > Remember Completed Quests checkbox. Sometimes devs like to UNtick this checkbox so keep the size of the Quest Journal smaller. You can also specify whether to remember a completed quest on the quest itself.
1988Oleg1988
Posts: 11
Joined: Tue Apr 23, 2024 12:23 pm

Re: Creating in-game tutorials

Post by 1988Oleg1988 »

I have read the Save System Manual, but I would like to know if there is a video tutorial?
User avatar
Tony Li
Posts: 22871
Joined: Thu Jul 18, 2013 1:27 pm

Re: Creating in-game tutorials

Post by Tony Li »

Hi,

There's a video tutorial in the Dialogue System playlist: Save System.

Most of the same info applies to Quest Machine since they use the same save system. If you have any questions, don't hesitate to ask. I'll be happy to answer any questions.
1988Oleg1988
Posts: 11
Joined: Tue Apr 23, 2024 12:23 pm

Re: Creating in-game tutorials

Post by 1988Oleg1988 »

Thanks for the help, but I didn't develop any love for quest machines. I'll continue using only the dialogue system. Can I continue asking questions about the dialogue system here or is it better to create a separate topic?
User avatar
Tony Li
Posts: 22871
Joined: Thu Jul 18, 2013 1:27 pm

Re: Creating in-game tutorials

Post by Tony Li »

Hi,

For Dialogue System questions, please create a post in the Dialogue System section to avoid confusion.
1988Oleg1988
Posts: 11
Joined: Tue Apr 23, 2024 12:23 pm

Re: Creating in-game tutorials

Post by 1988Oleg1988 »

What you have done is an incredibly cool system, but unfortunately there are few examples of its use.
Since the system is complex and it is difficult for a beginner to understand what is what, I tried to find examples as similar as possible to my case.
In order to implement the solution to my problem using the principle of analogies.
In my opinion, I lacked a certain fundamental scheme of how things work, where and what scripts should be located.
There was not enough example for implementing quests in a turn-based game, where I built something for the execution of some mission (I gave the construction conditionally).
There was not enough example of how to save and load a dialogue with the built-in system and an external save system with subsequent configuration of the system from the script.

I hope that I did not offend anyone, I just expressed my opinion.
Post Reply