From f835adaa2349edbbf112634e49fdebfdf8af0264 Mon Sep 17 00:00:00 2001 From: Jelle De Geest Date: Wed, 22 Mar 2023 16:46:07 +0000 Subject: [PATCH] Resolve WES-75 "Hangman integration" --- Assets/Hangman/Scenes/Hangman.unity | 636 ++++++++++++++++-- .../Hangman/Scripts/HangmanGameController.cs | 60 +- Assets/MediaPipeUnity/Scripts/Feedback.cs | 94 +-- .../MediaPipeUnity/Scripts/SignPredictor.cs | 26 + ProjectSettings/BurstAotSettings_WebGL.json | 14 + ProjectSettings/EditorBuildSettings.asset | 3 + ProjectSettings/TimelineSettings.asset | 16 + 7 files changed, 722 insertions(+), 127 deletions(-) create mode 100644 ProjectSettings/BurstAotSettings_WebGL.json create mode 100644 ProjectSettings/TimelineSettings.asset diff --git a/Assets/Hangman/Scenes/Hangman.unity b/Assets/Hangman/Scenes/Hangman.unity index 8966559..d195734 100644 --- a/Assets/Hangman/Scenes/Hangman.unity +++ b/Assets/Hangman/Scenes/Hangman.unity @@ -128,53 +128,6 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 8299246693487308515, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} m_PrefabInstance: {fileID: 1290865991} m_PrefabAsset: {fileID: 0} ---- !u!1 &18748060 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 18748061} - - component: {fileID: 18748062} - m_Layer: 0 - m_Name: Webcam-controller - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &18748061 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 18748060} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1189, y: -82, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &18748062 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 18748060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a62d2b8bded916443835dc19010b83c1, type: 3} - m_Name: - m_EditorClassIdentifier: - display: {fileID: 1649505745} - display1: {fileID: 1554139454} - display2: {fileID: 1649505745} --- !u!1 &22296548 GameObject: m_ObjectHideFlags: 0 @@ -1171,6 +1124,18 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 + - m_Target: {fileID: 1991376311} + m_TargetAssemblyTypeName: Mediapipe.Unity.Tutorial.SignPredictor, SignPredictor + m_MethodName: SwapScreen + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!114 &337000955 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2605,7 +2570,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &896343212 GameObject: @@ -3570,7 +3535,6 @@ MonoBehaviour: playerPanel: {fileID: 1892638587} inputPanel: {fileID: 56162989} inputTextField: {fileID: 1268894660} - webcam: {fileID: 18748062} endText: {fileID: 828446579} gameEndedPanel: {fileID: 1943022819} replayButton: {fileID: 1233450537} @@ -3585,6 +3549,8 @@ MonoBehaviour: Scoreboard: {fileID: 1007532375} EntriesGrid: {fileID: 1391137944} scoreboardEntry: {fileID: 9154151134820372555, guid: d4a3a228b08d61847acc6da35b44e52c, type: 3} + feedback: {fileID: 5233312447513285388} + gottogamebutton: {fileID: 1581633295} --- !u!1001 &1290865991 PrefabInstance: m_ObjectHideFlags: 0 @@ -3599,14 +3565,14 @@ PrefabInstance: - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: - objectReference: {fileID: 18748062} + objectReference: {fileID: 1591826840} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: GotoThemeSelection + value: Back objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: HangManWebcam, Assembly-CSharp + value: BackButton, CommonScripts objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument @@ -3702,6 +3668,17 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} +--- !u!114 &1290865992 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4518652150503380115, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} + m_PrefabInstance: {fileID: 1290865991} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c3dd279b546423e4a8a1b28819a6c4a1, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1361844164 GameObject: m_ObjectHideFlags: 0 @@ -4049,14 +4026,14 @@ PrefabInstance: - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: - objectReference: {fileID: 18748062} + objectReference: {fileID: 1591826840} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: GotoThemeSelection + value: Back objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: HangManWebcam, Assembly-CSharp + value: BackButton, CommonScripts objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument @@ -4906,7 +4883,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &1581633296 RectTransform: m_ObjectHideFlags: 0 @@ -4984,6 +4961,18 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 + - m_Target: {fileID: 1991376311} + m_TargetAssemblyTypeName: Mediapipe.Unity.Tutorial.SignPredictor, SignPredictor + m_MethodName: SwapScreen + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!114 &1581633298 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5036,14 +5025,14 @@ PrefabInstance: - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: - objectReference: {fileID: 18748062} + objectReference: {fileID: 1290865992} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: GotoThemeSelection + value: Back objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: HangManWebcam, Assembly-CSharp + value: BackButton, CommonScripts objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument @@ -5144,6 +5133,17 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 8299246693487308515, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} m_PrefabInstance: {fileID: 1591826838} m_PrefabAsset: {fileID: 0} +--- !u!114 &1591826840 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4518652150503380115, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} + m_PrefabInstance: {fileID: 1591826838} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c3dd279b546423e4a8a1b28819a6c4a1, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1649505743 GameObject: m_ObjectHideFlags: 0 @@ -6215,6 +6215,55 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1943022819} m_CullTransparentMesh: 1 +--- !u!1 &1991376310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1991376312} + - component: {fileID: 1991376311} + m_Layer: 0 + m_Name: SignPredictorController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1991376311 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1991376310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 043ccd99cf82b3cc9bf2e00956ce2b93, type: 3} + m_Name: + m_EditorClassIdentifier: + model: {fileID: 5022602860645237092, guid: 2594d8a9acfef6c4b88ce2618c4169cb, type: 3} + modelInfoFile: {fileID: 4900000, guid: fb8b51022bdcd654a9f29c054832a1b5, type: 3} + configAsset: {fileID: 4900000, guid: 6288c43cdca97374782dac1ea87aa029, type: 3} + screen: {fileID: 1649505745} + screen2: {fileID: 1554139454} +--- !u!4 &1991376312 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1991376310} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2001212056 GameObject: m_ObjectHideFlags: 0 @@ -6426,3 +6475,472 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2039368310} m_CullTransparentMesh: 1 +--- !u!114 &5233312447201393291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312447201393293} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_FillRect: {fileID: 5233312447919013132} + m_HandleRect: {fileID: 0} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!224 &5233312447201393292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312447201393293} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5233312448534255807} + - {fileID: 5233312448785575104} + m_Father: {fileID: 5233312447513285389} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 50} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &5233312447201393293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5233312447201393292} + - component: {fileID: 5233312447201393291} + m_Layer: 5 + m_Name: Progress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &5233312447513285388 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312447513285390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 44e682a32ee15cc489bf50f3a06f717b, type: 3} + m_Name: + m_EditorClassIdentifier: + feedbackText: {fileID: 0} + feedbackProgress: {fileID: 0} + feedbackProgressImage: {fileID: 0} + signPredictor: {fileID: 1991376311} +--- !u!224 &5233312447513285389 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312447513285390} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5233312448025626847} + - {fileID: 5233312447201393292} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 960, y: 200} + m_SizeDelta: {x: 500, y: 150} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &5233312447513285390 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5233312447513285389} + - component: {fileID: 5233312447513285388} + m_Layer: 5 + m_Name: Feedback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5233312447919013132 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312447919013135} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5233312448785575104} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5233312447919013133 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312447919013135} + m_CullTransparentMesh: 1 +--- !u!114 &5233312447919013134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312447919013135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0, b: 0, 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5233312447919013135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5233312447919013132} + - component: {fileID: 5233312447919013133} + - component: {fileID: 5233312447919013134} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &5233312448025626832 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312448025626834} + m_CullTransparentMesh: 1 +--- !u!114 &5233312448025626833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312448025626834} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 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_text: Detecteren ... + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282188031 + m_fontColor: {r: 1, g: 0, b: 0.23945475, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 48 + m_fontSizeBase: 48 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &5233312448025626834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5233312448025626847} + - component: {fileID: 5233312448025626832} + - component: {fileID: 5233312448025626833} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5233312448025626847 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312448025626834} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5233312447513285389} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 500, y: 100} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &5233312448534255792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5233312448534255807} + - component: {fileID: 5233312448534255805} + - component: {fileID: 5233312448534255806} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &5233312448534255805 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312448534255792} + m_CullTransparentMesh: 1 +--- !u!114 &5233312448534255806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312448534255792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 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: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &5233312448534255807 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312448534255792} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5233312447201393292} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &5233312448785575104 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233312448785575105} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5233312447919013132} + m_Father: {fileID: 5233312447201393292} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &5233312448785575105 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5233312448785575104} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 diff --git a/Assets/Hangman/Scripts/HangmanGameController.cs b/Assets/Hangman/Scripts/HangmanGameController.cs index a131a93..ecb8885 100644 --- a/Assets/Hangman/Scripts/HangmanGameController.cs +++ b/Assets/Hangman/Scripts/HangmanGameController.cs @@ -110,11 +110,6 @@ public class HangmanGameController : MonoBehaviour /// private int mode; - /// - /// We give the controller access to the webcam so that it can toggle between the two displays effectivelly. - /// - public HangManWebcam webcam; - // The following attributes are necessary to finish and gameover /// @@ -200,14 +195,27 @@ public class HangmanGameController : MonoBehaviour /// public GameObject scoreboardEntry; + /// + /// Accuracy feeback object + /// + public Feedback feedback; + + /// + /// The button to go into the game + /// + public GameObject gottogamebutton; + + /// + /// Current sign out of the predictor + /// + private String currentsign = ""; + // Start is called before the first frame update void Start() { // Make sure the mode starts at zero mode = 0; - // Make sure that the webcam is turned off - webcam.StopCam(); // Make sure that only the player-selection panel is the one shown gamePanel.SetActive(false); @@ -226,6 +234,16 @@ public class HangmanGameController : MonoBehaviour user.minigames.Add(progress); } userList.Save(); + + // Set calllbacks + feedback.getSignCallback = () => + { + return "A"; + }; + feedback.predictSignCallback = (sign) => + { + currentsign = sign; + }; } /// @@ -271,10 +289,6 @@ public class HangmanGameController : MonoBehaviour currentWord = ""; inputTextField.text = currentWord.ToString(); - // Switch to the P1-display and Turn the webcam on - webcam.Switch_texture(); - webcam.PlayCam(); - // Activate the right panel gamePanel.SetActive(false); inputPanel.SetActive(true); @@ -288,9 +302,6 @@ public class HangmanGameController : MonoBehaviour // This word is used for testing before dynamic word-fetching is added PickRandomWord(); - // Turn the webcam on - webcam.PlayCam(); - StartGame(); } /// @@ -320,10 +331,7 @@ public class HangmanGameController : MonoBehaviour public void TwoPlayer() { if (currentWord.Length >= 2) - { - // Switch display to the P2-display - webcam.Switch_texture(); - + { StartGame(); } } @@ -334,7 +342,14 @@ public class HangmanGameController : MonoBehaviour public void Update() { if(mode == 1) - { + { + if (currentsign != "") + { + char letter = currentsign.ToLower()[0]; + currentsign = ""; + currentWord = currentWord + letter.ToString(); + inputTextField.text = currentWord.ToString(); + } // We are in the word-input mode // We want to show the user what they are typing // Check to make sure the inputfield is not empty @@ -357,7 +372,7 @@ public class HangmanGameController : MonoBehaviour inputTextField.text = currentWord.ToString(); } } - + gottogamebutton.SetActive(currentWord.Length >2); } if (mode == 2) @@ -369,9 +384,10 @@ public class HangmanGameController : MonoBehaviour // For the first input char given by the user, check if the letter is in the word that needs to be spelled. // Check to make sure the inputfield is not empty - if (Input.inputString != "") + if (currentsign != "") { - char firstLetter = Input.inputString.ToLower()[0]; + char firstLetter = currentsign.ToLower()[0]; + currentsign = ""; // Check if the letter is a valid guess and that it has not been guessed before if (!guesses.Contains(firstLetter) && guessables.Contains(firstLetter)) { diff --git a/Assets/MediaPipeUnity/Scripts/Feedback.cs b/Assets/MediaPipeUnity/Scripts/Feedback.cs index e00e281..bbb88a0 100644 --- a/Assets/MediaPipeUnity/Scripts/Feedback.cs +++ b/Assets/MediaPipeUnity/Scripts/Feedback.cs @@ -80,57 +80,58 @@ public class Feedback : MonoBehaviour // Get current sign string currentSign = getSignCallback(); - // Get the predicted sign if (signPredictor != null && signPredictor.learnableProbabilities != null && currentSign != null && signPredictor.learnableProbabilities.ContainsKey(currentSign)) - { + { float accuracy = signPredictor.learnableProbabilities[currentSign]; - if (accuracy > 0.98) - { - // TODO: fix emojis - feedbackText.text = "✨ Perfect ✨"; - Color col = new Color(0xff / 255.0f, 0xcc / 255.0f, 0x00 / 255.0f); - feedbackText.color = col; - feedbackProgressImage.color = col; - } - else if (accuracy > 0.95) - { - feedbackText.text = "Super!"; - Color col = new Color(0x00 / 255.0f, 0xff / 255.0f, 0xcc / 255.0f); - feedbackText.color = col; - feedbackProgressImage.color = col; - } - else if (accuracy > 0.90) - { - feedbackText.text = "Goed"; - feedbackText.color = Color.green; - feedbackProgressImage.color = Color.green; - } - else if (accuracy > 0.80) - { - feedbackText.text = "Bijna..."; - Color col = new Color(0xff / 255.0f, 0x66 / 255.0f, 0x00 / 255.0f); - feedbackText.color = col; - feedbackProgressImage.color = col; - } - else - { - feedbackText.text = "Detecteren..."; - feedbackText.color = Color.red; - feedbackProgressImage.color = Color.red; - } - - float oldValue = feedbackProgress.value; - // use an exponential scale - float newValue = Mathf.Exp(4 * (accuracy - 1.0f)); - feedbackProgress.gameObject.Tween("FeedbackUpdate", oldValue, newValue, 0.2f, TweenScaleFunctions.CubicEaseInOut, (t) => - { - if (feedbackProgress != null) + if (feedbackText != null && feedbackProgressImage != null){ + if (accuracy > 0.98) { - feedbackProgress.value = t.CurrentValue; + // TODO: fix emojis + feedbackText.text = "✨ Perfect ✨"; + Color col = new Color(0xff / 255.0f, 0xcc / 255.0f, 0x00 / 255.0f); + feedbackText.color = col; + feedbackProgressImage.color = col; } - }); + else if (accuracy > 0.95) + { + feedbackText.text = "Super!"; + Color col = new Color(0x00 / 255.0f, 0xff / 255.0f, 0xcc / 255.0f); + feedbackText.color = col; + feedbackProgressImage.color = col; + } + else if (accuracy > 0.90) + { + feedbackText.text = "Goed"; + feedbackText.color = Color.green; + feedbackProgressImage.color = Color.green; + } + else if (accuracy > 0.80) + { + feedbackText.text = "Bijna..."; + Color col = new Color(0xff / 255.0f, 0x66 / 255.0f, 0x00 / 255.0f); + feedbackText.color = col; + feedbackProgressImage.color = col; + } + else + { + feedbackText.text = "Detecteren..."; + feedbackText.color = Color.red; + feedbackProgressImage.color = Color.red; + } + + float oldValue = feedbackProgress.value; + // use an exponential scale + float newValue = Mathf.Exp(4 * (accuracy - 1.0f)); + feedbackProgress.gameObject.Tween("FeedbackUpdate", oldValue, newValue, 0.2f, TweenScaleFunctions.CubicEaseInOut, (t) => + { + if (feedbackProgress != null) + { + feedbackProgress.value = t.CurrentValue; + } + }); + } // Check whether (in)correct sign has high accuracy foreach (var kv in signPredictor.learnableProbabilities) @@ -167,8 +168,9 @@ public class Feedback : MonoBehaviour } } } - else + else if(feedbackProgress != null) { + feedbackProgress.value = 0.0f; } } diff --git a/Assets/MediaPipeUnity/Scripts/SignPredictor.cs b/Assets/MediaPipeUnity/Scripts/SignPredictor.cs index 072174e..b1d8338 100644 --- a/Assets/MediaPipeUnity/Scripts/SignPredictor.cs +++ b/Assets/MediaPipeUnity/Scripts/SignPredictor.cs @@ -45,6 +45,12 @@ namespace Mediapipe.Unity.Tutorial [SerializeField] private RawImage screen; + /// + /// A secondary optional screen object on which the video is displayed + /// + [SerializeField] + private RawImage screen2; + /// /// MediaPipe graph /// @@ -161,6 +167,10 @@ namespace Mediapipe.Unity.Tutorial float webcamAspect = (float)webcamTexture.width / (float)webcamTexture.height; screen.rectTransform.sizeDelta = new Vector2(screen.rectTransform.sizeDelta.y * webcamAspect, (screen.rectTransform.sizeDelta.y)); screen.texture = webcamTexture; + if(screen2 != null) + { + screen2.rectTransform.sizeDelta = new Vector2(screen2.rectTransform.sizeDelta.y * webcamAspect, (screen2.rectTransform.sizeDelta.y)); + } // TODO this method is kinda meh you should use inputTexture = new Texture2D(width, height, TextureFormat.RGBA32, false); @@ -368,5 +378,21 @@ namespace Mediapipe.Unity.Tutorial webcamTexture.Play(); } } + /// + /// Swaps the display screens + /// + public void SwapScreen() + { + if(screen2.texture == null && screen.texture != null) + { + screen2.texture = webcamTexture; + screen.texture = null; + } + else if (screen2.texture != null && screen.texture == null) + { + screen.texture = webcamTexture; + screen2.texture = null; + } + } } } diff --git a/ProjectSettings/BurstAotSettings_WebGL.json b/ProjectSettings/BurstAotSettings_WebGL.json new file mode 100644 index 0000000..771d37b --- /dev/null +++ b/ProjectSettings/BurstAotSettings_WebGL.json @@ -0,0 +1,14 @@ +{ + "MonoBehaviour": { + "Version": 4, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "OptimizeFor": 0 + } +} diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index be98625..bf86ff2 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -38,6 +38,9 @@ EditorBuildSettings: - enabled: 1 path: Assets/Common/Scenes/MinigameActivityScreen.unity guid: 8e27404f21454dc4583f76b4c7df0c30 + - enabled: 1 + path: Assets/JustSign/Scenes/Game.unity + guid: 1283017ac1c1f6226854442564bd7e3d - enabled: 1 path: Assets/Common/Scenes/ThemeSelectionScreen.unity guid: 2dfa1265c9d65014c90941ac4240a977 diff --git a/ProjectSettings/TimelineSettings.asset b/ProjectSettings/TimelineSettings.asset new file mode 100644 index 0000000..cfaebd7 --- /dev/null +++ b/ProjectSettings/TimelineSettings.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3} + m_Name: + m_EditorClassIdentifier: + assetDefaultFramerate: 60 + m_DefaultFrameRate: 60