From d72799233ea9dca885573aa0602421a3e14507c8 Mon Sep 17 00:00:00 2001 From: KG0104 <76601263+KG0104@users.noreply.github.com> Date: Sun, 29 Aug 2021 12:01:03 +0200 Subject: [PATCH] Dialog-System v0.3 --- 2DGame/Assets/Animations/speech_bubble.anim | 277 +++++++++++++++++ .../Assets/Animations/speech_bubble.anim.meta | 8 + .../Animations/speech_bubble.controller | 72 +++++ .../Animations/speech_bubble.controller.meta | 8 + .../(1) Green_Idyll/green_idyll_1.unity | 288 +++++++++++++----- 2DGame/Assets/Scripts/Dialogue/Dialogue.cs | 21 +- .../Scripts/Dialogue/DialogueTrigger.cs | 26 ++ .../Scripts/Dialogue/DialogueTrigger.cs.meta | 11 + .../Assets/Scripts/Dialogue/SpeechBubble.cs | 23 ++ .../Scripts/Dialogue/SpeechBubble.cs.meta | 11 + 2DGame/Assets/Sprites/speech_bubble.png | Bin 0 -> 26480 bytes 2DGame/Assets/Sprites/speech_bubble.png.meta | 96 ++++++ 12 files changed, 756 insertions(+), 85 deletions(-) create mode 100644 2DGame/Assets/Animations/speech_bubble.anim create mode 100644 2DGame/Assets/Animations/speech_bubble.anim.meta create mode 100644 2DGame/Assets/Animations/speech_bubble.controller create mode 100644 2DGame/Assets/Animations/speech_bubble.controller.meta create mode 100644 2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs create mode 100644 2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs.meta create mode 100644 2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs create mode 100644 2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs.meta create mode 100644 2DGame/Assets/Sprites/speech_bubble.png create mode 100644 2DGame/Assets/Sprites/speech_bubble.png.meta diff --git a/2DGame/Assets/Animations/speech_bubble.anim b/2DGame/Assets/Animations/speech_bubble.anim new file mode 100644 index 0000000..cc1cac0 --- /dev/null +++ b/2DGame/Assets/Animations/speech_bubble.anim @@ -0,0 +1,277 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: speech_bubble + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.5 + value: {x: 1.1, y: 1.1, z: 1} + inSlope: {x: 0.20000005, y: 0.20000005, z: 0} + outSlope: {x: 0.20000005, y: 0.20000005, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 1.2, y: 1.2, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1.5 + value: {x: 1.1, y: 1.1, z: 1} + inSlope: {x: -0.20000005, y: -0.20000005, z: 0} + outSlope: {x: -0.20000005, y: -0.20000005, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 2 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 10 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 3 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 2 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1.1 + inSlope: 0.20000005 + outSlope: 0.20000005 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 1.1 + inSlope: -0.20000005 + outSlope: -0.20000005 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1.1 + inSlope: 0.20000005 + outSlope: 0.20000005 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 1.1 + inSlope: -0.20000005 + outSlope: -0.20000005 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/2DGame/Assets/Animations/speech_bubble.anim.meta b/2DGame/Assets/Animations/speech_bubble.anim.meta new file mode 100644 index 0000000..5bc5b9e --- /dev/null +++ b/2DGame/Assets/Animations/speech_bubble.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2be9914fdf608d45b31976944a3954e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/2DGame/Assets/Animations/speech_bubble.controller b/2DGame/Assets/Animations/speech_bubble.controller new file mode 100644 index 0000000..c11e817 --- /dev/null +++ b/2DGame/Assets/Animations/speech_bubble.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-6657594844667950930 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: speech_bubble + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: e2be9914fdf608d45b31976944a3954e, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &-624500777285687584 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -6657594844667950930} + m_Position: {x: 200, y: 0, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -6657594844667950930} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: speech_bubble + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -624500777285687584} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} diff --git a/2DGame/Assets/Animations/speech_bubble.controller.meta b/2DGame/Assets/Animations/speech_bubble.controller.meta new file mode 100644 index 0000000..4685cab --- /dev/null +++ b/2DGame/Assets/Animations/speech_bubble.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b6703d573b0c6e458363c551bf5d5bf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/2DGame/Assets/Scenes/(1) Green_Idyll/green_idyll_1.unity b/2DGame/Assets/Scenes/(1) Green_Idyll/green_idyll_1.unity index e7ebe64..eaed684 100644 --- a/2DGame/Assets/Scenes/(1) Green_Idyll/green_idyll_1.unity +++ b/2DGame/Assets/Scenes/(1) Green_Idyll/green_idyll_1.unity @@ -1035,7 +1035,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &87876804 RectTransform: m_ObjectHideFlags: 0 @@ -3945,7 +3945,7 @@ RectTransform: m_Children: - {fileID: 1975103216} m_Father: {fileID: 1304108837} - m_RootOrder: 1 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} @@ -4922,6 +4922,127 @@ Transform: m_Father: {fileID: 1452174929} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &631343912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 631343914} + - component: {fileID: 631343913} + - component: {fileID: 631343915} + - component: {fileID: 631343916} + m_Layer: 0 + m_Name: speech_bubble + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &631343913 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 631343912} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 2 + m_Sprite: {fileID: 21300000, guid: 064d1cf1a8441c74d9244994baac7a5a, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 6.27, y: 6.25} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &631343914 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 631343912} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -7.0460243, y: 9.578475, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 132 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &631343915 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 631343912} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 5b6703d573b0c6e458363c551bf5d5bf, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &631343916 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 631343912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aec751965eb08894180422494fd03a80, type: 3} + m_Name: + m_EditorClassIdentifier: + dialogueManager: {fileID: 2036393123} + speakers: + - {fileID: 1423490228} + - {fileID: 1423490228} + - {fileID: 1423490228} + - {fileID: 1423490228} --- !u!1 &650261600 GameObject: m_ObjectHideFlags: 0 @@ -10562,12 +10683,12 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 1304108837} - m_RootOrder: 2 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -0.000091552734} - m_SizeDelta: {x: 298.3, y: 154.14} + m_AnchoredPosition: {x: -0.24603, y: 19.81} + m_SizeDelta: {x: 477.09, y: 131.5} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &746902508 MonoBehaviour: @@ -10736,6 +10857,36 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 51 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &791090329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 791090330} + m_Layer: 0 + m_Name: bubblePos (1) + m_TagString: Untagged + m_Icon: {fileID: -1412012063857583412, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &791090330 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791090329} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 2.71, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 936765971} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &794806973 GameObject: m_ObjectHideFlags: 0 @@ -11821,6 +11972,7 @@ Transform: m_Children: - {fileID: 972365582} - {fileID: 722593448} + - {fileID: 791090330} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -27902,7 +28054,6 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 1691028830} - {fileID: 445692661} - {fileID: 746902507} m_Father: {fileID: 1107270362} @@ -28203,6 +28354,7 @@ GameObject: - component: {fileID: 1343376134} - component: {fileID: 1343376133} - component: {fileID: 1343376135} + - component: {fileID: 1343376136} m_Layer: 0 m_Name: prof_tutori m_TagString: Untagged @@ -28271,7 +28423,8 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.25, y: 3.65, z: 0} m_LocalScale: {x: -1, y: 1, z: 1} - m_Children: [] + m_Children: + - {fileID: 1423490228} m_Father: {fileID: 0} m_RootOrder: 131 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -28301,6 +28454,19 @@ BoxCollider2D: serializedVersion: 2 m_Size: {x: 4.6612864, y: 47.08811} m_EdgeRadius: 0 +--- !u!114 &1343376136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343376132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 04fb4457cc4eca346ae4b0599f20569e, type: 3} + m_Name: + m_EditorClassIdentifier: + DialogueManager: {fileID: 2036393123} --- !u!1 &1356534580 GameObject: m_ObjectHideFlags: 0 @@ -29277,6 +29443,36 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1423490227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1423490228} + m_Layer: 0 + m_Name: bubblePos + m_TagString: Untagged + m_Icon: {fileID: -1412012063857583412, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1423490228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423490227} + m_LocalRotation: {x: -0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.3, y: 5.3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1343376134} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1452174928 GameObject: m_ObjectHideFlags: 0 @@ -31087,81 +31283,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: green: {fileID: 21300000, guid: f2a243993330e8e40857102cf3351e52, type: 3} ---- !u!1 &1691028829 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1691028830} - - component: {fileID: 1691028832} - - component: {fileID: 1691028831} - m_Layer: 0 - m_Name: Speaker - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1691028830 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1691028829} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1304108837} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 44.300003, y: -41.3} - m_SizeDelta: {x: 68.766, y: 68.489} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1691028831 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1691028829} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: e8c3141280d9cb64885a2cfaad7a1167, type: 3} - m_Type: 0 - m_PreserveAspect: 1 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1691028832 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1691028829} - m_CullTransparentMesh: 1 --- !u!1 &1723894137 GameObject: m_ObjectHideFlags: 0 @@ -34818,12 +34939,15 @@ MonoBehaviour: m_EditorClassIdentifier: continueButton: {fileID: 445692660} dialogueBox: {fileID: 1304108836} + SpeechBubble: {fileID: 631343912} + mouse: {fileID: 936765968} dialogueText: {fileID: 746902508} sentences: - Hallo, ich bin Professor Tutori. - Was geht ab? - "Ich werde dir alles erkl\xE4ren." - In Ordnung? + index: 0 typingSpeed: 0.04 --- !u!4 &2036393125 Transform: diff --git a/2DGame/Assets/Scripts/Dialogue/Dialogue.cs b/2DGame/Assets/Scripts/Dialogue/Dialogue.cs index fd6cde1..d9fcebd 100644 --- a/2DGame/Assets/Scripts/Dialogue/Dialogue.cs +++ b/2DGame/Assets/Scripts/Dialogue/Dialogue.cs @@ -7,14 +7,23 @@ public class Dialogue : MonoBehaviour { public GameObject continueButton; public GameObject dialogueBox; + public GameObject SpeechBubble; + public GameObject mouse; + + SpeechBubble speechBubble; + public Text dialogueText; + public string[] sentences; - private int index; + public int index; + public float typingSpeed; void Start() { - StartCoroutine(Type()); + dialogueBox.SetActive(false); + SpeechBubble.SetActive(false); + speechBubble = SpeechBubble.GetComponent(); } void Update() @@ -25,8 +34,11 @@ public class Dialogue : MonoBehaviour } } - IEnumerator Type() + public IEnumerator Type() { + dialogueBox.SetActive(true); + speechBubble.NextSpeaker(); + SpeechBubble.SetActive(true); foreach (char letter in sentences[index].ToCharArray()) { dialogueText.text += letter; @@ -43,11 +55,14 @@ public class Dialogue : MonoBehaviour index++; dialogueText.text = ""; StartCoroutine(Type()); + speechBubble.NextSpeaker(); } else { dialogueText.text = ""; dialogueBox.SetActive(false); + SpeechBubble.SetActive(false); + mouse.GetComponent().constraints = RigidbodyConstraints2D.FreezeRotation; } } } diff --git a/2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs b/2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs new file mode 100644 index 0000000..cb9eb62 --- /dev/null +++ b/2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class DialogueTrigger : MonoBehaviour +{ + [SerializeField] + GameObject DialogueManager; + + Dialogue dialogue; + + void Start() + { + dialogue = DialogueManager.GetComponent(); + } + + private void OnTriggerEnter2D(Collider2D collision) + { + if(collision.gameObject.CompareTag("Player")) + { + StartCoroutine(dialogue.Type()); + collision.gameObject.GetComponent().constraints = RigidbodyConstraints2D.FreezeAll; + GetComponent().enabled = false; + } + } +} \ No newline at end of file diff --git a/2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs.meta b/2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs.meta new file mode 100644 index 0000000..3cd9bf6 --- /dev/null +++ b/2DGame/Assets/Scripts/Dialogue/DialogueTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04fb4457cc4eca346ae4b0599f20569e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs b/2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs new file mode 100644 index 0000000..4e31d8a --- /dev/null +++ b/2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class SpeechBubble : MonoBehaviour +{ + [SerializeField] + GameObject dialogueManager; + + Dialogue dialogue; + + public Transform[] speakers; + + void Start() + { + dialogue = dialogueManager.GetComponent(); + } + + public void NextSpeaker() + { + transform.position = speakers[dialogue.index].position; + } +} diff --git a/2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs.meta b/2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs.meta new file mode 100644 index 0000000..4aa4c44 --- /dev/null +++ b/2DGame/Assets/Scripts/Dialogue/SpeechBubble.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aec751965eb08894180422494fd03a80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/2DGame/Assets/Sprites/speech_bubble.png b/2DGame/Assets/Sprites/speech_bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc808400580dffd617d963c29fb29c18e354a80 GIT binary patch literal 26480 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

LNc~XRT-TnYS})ed+_n?8^S_gz^Ph zLZU~HL+4e18@$uc1hID5&z$y-%-K{=#hzQtc}K`LyGP=xWE3W@@<2e%??1%prF=P8 z=D2)S@hu@cCINPz3!*8AYYUoU3}92;n=vgi$=-{vokB(S*vWb~yTxf-ys;cT%@Rqu z+p~mXpNZGXO`k?Zc3}xbOdWRYZW}|eSI7CDU!Xa9Q8_*h-}B=42p~^(s8)zOy4v!X z*{D%SsBkCOa$j=G6xv&7CHl0AnC!xi)-VLO&E66^961Xt9rJXgUpJH~KC?#D7FTd< ze23jzWR$l@+dj%$_1c>*4h?lUc%)RLQAA>o!+p$R{Dip?k~MB9EHMMNrBxp1r7a)l zml7u_6J{T*{i9ItcpeSlJVYevh+_M&Fn!imHcxUkPc`7U*v?+zn&UsH4k-dqS^mAJ z?+=G!n{SY-HOG(fue@UpoBQlZwZ1Qc4(*xa5Zp?35H!DKu`nE}>+)tD6J&4K>u`z)hW^IZDXn^H4X^FpYNeikO*|{Qw=l zZKB1z6x&|51prSDbXi;oB_`gkoM$`@8!-#ewt;c>LBTu9J$icod}0P)ka^X!Vf7s$ zRvhsx?v&3ZZkv>Q$H2LpOgmfwR;V-AP76yPG(>i9U3Y3XXyVC1#Ym(n-UC@SWG%lq zXgxG9M>XIdu`sx7a=eY^do**np+4k)5_{YryAel2rt#c?ZP9+>?bhptDDVqeNFa3{ zxCcsfV7I^)A-8$x01z^G`rc6pp<7NujLbUMli}PDmO71g()&&5A4xB2X*N`;m?ni1 z6unP~IuYQzLLKyB=$c$z-nI|cuiD$*tpxogUhLvMkPK`Zp>8{~H7I9awpdPq4?I$S z-kX0I4d?j$p@+Kr?o7;>b1$CzEua@Cwz$7zqQZP2zyGhqm%B;*S^>!!eqVL|7!0O$ zd#>G}V~>i`|I|(;$5%ZM=f3m!6EBq=RhgLcVM~=9ZV!+xU)B)4$7z{V5Pj+U1rgMg z<0=18)RaMKz52J$TCB7ESY*!CAsuaLNbs8Q7&Kzes}cF$Zi41#HPNEd@(N!Trw@S z6d`p$7X;Xk$9vfrYB5(dqv9EAIJeW$TLW1uTFvP4D?AsMd*b!n`|hKEtZi`w9=Wk` z&-{I-r4YYAlMpEBncu!?VyD2llV}la`L2-EgLF)3rkMs(L^%0rmn#&$aYh@4vD2nN zCYniRO#I