Skip to content

Commit d43753c

Browse files
author
Christian Loock
committed
Part 3 of Dialog System Tutorial
1 parent 81a83f3 commit d43753c

6 files changed

Lines changed: 285 additions & 56 deletions

File tree

Assets/Tutorials/DialogSystem/Prefabs.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!1 &735549112863078398
4+
GameObject:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
serializedVersion: 6
10+
m_Component:
11+
- component: {fileID: 735549112863078397}
12+
- component: {fileID: 735549112863078394}
13+
- component: {fileID: 735549112863078395}
14+
- component: {fileID: 735549112863078396}
15+
m_Layer: 5
16+
m_Name: Option 1
17+
m_TagString: Untagged
18+
m_Icon: {fileID: 0}
19+
m_NavMeshLayer: 0
20+
m_StaticEditorFlags: 0
21+
m_IsActive: 1
22+
--- !u!224 &735549112863078397
23+
RectTransform:
24+
m_ObjectHideFlags: 0
25+
m_CorrespondingSourceObject: {fileID: 0}
26+
m_PrefabInstance: {fileID: 0}
27+
m_PrefabAsset: {fileID: 0}
28+
m_GameObject: {fileID: 735549112863078398}
29+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
30+
m_LocalPosition: {x: 0, y: 0, z: 0}
31+
m_LocalScale: {x: 1, y: 1, z: 1}
32+
m_Children:
33+
- {fileID: 735549113157277457}
34+
m_Father: {fileID: 0}
35+
m_RootOrder: 0
36+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
37+
m_AnchorMin: {x: 0, y: 0.5}
38+
m_AnchorMax: {x: 0, y: 0.5}
39+
m_AnchoredPosition: {x: 228.1, y: -31}
40+
m_SizeDelta: {x: 416.2976, y: 30}
41+
m_Pivot: {x: 0.5, y: 0.5}
42+
--- !u!222 &735549112863078394
43+
CanvasRenderer:
44+
m_ObjectHideFlags: 0
45+
m_CorrespondingSourceObject: {fileID: 0}
46+
m_PrefabInstance: {fileID: 0}
47+
m_PrefabAsset: {fileID: 0}
48+
m_GameObject: {fileID: 735549112863078398}
49+
m_CullTransparentMesh: 0
50+
--- !u!114 &735549112863078395
51+
MonoBehaviour:
52+
m_ObjectHideFlags: 0
53+
m_CorrespondingSourceObject: {fileID: 0}
54+
m_PrefabInstance: {fileID: 0}
55+
m_PrefabAsset: {fileID: 0}
56+
m_GameObject: {fileID: 735549112863078398}
57+
m_Enabled: 1
58+
m_EditorHideFlags: 0
59+
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
60+
m_Name:
61+
m_EditorClassIdentifier:
62+
m_Material: {fileID: 0}
63+
m_Color: {r: 1, g: 1, b: 1, a: 1}
64+
m_RaycastTarget: 1
65+
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
66+
m_Maskable: 1
67+
m_OnCullStateChanged:
68+
m_PersistentCalls:
69+
m_Calls: []
70+
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
71+
m_Type: 1
72+
m_PreserveAspect: 0
73+
m_FillCenter: 1
74+
m_FillMethod: 4
75+
m_FillAmount: 1
76+
m_FillClockwise: 1
77+
m_FillOrigin: 0
78+
m_UseSpriteMesh: 0
79+
m_PixelsPerUnitMultiplier: 1
80+
--- !u!114 &735549112863078396
81+
MonoBehaviour:
82+
m_ObjectHideFlags: 0
83+
m_CorrespondingSourceObject: {fileID: 0}
84+
m_PrefabInstance: {fileID: 0}
85+
m_PrefabAsset: {fileID: 0}
86+
m_GameObject: {fileID: 735549112863078398}
87+
m_Enabled: 1
88+
m_EditorHideFlags: 0
89+
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
90+
m_Name:
91+
m_EditorClassIdentifier:
92+
m_Navigation:
93+
m_Mode: 3
94+
m_SelectOnUp: {fileID: 0}
95+
m_SelectOnDown: {fileID: 0}
96+
m_SelectOnLeft: {fileID: 0}
97+
m_SelectOnRight: {fileID: 0}
98+
m_Transition: 1
99+
m_Colors:
100+
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
101+
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
102+
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
103+
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
104+
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
105+
m_ColorMultiplier: 1
106+
m_FadeDuration: 0.1
107+
m_SpriteState:
108+
m_HighlightedSprite: {fileID: 0}
109+
m_PressedSprite: {fileID: 0}
110+
m_SelectedSprite: {fileID: 0}
111+
m_DisabledSprite: {fileID: 0}
112+
m_AnimationTriggers:
113+
m_NormalTrigger: Normal
114+
m_HighlightedTrigger: Highlighted
115+
m_PressedTrigger: Pressed
116+
m_SelectedTrigger: Selected
117+
m_DisabledTrigger: Disabled
118+
m_Interactable: 1
119+
m_TargetGraphic: {fileID: 735549112863078395}
120+
m_OnClick:
121+
m_PersistentCalls:
122+
m_Calls:
123+
- m_Target: {fileID: 0}
124+
m_TargetAssemblyTypeName: Part2.DialogWindow, Assembly-CSharp
125+
m_MethodName: AnswerClicked
126+
m_Mode: 3
127+
m_Arguments:
128+
m_ObjectArgument: {fileID: 0}
129+
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
130+
m_IntArgument: 0
131+
m_FloatArgument: 0
132+
m_StringArgument:
133+
m_BoolArgument: 0
134+
m_CallState: 2
135+
--- !u!1 &735549113157277458
136+
GameObject:
137+
m_ObjectHideFlags: 0
138+
m_CorrespondingSourceObject: {fileID: 0}
139+
m_PrefabInstance: {fileID: 0}
140+
m_PrefabAsset: {fileID: 0}
141+
serializedVersion: 6
142+
m_Component:
143+
- component: {fileID: 735549113157277457}
144+
- component: {fileID: 735549113157277679}
145+
- component: {fileID: 735549113157277456}
146+
m_Layer: 5
147+
m_Name: Text
148+
m_TagString: Untagged
149+
m_Icon: {fileID: 0}
150+
m_NavMeshLayer: 0
151+
m_StaticEditorFlags: 0
152+
m_IsActive: 1
153+
--- !u!224 &735549113157277457
154+
RectTransform:
155+
m_ObjectHideFlags: 0
156+
m_CorrespondingSourceObject: {fileID: 0}
157+
m_PrefabInstance: {fileID: 0}
158+
m_PrefabAsset: {fileID: 0}
159+
m_GameObject: {fileID: 735549113157277458}
160+
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
161+
m_LocalPosition: {x: 0, y: 0, z: 0}
162+
m_LocalScale: {x: 1, y: 1, z: 1}
163+
m_Children: []
164+
m_Father: {fileID: 735549112863078397}
165+
m_RootOrder: 0
166+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
167+
m_AnchorMin: {x: 0, y: 0}
168+
m_AnchorMax: {x: 1, y: 1}
169+
m_AnchoredPosition: {x: 0, y: 0}
170+
m_SizeDelta: {x: 0, y: 0}
171+
m_Pivot: {x: 0.5, y: 0.5}
172+
--- !u!222 &735549113157277679
173+
CanvasRenderer:
174+
m_ObjectHideFlags: 0
175+
m_CorrespondingSourceObject: {fileID: 0}
176+
m_PrefabInstance: {fileID: 0}
177+
m_PrefabAsset: {fileID: 0}
178+
m_GameObject: {fileID: 735549113157277458}
179+
m_CullTransparentMesh: 0
180+
--- !u!114 &735549113157277456
181+
MonoBehaviour:
182+
m_ObjectHideFlags: 0
183+
m_CorrespondingSourceObject: {fileID: 0}
184+
m_PrefabInstance: {fileID: 0}
185+
m_PrefabAsset: {fileID: 0}
186+
m_GameObject: {fileID: 735549113157277458}
187+
m_Enabled: 1
188+
m_EditorHideFlags: 0
189+
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
190+
m_Name:
191+
m_EditorClassIdentifier:
192+
m_Material: {fileID: 0}
193+
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
194+
m_RaycastTarget: 1
195+
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
196+
m_Maskable: 1
197+
m_OnCullStateChanged:
198+
m_PersistentCalls:
199+
m_Calls: []
200+
m_FontData:
201+
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
202+
m_FontSize: 14
203+
m_FontStyle: 0
204+
m_BestFit: 0
205+
m_MinSize: 10
206+
m_MaxSize: 40
207+
m_Alignment: 4
208+
m_AlignByGeometry: 0
209+
m_RichText: 1
210+
m_HorizontalOverflow: 0
211+
m_VerticalOverflow: 0
212+
m_LineSpacing: 1
213+
m_Text: Button

Assets/Tutorials/DialogSystem/Prefabs/OptionButton.prefab.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
using System;
1+
using System;
2+
using System.Collections.Generic;
23

34
namespace Tutorials.DialogSystem.Scripts
45
{
56
[Serializable]
67
public class DialogSegment
78
{
9+
public DialogSegment()
10+
{
11+
Answers = new List<string>();
12+
SegmentAfterAnswer = new List<int>();
13+
}
814

915
public string DialogText;
1016

11-
public string Answer1;
12-
13-
public string Answer2;
14-
15-
public string Answer3;
16-
17-
public string Answer4;
18-
19-
public int SegmentAfterAnswer1 = -1;
20-
public int SegmentAfterAnswer2 = -1;
21-
public int SegmentAfterAnswer3 = -1;
22-
public int SegmentAfterAnswer4 = -1;
17+
public List<string> Answers;
18+
19+
public List<int> SegmentAfterAnswer;
20+
2321
}
2422
}
Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using TMPro;
1+
using System.Collections.Generic;
2+
using TMPro;
23
using UnityEngine;
34
using UnityEngine.UI;
45

@@ -8,38 +9,25 @@ public class DialogWindow : MonoBehaviour
89
{
910
public TMP_Text dialogText;
1011

11-
public Button Option1Button;
12-
public Button Option2Button;
13-
public Button Option3Button;
14-
public Button Option4Button;
12+
public List<Button> OptionButtons;
1513

1614
public Dialog activeDialog;
17-
15+
16+
public GameObject buttonPrefab;
17+
18+
public Transform buttonParent;
19+
1820
private int segmentIndex = 0;
19-
21+
2022
void Start()
2123
{
22-
UpdateDialog(activeDialog.segments[segmentIndex]);
24+
UpdateDialog(activeDialog.segments[segmentIndex]);
2325
}
2426

2527
public void AnswerClicked(int answerIndex)
2628
{
27-
switch (answerIndex)
28-
{
29-
case 0:
30-
segmentIndex = activeDialog.segments[segmentIndex].SegmentAfterAnswer1;
31-
break;
32-
case 1:
33-
segmentIndex = activeDialog.segments[segmentIndex].SegmentAfterAnswer2;
34-
break;
35-
case 2:
36-
segmentIndex = activeDialog.segments[segmentIndex].SegmentAfterAnswer3;
37-
break;
38-
case 3:
39-
segmentIndex = activeDialog.segments[segmentIndex].SegmentAfterAnswer4;
40-
break;
41-
}
42-
29+
segmentIndex = activeDialog.segments[segmentIndex].SegmentAfterAnswer[answerIndex];
30+
4331
if (segmentIndex < 0)
4432
{
4533
gameObject.SetActive(false);
@@ -50,14 +38,27 @@ public void AnswerClicked(int answerIndex)
5038
UpdateDialog(activeDialog.segments[segmentIndex]);
5139
}
5240
}
53-
41+
5442
private void UpdateDialog(DialogSegment newSegment)
5543
{
5644
dialogText.text = newSegment.DialogText;
57-
Option1Button.GetComponentInChildren<Text>().text = newSegment.Answer1;
58-
Option2Button.GetComponentInChildren<Text>().text = newSegment.Answer2;
59-
Option3Button.GetComponentInChildren<Text>().text = newSegment.Answer3;
60-
Option4Button.GetComponentInChildren<Text>().text = newSegment.Answer4;
45+
int answerIndex = 0;
46+
foreach (Transform child in buttonParent) {
47+
Destroy(child.gameObject);
48+
}
49+
foreach (var answer in newSegment.Answers)
50+
{
51+
var btn = Instantiate(buttonPrefab, buttonParent);
52+
btn.GetComponentInChildren<Text>().text = answer;
53+
54+
var index = answerIndex;
55+
btn.GetComponentInChildren<Button>().onClick.AddListener((() =>
56+
{
57+
AnswerClicked(index);
58+
}));
59+
60+
answerIndex++;
61+
}
6162
}
6263
}
6364
}

0 commit comments

Comments
 (0)