diff --git a/.gitignore b/.gitignore index 55afc3c7..2f306e37 100755 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ /[Ll]ogs/ /[Uu]ser[Ss]ettings/ +# merge libs +*.mri + # MemoryCaptures can get excessive in size. # They also could contain extremely sensitive data /[Mm]emoryCaptures/ diff --git a/Assets/Samples/1 - Audio Clip Benchmark.meta b/Assets/Samples/1 - Audio Clip Benchmark.meta new file mode 100644 index 00000000..ef9da79d --- /dev/null +++ b/Assets/Samples/1 - Audio Clip Benchmark.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3139a2c06fbf62e47b89a72f0b394b8b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/1 - Audio Clip Benchmark/1 - Audio Clip Benchmark.unity b/Assets/Samples/1 - Audio Clip Benchmark/1 - Audio Clip Benchmark.unity new file mode 100644 index 00000000..3ac42a07 --- /dev/null +++ b/Assets/Samples/1 - Audio Clip Benchmark/1 - Audio Clip Benchmark.unity @@ -0,0 +1,3039 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &140530245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140530246} + - component: {fileID: 140530249} + - component: {fileID: 140530248} + - component: {fileID: 140530247} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &140530246 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140530245} + 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: 2045646843} + m_Father: {fileID: 1219951373} + 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: -17, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &140530247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140530245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &140530248 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140530245} + 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: 10917, 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!222 &140530249 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140530245} + m_CullTransparentMesh: 1 +--- !u!1 &145324199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 145324200} + - component: {fileID: 145324203} + - component: {fileID: 145324201} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &145324200 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145324199} + 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: 1399881752} + - {fileID: 2069805548} + m_Father: {fileID: 1010733614} + 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.0001, y: 0.000032424927} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &145324201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145324199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 203807866} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 1399881752} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 2069805549} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &145324203 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145324199} + m_CullTransparentMesh: 1 +--- !u!1 &167558890 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 167558891} + - component: {fileID: 167558893} + - component: {fileID: 167558892} + m_Layer: 5 + m_Name: Time + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &167558891 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167558890} + 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: 1370179833} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 80, y: 0} + m_SizeDelta: {x: 550, y: 90} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &167558892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167558890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 60 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 5 + m_MaxSize: 60 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: +--- !u!222 &167558893 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167558890} + m_CullTransparentMesh: 1 +--- !u!1 &203807865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 203807866} + - component: {fileID: 203807868} + - component: {fileID: 203807867} + - component: {fileID: 203807869} + m_Layer: 5 + m_Name: Transcript + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &203807866 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203807865} + 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: 1399881752} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.05, y: 1} + m_AnchorMax: {x: 0.95, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &203807867 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203807865} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 65 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 230 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Press button to get transcript... +--- !u!222 &203807868 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203807865} + m_CullTransparentMesh: 1 +--- !u!114 &203807869 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203807865} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &314377245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 314377246} + - component: {fileID: 314377247} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &314377246 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314377245} + 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: 1797617260} + - {fileID: 1695714744} + - {fileID: 1278534042} + m_Father: {fileID: 2045646843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0.000030517578, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &314377247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314377245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 1797617261} + toggleTransition: 1 + graphic: {fileID: 1695714745} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &342221299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 342221300} + - component: {fileID: 342221302} + - component: {fileID: 342221301} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &342221300 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342221299} + 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: 2039248618} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.17822656, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -2.4999847, y: -0.5} + m_SizeDelta: {x: -5, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &342221301 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342221299} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 83 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: English Translation +--- !u!222 &342221302 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342221299} + m_CullTransparentMesh: 1 +--- !u!1 &413582122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 413582123} + - component: {fileID: 413582125} + - component: {fileID: 413582124} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &413582123 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413582122} + 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: 450103020} + 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!114 &413582124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413582122} + 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: 10901, guid: 0000000000000000f000000000000000, type: 0} + 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 &413582125 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413582122} + m_CullTransparentMesh: 1 +--- !u!1 &450103019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 450103020} + - component: {fileID: 450103022} + - component: {fileID: 450103021} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &450103020 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 450103019} + 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: 413582123} + m_Father: {fileID: 2039248618} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.17822656, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -10, y: -10} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &450103021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 450103019} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + 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 &450103022 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 450103019} + m_CullTransparentMesh: 1 +--- !u!1 &587639197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 587639198} + - component: {fileID: 587639199} + m_Layer: 0 + m_Name: Whisper + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &587639198 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 587639197} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &587639199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 587639197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d9370225a2ca94276b870d5f87b0db55, type: 3} + m_Name: + m_EditorClassIdentifier: + logLevel: 1 + modelPath: Whisper/ggml-tiny.bin + isModelPathInStreamingAssets: 1 + initOnAwake: 1 + useGpu: 1 + flashAttention: 1 + language: auto + translateToEnglish: 0 + strategy: 0 + noContext: 1 + singleSegment: 1 + enableTokens: 0 + initialPrompt: + stepSec: 2 + keepSec: 0.2 + lengthSec: 8 + updatePrompt: 1 + dropOldBuffer: 1 + useVad: 1 + tokensTimestamps: 0 + audioCtx: 0 + threadsCount: 0 +--- !u!1 &637716610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 637716613} + - component: {fileID: 637716612} + - component: {fileID: 637716611} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &637716611 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 637716610} + m_Enabled: 1 +--- !u!20 &637716612 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 637716610} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.3773585, g: 0.3773585, b: 0.3773585, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &637716613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 637716610} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &773062151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 773062153} + - component: {fileID: 773062152} + m_Layer: 0 + m_Name: Demo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &773062152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773062151} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 22ea4cd35bbaba54faeec061c4a6efc3, type: 3} + m_Name: + m_EditorClassIdentifier: + manager: {fileID: 587639199} + clip: {fileID: 8300000, guid: 2f8a92ae57b4341c68e81202d049ca31, type: 3} + streamSegments: 1 + echoSound: 1 + printLanguage: 1 + autoRunOnStart: 1 + autoRunRepeatCount: 100 + button: {fileID: 2099288375} + outputText: {fileID: 203807867} + timeText: {fileID: 167558892} + scroll: {fileID: 145324201} + languageDropdown: {fileID: 837913796} + translateToggle: {fileID: 2039248619} +--- !u!4 &773062153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773062151} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &781718528 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 781718532} + - component: {fileID: 781718531} + - component: {fileID: 781718530} + - component: {fileID: 781718529} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &781718529 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781718528} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &781718530 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781718528} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.33 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &781718531 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781718528} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &781718532 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781718528} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1010733614} + - {fileID: 1370179833} + - {fileID: 2099828445} + m_Father: {fileID: 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: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &837913794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 837913795} + - component: {fileID: 837913798} + - component: {fileID: 837913797} + - component: {fileID: 837913796} + m_Layer: 5 + m_Name: LanguageDropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &837913795 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 837913794} + 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: 998835085} + - {fileID: 852595692} + - {fileID: 1219951373} + m_Father: {fileID: 2099828445} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20.493042, y: -49.4} + m_SizeDelta: {x: -120, y: 97.334} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &837913796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 837913794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d0b652f32a2cc243917e4028fa0f046, 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: 837913797} + m_Template: {fileID: 1219951373} + m_CaptionText: {fileID: 998835086} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 1278534043} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: auto + m_Image: {fileID: 0} + - m_Text: en + m_Image: {fileID: 0} + - m_Text: de + m_Image: {fileID: 0} + - m_Text: ru + m_Image: {fileID: 0} + - m_Text: es + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_AlphaFadeSpeed: 0.15 +--- !u!114 &837913797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 837913794} + 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: 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!222 &837913798 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 837913794} + m_CullTransparentMesh: 1 +--- !u!1 &852595691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 852595692} + - component: {fileID: 852595694} + - component: {fileID: 852595693} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &852595692 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 852595691} + 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: 837913795} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -20, y: 0} + m_SizeDelta: {x: 44.9855, y: 44.9855} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &852595693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 852595691} + 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: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + 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!222 &852595694 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 852595691} + m_CullTransparentMesh: 1 +--- !u!1 &998835084 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 998835085} + - component: {fileID: 998835087} + - component: {fileID: 998835086} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &998835085 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998835084} + 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: 837913795} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &998835086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998835084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 62 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: auto +--- !u!222 &998835087 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998835084} + m_CullTransparentMesh: 1 +--- !u!1 &1010733613 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1010733614} + - component: {fileID: 1010733616} + - component: {fileID: 1010733617} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1010733614 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010733613} + 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: 145324200} + m_Father: {fileID: 781718532} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.14533333} + m_AnchorMax: {x: 0.7003224, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &1010733616 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010733613} + m_CullTransparentMesh: 1 +--- !u!114 &1010733617 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010733613} + 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: 0.392} + 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!1 &1121806930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1121806931} + - component: {fileID: 1121806933} + - component: {fileID: 1121806932} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1121806931 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121806930} + 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: 1816940209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.76013047} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1121806932 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121806930} + 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: 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!222 &1121806933 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121806930} + m_CullTransparentMesh: 1 +--- !u!1 &1219951372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1219951373} + - component: {fileID: 1219951376} + - component: {fileID: 1219951375} + - component: {fileID: 1219951374} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1219951373 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1219951372} + 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: 140530246} + - {fileID: 1444281997} + m_Father: {fileID: 837913795} + 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: 2} + m_SizeDelta: {x: 0, y: 291.8253} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1219951374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1219951372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 2045646843} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 140530246} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1444281998} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1219951375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1219951372} + 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: 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!222 &1219951376 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1219951372} + m_CullTransparentMesh: 1 +--- !u!1 &1278534041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1278534042} + - component: {fileID: 1278534044} + - component: {fileID: 1278534043} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1278534042 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278534041} + 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: 314377246} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 49.762085, y: -0.5} + m_SizeDelta: {x: -119.5242, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1278534043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278534041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 42 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &1278534044 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278534041} + m_CullTransparentMesh: 1 +--- !u!1 &1370179832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1370179833} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1370179833 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370179832} + 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: 2099288374} + - {fileID: 167558891} + m_Father: {fileID: 781718532} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.14533333} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &1399881751 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1399881752} + - component: {fileID: 1399881755} + - component: {fileID: 1399881754} + - component: {fileID: 1399881753} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1399881752 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399881751} + 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: 203807866} + m_Father: {fileID: 145324200} + 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: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1399881753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399881751} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &1399881754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399881751} + 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: 10917, 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!222 &1399881755 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399881751} + m_CullTransparentMesh: 1 +--- !u!1 &1431014843 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1431014844} + - component: {fileID: 1431014846} + - component: {fileID: 1431014845} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1431014844 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431014843} + 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: 2099288374} + 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!114 &1431014845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431014843} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 68 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 88 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Transcript +--- !u!222 &1431014846 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431014843} + m_CullTransparentMesh: 1 +--- !u!1 &1444281996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1444281997} + - component: {fileID: 1444282000} + - component: {fileID: 1444281999} + - component: {fileID: 1444281998} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1444281997 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1444281996} + 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: 1816940209} + m_Father: {fileID: 1219951373} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1444281998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1444281996} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 1121806932} + m_HandleRect: {fileID: 1121806931} + m_Direction: 2 + m_Value: 0 + m_Size: 0.76013047 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1444281999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1444281996} + 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!222 &1444282000 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1444281996} + m_CullTransparentMesh: 1 +--- !u!1 &1522420786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1522420788} + - component: {fileID: 1522420787} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1522420787 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522420786} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1522420788 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522420786} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1535893990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1535893994} + - component: {fileID: 1535893993} + - component: {fileID: 1535893992} + - component: {fileID: 1535893995} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1535893992 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535893990} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, 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: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1535893993 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535893990} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1535893994 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535893990} + serializedVersion: 2 + m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} + 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_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} +--- !u!114 &1535893995 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535893990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b1033d10016c24195b53f011eb12b139, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 10 +--- !u!1 &1695714743 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1695714744} + - component: {fileID: 1695714746} + - component: {fileID: 1695714745} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1695714744 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695714743} + 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: 314377246} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 38, y: 1} + m_SizeDelta: {x: 45.75, y: 45.75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1695714745 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695714743} + 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: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + 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!222 &1695714746 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695714743} + m_CullTransparentMesh: 1 +--- !u!1 &1797617259 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797617260} + - component: {fileID: 1797617262} + - component: {fileID: 1797617261} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1797617260 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797617259} + 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: 314377246} + 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!114 &1797617261 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797617259} + 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: 0.9607843, g: 0.9607843, b: 0.9607843, 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: 0} + m_Type: 0 + 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!222 &1797617262 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797617259} + m_CullTransparentMesh: 1 +--- !u!1 &1816940208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1816940209} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1816940209 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816940208} + 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: 1121806931} + m_Father: {fileID: 1444281997} + 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: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1882481890 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1882481891} + - component: {fileID: 1882481893} + - component: {fileID: 1882481892} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1882481891 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882481890} + 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: 2030899776} + 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: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1882481892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882481890} + 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: 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!222 &1882481893 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882481890} + m_CullTransparentMesh: 1 +--- !u!1 &2030899775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2030899776} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2030899776 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030899775} + 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: 1882481891} + m_Father: {fileID: 2069805548} + 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: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2039248617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2039248618} + - component: {fileID: 2039248619} + m_Layer: 5 + m_Name: EnglishTranslation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2039248618 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039248617} + 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: 450103020} + - {fileID: 342221300} + m_Father: {fileID: 2099828445} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -19.914062, y: -185.2} + m_SizeDelta: {x: -119.46, y: 96.3578} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &2039248619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039248617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 450103021} + toggleTransition: 1 + graphic: {fileID: 413582124} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &2045646842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2045646843} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2045646843 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045646842} + 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: 314377246} + m_Father: {fileID: 140530246} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 70} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &2069805547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2069805548} + - component: {fileID: 2069805551} + - component: {fileID: 2069805550} + - component: {fileID: 2069805549} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2069805548 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2069805547} + 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: 2030899776} + m_Father: {fileID: 145324200} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: -17} + m_Pivot: {x: 1, y: 1} +--- !u!114 &2069805549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2069805547} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 1882481892} + m_HandleRect: {fileID: 1882481891} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &2069805550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2069805547} + 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!222 &2069805551 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2069805547} + m_CullTransparentMesh: 1 +--- !u!1 &2098053316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2098053319} + - component: {fileID: 2098053318} + - component: {fileID: 2098053317} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2098053317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2098053316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &2098053318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2098053316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &2098053319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2098053316} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2099288373 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2099288374} + - component: {fileID: 2099288377} + - component: {fileID: 2099288376} + - component: {fileID: 2099288375} + m_Layer: 5 + m_Name: TranscriptButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2099288374 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099288373} + 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: 1431014844} + m_Father: {fileID: 1370179833} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -80, y: 0} + m_SizeDelta: {x: 550, y: 90} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &2099288375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099288373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 2099288376} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &2099288376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099288373} + 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: 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!222 &2099288377 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099288373} + m_CullTransparentMesh: 1 +--- !u!1 &2099828444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2099828445} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2099828445 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099828444} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0008519, y: 1.0008519, z: 1.0008519} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 837913795} + - {fileID: 2039248618} + m_Father: {fileID: 781718532} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.70032245, y: 0.14533333} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0.00012207031, y: 0.00012207031} + m_SizeDelta: {x: -0.48083496, y: -0.8165283} + m_Pivot: {x: 1, y: 0.5} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 637716613} + - {fileID: 1522420788} + - {fileID: 587639198} + - {fileID: 773062153} + - {fileID: 781718532} + - {fileID: 2098053319} + - {fileID: 1535893994} diff --git a/Assets/Samples/1 - Audio Clip Benchmark/1 - Audio Clip Benchmark.unity.meta b/Assets/Samples/1 - Audio Clip Benchmark/1 - Audio Clip Benchmark.unity.meta new file mode 100644 index 00000000..e0794dfd --- /dev/null +++ b/Assets/Samples/1 - Audio Clip Benchmark/1 - Audio Clip Benchmark.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 61a21a272e05a0147bf29118ab069045 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/1 - Audio Clip Benchmark/AudioClipBenchmarkDemo.cs b/Assets/Samples/1 - Audio Clip Benchmark/AudioClipBenchmarkDemo.cs new file mode 100644 index 00000000..2db4fb7c --- /dev/null +++ b/Assets/Samples/1 - Audio Clip Benchmark/AudioClipBenchmarkDemo.cs @@ -0,0 +1,130 @@ +using System.Collections; +using System.Diagnostics; +using UnityEngine; +using UnityEngine.UI; +using Whisper.Utils; + +namespace Whisper.Samples +{ + /// + /// Takes audio clip and make a transcription. + /// + public class AudioClipBenchmarkDemo : MonoBehaviour + { + public WhisperManager manager; + public AudioClip clip; + public bool streamSegments = true; + public bool echoSound = true; + public bool printLanguage = true; + public bool autoRunOnStart = true; + public int autoRunRepeatCount = 100; + + [Header("UI")] + public Button button; + public Text outputText; + public Text timeText; + public ScrollRect scroll; + public Dropdown languageDropdown; + public Toggle translateToggle; + + private string _buffer; + private bool _isProcessing; + + private void Awake() + { + manager.OnNewSegment += OnNewSegment; + manager.OnProgress += OnProgressHandler; + + button.onClick.AddListener(ButtonPressed); + languageDropdown.value = languageDropdown.options + .FindIndex(op => op.text == manager.language); + languageDropdown.onValueChanged.AddListener(OnLanguageChanged); + + translateToggle.isOn = manager.translateToEnglish; + translateToggle.onValueChanged.AddListener(OnTranslateChanged); + } + + private IEnumerator Start() + { + if (!autoRunOnStart) + yield break; + + // Wait for WhisperManager to fully initialize + yield return new WaitForSeconds(3f); + while (!manager.IsLoaded) + yield return new WaitForSeconds(1f); + + UnityEngine.Debug.Log("[Whisper] Auto-run: starting performance test"); + + for (int i = 0; i < autoRunRepeatCount; i++) + { + while (_isProcessing) + yield return null; + + UnityEngine.Debug.Log($"[Whisper] Auto-run iteration {i + 1}/{autoRunRepeatCount}"); + ButtonPressed(); + yield return new WaitForSeconds(1f); + } + } + + public async void ButtonPressed() + { + _buffer = ""; + _isProcessing = true; + if (echoSound) + AudioSource.PlayClipAtPoint(clip, Vector3.zero); + + var sw = new Stopwatch(); + sw.Start(); + + var res = await manager.GetTextAsyncOptimized(clip, true); + _isProcessing = false; + if (res == null || !outputText) + return; + + var time = sw.ElapsedMilliseconds; + var rate = clip.length / (time * 0.001f); + string result = $"Time: {time} ms\nRate: {rate:F1}x"; + + UnityEngine.Debug.Log($"[Whisper Result] {rate:F1}x"); + timeText.text = result; + + var text = res.Result; + if (printLanguage) + text += $"\n\nLanguage: {res.Language}"; + + outputText.text = text; + UiUtils.ScrollDown(scroll); + } + + private void OnLanguageChanged(int ind) + { + var opt = languageDropdown.options[ind]; + manager.language = opt.text; + } + + private void OnTranslateChanged(bool translate) + { + manager.translateToEnglish = translate; + } + + private void OnProgressHandler(int progress) + { + if (!timeText) + return; + timeText.text = $"Progress: {progress}%"; + } + + private void OnNewSegment(WhisperSegment segment) + { + if (!streamSegments || !outputText) + return; + + _buffer += segment.Text; + outputText.text = _buffer + "..."; + UiUtils.ScrollDown(scroll); + } + } +} + + diff --git a/Assets/Samples/1 - Audio Clip Benchmark/AudioClipBenchmarkDemo.cs.meta b/Assets/Samples/1 - Audio Clip Benchmark/AudioClipBenchmarkDemo.cs.meta new file mode 100644 index 00000000..ef52b3f5 --- /dev/null +++ b/Assets/Samples/1 - Audio Clip Benchmark/AudioClipBenchmarkDemo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22ea4cd35bbaba54faeec061c4a6efc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/1 - Audio Clip Benchmark/jfk.wav b/Assets/Samples/1 - Audio Clip Benchmark/jfk.wav new file mode 100644 index 00000000..3184d372 Binary files /dev/null and b/Assets/Samples/1 - Audio Clip Benchmark/jfk.wav differ diff --git a/Assets/Samples/1 - Audio Clip Benchmark/jfk.wav.meta b/Assets/Samples/1 - Audio Clip Benchmark/jfk.wav.meta new file mode 100644 index 00000000..253b7749 --- /dev/null +++ b/Assets/Samples/1 - Audio Clip Benchmark/jfk.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a1505043eb6c5954bb0bc91a88f232e4 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/1 - Audio Clip/AudioClipDemo.cs b/Assets/Samples/1 - Audio Clip/AudioClipDemo.cs index d7886e9f..af3176d7 100644 --- a/Assets/Samples/1 - Audio Clip/AudioClipDemo.cs +++ b/Assets/Samples/1 - Audio Clip/AudioClipDemo.cs @@ -49,7 +49,7 @@ public async void ButtonPressed() var sw = new Stopwatch(); sw.Start(); - var res = await manager.GetTextAsync(clip); + var res = await manager.GetTextAsyncOptimized(clip, true); if (res == null || !outputText) return; diff --git a/Assets/Samples/2 - Microphone/2 - Microphone.unity b/Assets/Samples/2 - Microphone/2 - Microphone.unity index 3124ce6a..2250da04 100644 --- a/Assets/Samples/2 - Microphone/2 - Microphone.unity +++ b/Assets/Samples/2 - Microphone/2 - Microphone.unity @@ -38,7 +38,6 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657815, g: 0.49641192, b: 0.57481617, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -104,7 +103,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +116,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -153,7 +152,6 @@ RectTransform: m_Children: - {fileID: 720715771} m_Father: {fileID: 1001182873} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -193,7 +191,6 @@ RectTransform: m_Children: - {fileID: 179494872} m_Father: {fileID: 433860684} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -317,7 +314,6 @@ RectTransform: m_Children: - {fileID: 1603953685} m_Father: {fileID: 390061952} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -355,7 +351,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1370179833} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} @@ -434,7 +429,6 @@ RectTransform: m_Children: - {fileID: 2022822248} m_Father: {fileID: 87012740} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -472,7 +466,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1400360879} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -552,7 +545,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1603953685} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -634,7 +626,6 @@ RectTransform: m_Children: - {fileID: 106087237} m_Father: {fileID: 1296783490} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -725,7 +716,6 @@ RectTransform: m_Children: - {fileID: 1194114914} m_Father: {fileID: 942089563} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -817,7 +807,6 @@ RectTransform: - {fileID: 1001182873} - {fileID: 87012740} m_Father: {fileID: 1400360879} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -923,7 +912,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1279549932} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.17822656, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1003,7 +991,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1400360879} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -1072,13 +1059,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 587639197} + serializedVersion: 2 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: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &587639199 MonoBehaviour: @@ -1096,7 +1083,9 @@ MonoBehaviour: modelPath: Whisper/ggml-tiny.bin isModelPathInStreamingAssets: 1 initOnAwake: 1 - language: auto + useGpu: 1 + flashAttention: 1 + language: ko translateToEnglish: 0 strategy: 0 noContext: 1 @@ -1110,8 +1099,10 @@ MonoBehaviour: dropOldBuffer: 0 useVad: 1 tokensTimestamps: 0 - speedUp: 0 audioCtx: 0 + temperatureInc: 0 + greedyBestOf: 1 + threadsCount: 0 --- !u!1 &637716610 GameObject: m_ObjectHideFlags: 0 @@ -1152,9 +1143,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1188,13 +1187,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 637716610} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -4} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &717641470 GameObject: @@ -1229,7 +1228,6 @@ RectTransform: m_Children: - {fileID: 1034227556} m_Father: {fileID: 1296783490} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1356,7 +1354,6 @@ RectTransform: - {fileID: 1314793983} - {fileID: 951242087} m_Father: {fileID: 67247680} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1444,7 +1441,6 @@ RectTransform: - {fileID: 1425433664} - {fileID: 1279549932} m_Father: {fileID: 781718532} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.70032245, y: 0.14533333} m_AnchorMax: {x: 1, y: 1} @@ -1527,7 +1523,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -1548,7 +1546,6 @@ RectTransform: - {fileID: 735179748} - {fileID: 1756544757} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1586,7 +1583,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1034227556} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0.76013047} @@ -1662,7 +1658,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1110452056} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1740,7 +1735,6 @@ RectTransform: - {fileID: 402614679} - {fileID: 1345287212} m_Father: {fileID: 1010733614} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1820,7 +1814,6 @@ RectTransform: - {fileID: 1098727417} - {fileID: 1296783490} m_Father: {fileID: 735179748} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -1951,7 +1944,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 720715771} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2031,7 +2023,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1413441803} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2107,7 +2098,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1425433664} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.17822656, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2189,7 +2179,6 @@ RectTransform: m_Children: - {fileID: 67247680} m_Father: {fileID: 433860684} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2279,7 +2268,6 @@ RectTransform: m_Children: - {fileID: 942089563} m_Father: {fileID: 781718532} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.14533333} m_AnchorMax: {x: 0.70032245, y: 1} @@ -2354,7 +2342,6 @@ RectTransform: m_Children: - {fileID: 830345160} m_Father: {fileID: 717641471} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2392,7 +2379,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 948466957} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -2469,7 +2455,6 @@ RectTransform: m_Children: - {fileID: 890902024} m_Father: {fileID: 1279549932} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0.17822656, y: 1} @@ -2546,7 +2531,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 402614679} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.05, y: 1} m_AnchorMax: {x: 0.95, y: 1} @@ -2640,7 +2624,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1603953685} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2716,7 +2699,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1395701403} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2793,7 +2775,6 @@ RectTransform: - {fileID: 1110452056} - {fileID: 439862078} m_Father: {fileID: 735179748} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -2882,7 +2863,6 @@ RectTransform: - {fileID: 390061952} - {fileID: 717641471} m_Father: {fileID: 948466957} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -2988,7 +2968,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 720715771} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} @@ -3058,13 +3037,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1337591120} + serializedVersion: 2 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: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1337591122 MonoBehaviour: @@ -3102,8 +3081,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3bc03a4c19604ea394e364f8fc632928, type: 3} m_Name: m_EditorClassIdentifier: - loop: 1 maxLengthSec: 60 + loop: 1 frequency: 16000 chunksLengthSec: 0.5 echo: 1 @@ -3114,7 +3093,7 @@ MonoBehaviour: vadThd: 1 vadFreqThd: 100 vadIndicatorImage: {fileID: 1756544758} - vadStop: 0 + vadStop: 1 dropVadPart: 1 vadStopTime: 3 microphoneDropdown: {fileID: 948466958} @@ -3152,7 +3131,6 @@ RectTransform: m_Children: - {fileID: 1413441803} m_Father: {fileID: 942089563} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3277,7 +3255,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 948466957} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3357,7 +3334,6 @@ RectTransform: - {fileID: 2099288374} - {fileID: 167558891} m_Father: {fileID: 781718532} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0.14533333} @@ -3395,7 +3371,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 720715771} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3471,7 +3446,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1603953685} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} @@ -3548,7 +3522,6 @@ RectTransform: m_Children: - {fileID: 1218648888} m_Father: {fileID: 1425433664} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0.17822656, y: 1} @@ -3628,7 +3601,6 @@ RectTransform: - {fileID: 441833062} - {fileID: 433860684} m_Father: {fileID: 735179748} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -3694,6 +3666,8 @@ MonoBehaviour: m_Image: {fileID: 0} - m_Text: es m_Image: {fileID: 0} + - m_Text: ko + m_Image: {fileID: 0} m_OnValueChanged: m_PersistentCalls: m_Calls: [] @@ -3766,7 +3740,6 @@ RectTransform: m_Children: - {fileID: 967652832} m_Father: {fileID: 1345287212} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3805,7 +3778,6 @@ RectTransform: - {fileID: 1395701403} - {fileID: 994514760} m_Father: {fileID: 735179748} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -3891,7 +3863,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2099288374} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -4026,13 +3997,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1522420786} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &1535893990 GameObject: @@ -4110,13 +4081,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1535893990} + serializedVersion: 2 m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} 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: 6 m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} --- !u!114 &1535893995 MonoBehaviour: @@ -4164,7 +4135,6 @@ RectTransform: - {fileID: 1387821186} - {fileID: 326716703} m_Father: {fileID: 106087237} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -4250,7 +4220,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 781718532} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -4326,7 +4295,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 179494872} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0.76013047} @@ -4401,6 +4369,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 m_HorizontalAxis: Horizontal m_VerticalAxis: Vertical m_SubmitButton: Submit @@ -4430,13 +4399,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2098053316} + serializedVersion: 2 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 &2099288373 GameObject: @@ -4471,7 +4440,6 @@ RectTransform: m_Children: - {fileID: 1431014844} m_Father: {fileID: 1370179833} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -4560,3 +4528,14 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2099288373} m_CullTransparentMesh: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 637716613} + - {fileID: 1522420788} + - {fileID: 587639198} + - {fileID: 1337591121} + - {fileID: 781718532} + - {fileID: 2098053319} + - {fileID: 1535893994} diff --git a/Assets/Samples/2 - Microphone/MicrophoneDemo.cs b/Assets/Samples/2 - Microphone/MicrophoneDemo.cs index 6cc836a0..33921fc4 100644 --- a/Assets/Samples/2 - Microphone/MicrophoneDemo.cs +++ b/Assets/Samples/2 - Microphone/MicrophoneDemo.cs @@ -75,7 +75,7 @@ private async void OnRecordStop(AudioChunk recordedAudio) var sw = new Stopwatch(); sw.Start(); - var res = await whisper.GetTextAsync(recordedAudio.Data, recordedAudio.Frequency, recordedAudio.Channels); + var res = await whisper.GetTextAsyncOptimized(recordedAudio.Data, recordedAudio.Frequency, recordedAudio.Channels, true); if (res == null || !outputText) return; diff --git a/Assets/Samples/4 - Subtitles/SubtitlesDemo.cs b/Assets/Samples/4 - Subtitles/SubtitlesDemo.cs index 2162e146..2f789f9d 100644 --- a/Assets/Samples/4 - Subtitles/SubtitlesDemo.cs +++ b/Assets/Samples/4 - Subtitles/SubtitlesDemo.cs @@ -61,7 +61,7 @@ private async void OnButtonPressed() // TODO: if you want to speed this up, subscribe to segments event // this code will transcribe whole text first - var res = await whisper.GetTextAsync(clip); + var res = await whisper.GetTextAsyncOptimized(clip, true); var time = sw.ElapsedMilliseconds; var rate = clip.length / (time * 0.001f); diff --git a/Packages/com.whisper.unity/Editor/CheckAndroidPreprocessBuild.cs b/Packages/com.whisper.unity/Editor/CheckAndroidPreprocessBuild.cs index 8a32904f..97bac773 100644 --- a/Packages/com.whisper.unity/Editor/CheckAndroidPreprocessBuild.cs +++ b/Packages/com.whisper.unity/Editor/CheckAndroidPreprocessBuild.cs @@ -1,30 +1,299 @@ -using System; +#if UNITY_EDITOR +using System.IO; +using System.Text; +using System.Text.RegularExpressions; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; +using UnityEngine; -public class CheckAndroidPreprocessBuild : IPreprocessBuildWithReport +/// +/// Validates Unity editor optimization settings before every Android build. +/// Implements IPreprocessBuildWithReport to run automatically. +/// Manual: menu Whisper.unity > Validate Optimization Settings. +/// +public class AndroidPreprocessBuild : IPreprocessBuildWithReport { + private const string MenuRoot = "Whisper.unity"; + private const string RecommendedCompilerConfiguration = "Master"; + private const string RecommendedCodeGeneration = "OptimizeSpeed"; + private const string RecommendedManagedStripping = "High (3)"; + public int callbackOrder => 0; - + public void OnPreprocessBuild(BuildReport report) { - var sum = report.summary; - if (sum.platform != BuildTarget.Android) + if (report.summary.platform != BuildTarget.Android) + return; + + var results = RunAllChecks(); + int fail = CountFailures(results); + + if (fail == 0) + { + Debug.Log(FormatResults(results)); + return; + } + + Debug.LogWarning(FormatResults(results)); + + if (Application.isBatchMode) + { + Debug.LogWarning($"[Whisper.unity] {fail} optimization check(s) failed. Continuing because batch mode cannot show dialogs."); + return; + } + + var choice = EditorUtility.DisplayDialogComplex( + "Whisper.unity Optimization Warning", + $"{fail} optimization check(s) failed.\nSee Console for details.\n\nContinue building anyway, cancel the build, or apply the recommended settings now?", + "Continue", + "Cancel Build", + "Apply Recommended"); + + if (choice == 1) + { + throw new BuildFailedException( + $"Build cancelled: {fail} Whisper.unity optimization check(s) failed."); + } + + if (choice == 2) + { + ApplyRecommendedSettings(); + Debug.Log("[Whisper.unity] Applied recommended Android optimization settings."); + } + } + + [MenuItem(MenuRoot + "/Validate Optimization Settings", priority = 100)] + public static void ValidateAll() + { + var results = RunAllChecks(); + var message = FormatResults(results); + var fail = CountFailures(results); + + if (fail == 0) + { + Debug.Log(message); + if (!Application.isBatchMode) + { + EditorUtility.DisplayDialog( + "Whisper.unity Optimization Validation", + "All Android optimization checks passed. See Console for details.", + "OK"); + } + + return; + } + + Debug.LogWarning(message); + + if (Application.isBatchMode) + return; + + var choice = EditorUtility.DisplayDialogComplex( + "Whisper.unity Optimization Validation", + $"{fail} optimization check(s) failed.\nSee Console for details.\n\nApply the recommended settings now?", + "Apply Recommended", + "Close", + "Copy Summary"); + + if (choice == 0) + { + ApplyRecommendedSettings(); + Debug.Log("[Whisper.unity] Applied recommended Android optimization settings."); return; + } + + if (choice == 2) + { + EditorGUIUtility.systemCopyBuffer = message; + Debug.Log("[Whisper.unity] Copied optimization validation summary to clipboard."); + } + } + + [MenuItem(MenuRoot + "/Apply Recommended Optimization Settings", priority = 101)] + public static void ApplyRecommendedSettingsMenu() + { + ApplyRecommendedSettings(); + Debug.Log("[Whisper.unity] Applied recommended Android optimization settings."); + } + + // ── Core ── + + private struct CheckResult + { + public string category, item, expected, actual; + public bool passed; + } - var backend = PlayerSettings.GetScriptingBackend(BuildTargetGroup.Android); - if (backend != ScriptingImplementation.IL2CPP) + private static System.Collections.Generic.List RunAllChecks() + { + var r = new System.Collections.Generic.List(); + CheckIL2CPPCompiler(r); + CheckIL2CPPCodeGen(r); + CheckStrippingLevel(r); + CheckScriptingBackend(r); + CheckArm64Architecture(r); + return r; + } + + private static int CountFailures(System.Collections.Generic.List results) + { + int n = 0; foreach (var r in results) if (!r.passed) n++; return n; + } + + private static string FormatResults(System.Collections.Generic.List results) + { + int pass = 0, fail = 0; + var sb = new StringBuilder(); + sb.AppendLine("=== Whisper Android Optimization Validation ==="); + sb.AppendFormat("\n {0,-16} {1,-22} {2,-22} {3,-22} {4}\n", + "Category", "Item", "Expected", "Actual", "Status"); + sb.AppendLine(" " + new string('-', 88)); + + foreach (var r in results) + { + if (r.passed) pass++; else fail++; + sb.AppendFormat(" {0,-16} {1,-22} {2,-22} {3,-22} {4}\n", + r.category, r.item, r.expected, r.actual, r.passed ? "PASS" : "FAIL"); + } + + sb.AppendLine(" " + new string('-', 88)); + sb.AppendFormat(" Result: {0} PASS, {1} FAIL (Total {2})\n", pass, fail, results.Count); + return sb.ToString(); + } + + // ── Unity Editor Settings ── + + private static void CheckIL2CPPCompiler(System.Collections.Generic.List r) + { + var v = PlayerSettings.GetIl2CppCompilerConfiguration(BuildTargetGroup.Android); + r.Add(new CheckResult { + category = "IL2CPP", item = "Compiler Config", + expected = RecommendedCompilerConfiguration, actual = v.ToString(), + passed = v == Il2CppCompilerConfiguration.Master + }); + } + + private static void CheckIL2CPPCodeGen(System.Collections.Generic.List r) + { + var runtimeValue = PlayerSettings.GetIl2CppCodeGeneration(UnityEditor.Build.NamedBuildTarget.Android); + var hasSerializedValue = TryReadProjectSettingInt("il2cppCodeGeneration", "Android", out var serializedValue); + var serializedText = hasSerializedValue + ? $"{((UnityEditor.Build.Il2CppCodeGeneration)serializedValue)} ({serializedValue})" + : "Not Set"; + + r.Add(new CheckResult { + category = "IL2CPP", item = "Code Generation", + expected = RecommendedCodeGeneration, + actual = $"Runtime {runtimeValue}, Serialized {serializedText}", + passed = runtimeValue == UnityEditor.Build.Il2CppCodeGeneration.OptimizeSpeed && + hasSerializedValue && + (UnityEditor.Build.Il2CppCodeGeneration)serializedValue == + UnityEditor.Build.Il2CppCodeGeneration.OptimizeSpeed + }); + } + + private static void CheckStrippingLevel(System.Collections.Generic.List r) + { + string actual = "Unknown"; + bool passed = false; + + if (TryReadProjectSettingInt("managedStrippingLevel", "Android", out var lv)) { - throw new Exception($"Unsupported scripting backend {backend}! Whisper for Android only supports il2cpp. " + - "You can change scripting backend in Player Settings."); + string[] names = { "Disabled", "Low", "Medium", "High" }; + actual = lv < names.Length ? $"{names[lv]} ({lv})" : lv.ToString(); + passed = lv == 3; } + r.Add(new CheckResult { + category = "Build", item = "Managed Stripping", + expected = RecommendedManagedStripping, actual = actual, passed = passed + }); + } + + private static void CheckScriptingBackend(System.Collections.Generic.List r) + { + var v = PlayerSettings.GetScriptingBackend(BuildTargetGroup.Android); + r.Add(new CheckResult { + category = "Build", item = "Scripting Backend", + expected = "IL2CPP", actual = v.ToString(), + passed = v == ScriptingImplementation.IL2CPP + }); + } + + private static void CheckArm64Architecture(System.Collections.Generic.List r) + { + // whisper.cpp native library is built for ARM64 with NEON/ASIMD optimizations. + // ARMv7 fallback loses all SIMD acceleration and runs ~3-5x slower. var arch = PlayerSettings.Android.targetArchitectures; - if (arch != AndroidArchitecture.ARM64) + bool hasArm64 = (arch & AndroidArchitecture.ARM64) != 0; + bool armv7Only = (arch & AndroidArchitecture.ARMv7) != 0 && !hasArm64; + r.Add(new CheckResult { + category = "Build", item = "Target Architecture", + expected = "ARM64", actual = arch.ToString(), + passed = hasArm64 && !armv7Only + }); + } + + private static bool TryReadProjectSettingInt(string sectionName, string key, out int value) + { + value = default; + + string path = Path.Combine(Application.dataPath, "..", "ProjectSettings", "ProjectSettings.asset"); + if (!File.Exists(path)) + return false; + + var lines = File.ReadAllLines(path); + bool inSection = false; + + foreach (var rawLine in lines) { - throw new Exception("Unsupported architecture! Whisper for Android only supports ARM64. " + - "You can change target architecture in Player Settings."); + var line = rawLine.Replace("\t", " "); + var trimmed = line.Trim(); + + if (!inSection) + { + if (trimmed == $"{sectionName}: {{}}") + return false; + + if (trimmed == $"{sectionName}:") + { + inSection = true; + } + + continue; + } + + if (!line.StartsWith(" ")) + break; + + var match = Regex.Match(trimmed, $@"^{Regex.Escape(key)}:\s*(\d+)$"); + if (!match.Success) + continue; + + value = int.Parse(match.Groups[1].Value); + return true; } + + return false; } + + private static void ApplyRecommendedSettings() + { + PlayerSettings.SetIl2CppCompilerConfiguration( + BuildTargetGroup.Android, + Il2CppCompilerConfiguration.Master); + PlayerSettings.SetIl2CppCodeGeneration( + NamedBuildTarget.Android, + Il2CppCodeGeneration.OptimizeSpeed); + PlayerSettings.SetManagedStrippingLevel( + BuildTargetGroup.Android, + ManagedStrippingLevel.High); + // Ensure ARM64 is included — whisper.cpp native library requires ARM64 NEON/ASIMD. + PlayerSettings.Android.targetArchitectures = + PlayerSettings.Android.targetArchitectures | AndroidArchitecture.ARM64; + AssetDatabase.SaveAssets(); + } + } +#endif diff --git a/Packages/com.whisper.unity/Editor/WhisperManagerEditor.cs b/Packages/com.whisper.unity/Editor/WhisperManagerEditor.cs new file mode 100644 index 00000000..21961899 --- /dev/null +++ b/Packages/com.whisper.unity/Editor/WhisperManagerEditor.cs @@ -0,0 +1,144 @@ +using UnityEditor; +using UnityEngine; +using Whisper; + +namespace com.whisper.unity.editor +{ + +/// +/// Custom Inspector for WhisperManager. +/// Shows warning HelpBox when performance-critical fields +/// differ from the recommended optimized values. +/// +[CustomEditor(typeof(WhisperManager))] +public class WhisperManagerEditor : Editor +{ + private const bool RECOMMENDED_FLASH_ATTENTION = true; + private const float RECOMMENDED_TEMPERATURE_INC = 0.0f; + private const int RECOMMENDED_GREEDY_BEST_OF = 1; + // Benchmarked on METALENSE2 / Snapdragon XR2 (2×Cortex-A78 + 6×Cortex-A55): + // 3 threads = 16.60x vs 4 threads = 14.12x (-15% regression at thread 4) + // The 4th thread lands on an A55 efficiency core, causing scheduling contention. + // NOTE: This is SoC-specific. Different big.LITTLE configs need their own validation. + private const int RECOMMENDED_THREADS_XR2 = 3; // validated on Snapdragon XR2 + + public override void OnInspectorGUI() + { + // Draw the default inspector first + DrawDefaultInspector(); + #if !UNITY_ANDROID + return; + #endif + + WhisperManager mgr = (WhisperManager)target; + + EditorGUILayout.Space(8); + + // ── Collect warnings ── + int warningCount = 0; + + // 1. flashAttention (private [SerializeField] → use SerializedProperty) + SerializedProperty flashAttnProp = serializedObject.FindProperty("flashAttention"); + if (flashAttnProp != null && flashAttnProp.boolValue != RECOMMENDED_FLASH_ATTENTION) + { + EditorGUILayout.HelpBox( + $"[Optimization] flashAttention is {flashAttnProp.boolValue}. " + + $"Recommended: {RECOMMENDED_FLASH_ATTENTION}\n" + + "Flash Attention reduces memory bandwidth and improves inference speed.", + MessageType.Warning); + warningCount++; + } + + // 2. temperatureInc (public field) + if (!Mathf.Approximately(mgr.temperatureInc, RECOMMENDED_TEMPERATURE_INC)) + { + EditorGUILayout.HelpBox( + $"[Optimization] temperatureInc is {mgr.temperatureInc:F2}. " + + $"Recommended: {RECOMMENDED_TEMPERATURE_INC:F1}\n" + + "Non-zero value triggers fallback re-decoding passes, increasing latency.", + MessageType.Warning); + warningCount++; + } + + // 3. greedyBestOf (public field) + if (mgr.greedyBestOf != RECOMMENDED_GREEDY_BEST_OF) + { + EditorGUILayout.HelpBox( + $"[Optimization] greedyBestOf is {mgr.greedyBestOf}. " + + $"Recommended: {RECOMMENDED_GREEDY_BEST_OF}\n" + + "Values > 1 run multiple greedy passes and pick the best, multiplying inference time.", + MessageType.Warning); + warningCount++; + } + + // 4. threadsCount — SoC-specific guidance + // Validated only on Snapdragon XR2 (METALENSE2): 3 > 4 due to big.LITTLE contention. + // For other SoCs, auto (0) is a safe starting point; benchmark to confirm. + if (mgr.threadsCount == 0) + { + // auto → min(4, coreCount) = 4 on most Android devices. + // On XR2, thread 4 lands on an A55 efficiency core → -15% throughput. + EditorGUILayout.HelpBox( + "[Optimization] threadsCount = 0 (auto → min(4, coreCount) = 4 on most Android).\n" + + $"If targeting Snapdragon XR2 (e.g. METALENSE2): set to {RECOMMENDED_THREADS_XR2}.\n" + + $" Benchmark result — 3 threads: 16.60x vs 4 threads: 14.12x (−15% at thread 4)\n" + + " Cause: 4th thread is scheduled on an A55 efficiency core (2×A78 + 6×A55 topology).\n" + + "For other SoCs (Snapdragon 8 Gen2/3, Dimensity, Exynos, etc.) optimal count differs —\n" + + "run a benchmark on the target device before overriding.", + MessageType.Warning); + warningCount++; + } + else if (mgr.threadsCount != RECOMMENDED_THREADS_XR2) + { + EditorGUILayout.HelpBox( + $"[Optimization] threadsCount = {mgr.threadsCount}.\n" + + $"Validated optimum for Snapdragon XR2 (METALENSE2): {RECOMMENDED_THREADS_XR2}\n" + + $" 3 threads: 16.60x vs 4 threads: 14.12x (−15%) — confirmed by benchmark.\n" + + "This value is SoC-specific (big.LITTLE core topology). " + + "For other SoCs, benchmark on the target device to find the actual optimum.", + MessageType.Info); + // Only a warning if it looks like an intentionally suboptimal value + if (mgr.threadsCount == 4) + { + EditorGUILayout.HelpBox( + $"threadsCount = 4 is known to be SLOWER than 3 on Snapdragon XR2 (A78×2 + A55×6).\n" + + $"Change to {RECOMMENDED_THREADS_XR2} if this is an XR2 device.", + MessageType.Warning); + warningCount++; + } + } + + // 5. initialPrompt — non-empty prompts risk hallucination on tiny/small models + if (!string.IsNullOrEmpty(mgr.initialPrompt)) + { + EditorGUILayout.HelpBox( + $"[Optimization] initialPrompt is set (\"{ (mgr.initialPrompt.Length > 30 ? mgr.initialPrompt.Substring(0, 30) + "..." : mgr.initialPrompt) }\").\n" + + "Recommended: leave empty (null).\n" + + "Korean language prompts have been observed to cause hallucination (repeating tokens) " + + "and empty output on tiny/small models. Clear unless you have a specific validated use case.", + MessageType.Warning); + warningCount++; + } + + // 6. translateToEnglish — adds a decoder pass + degrades non-English accuracy + if (mgr.translateToEnglish) + { + EditorGUILayout.HelpBox( + "[Optimization] translateToEnglish is enabled.\n" + + "Recommended: false for Korean (or any non-English) transcription.\n" + + "Translation forces an extra decoding pass and reduces accuracy for source-language output.", + MessageType.Warning); + warningCount++; + } + + // ── Summary ── + if (warningCount == 0) + { + EditorGUILayout.HelpBox( + "All performance-critical settings match the recommended optimized values.", + MessageType.Info); + } + } +} + +} \ No newline at end of file diff --git a/Packages/com.whisper.unity/Editor/WhisperManagerEditor.cs.meta b/Packages/com.whisper.unity/Editor/WhisperManagerEditor.cs.meta new file mode 100644 index 00000000..d5db46ca --- /dev/null +++ b/Packages/com.whisper.unity/Editor/WhisperManagerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 946836e4551f9124abb965abaa489510 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.whisper.unity/Editor/com.whisper.unity.editor.asmdef b/Packages/com.whisper.unity/Editor/com.whisper.unity.editor.asmdef index bbdf583f..fec722ae 100644 --- a/Packages/com.whisper.unity/Editor/com.whisper.unity.editor.asmdef +++ b/Packages/com.whisper.unity/Editor/com.whisper.unity.editor.asmdef @@ -1,7 +1,9 @@ { "name": "com.whisper.unity.editor", "rootNamespace": "", - "references": [], + "references": [ + "GUID:07dcbb6497358493fa23aaaad4b6b054" + ], "includePlatforms": [ "Editor" ], diff --git a/Packages/com.whisper.unity/Plugins/Android/libggml-base.a b/Packages/com.whisper.unity/Plugins/Android/libggml-base.a deleted file mode 100644 index d2bea356..00000000 Binary files a/Packages/com.whisper.unity/Plugins/Android/libggml-base.a and /dev/null differ diff --git a/Packages/com.whisper.unity/Plugins/Android/libggml-base.a.meta b/Packages/com.whisper.unity/Plugins/Android/libggml-base.a.meta deleted file mode 100644 index a2b98fc7..00000000 --- a/Packages/com.whisper.unity/Plugins/Android/libggml-base.a.meta +++ /dev/null @@ -1,91 +0,0 @@ -fileFormatVersion: 2 -guid: 46dd8b62a051c4393809675ddae78cef -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude VisionOS: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - AndroidSharedLibraryType: Executable - CPU: ARM64 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - VisionOS: VisionOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: ARM64 - CompileFlags: - FrameworkDependencies: - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: AnyCPU - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.whisper.unity/Plugins/Android/libggml-cpu.a b/Packages/com.whisper.unity/Plugins/Android/libggml-cpu.a deleted file mode 100644 index 5a3dc6e0..00000000 Binary files a/Packages/com.whisper.unity/Plugins/Android/libggml-cpu.a and /dev/null differ diff --git a/Packages/com.whisper.unity/Plugins/Android/libggml-cpu.a.meta b/Packages/com.whisper.unity/Plugins/Android/libggml-cpu.a.meta deleted file mode 100644 index 24c12c07..00000000 --- a/Packages/com.whisper.unity/Plugins/Android/libggml-cpu.a.meta +++ /dev/null @@ -1,91 +0,0 @@ -fileFormatVersion: 2 -guid: dff5f94147e48485b95b2ca717d80e3d -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude VisionOS: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - AndroidSharedLibraryType: Executable - CPU: ARM64 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - VisionOS: VisionOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: ARM64 - CompileFlags: - FrameworkDependencies: - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: AnyCPU - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.whisper.unity/Plugins/Android/libggml.a b/Packages/com.whisper.unity/Plugins/Android/libggml.a deleted file mode 100644 index 02df7471..00000000 Binary files a/Packages/com.whisper.unity/Plugins/Android/libggml.a and /dev/null differ diff --git a/Packages/com.whisper.unity/Plugins/Android/libggml.a.meta b/Packages/com.whisper.unity/Plugins/Android/libggml.a.meta deleted file mode 100644 index 6bd6e215..00000000 --- a/Packages/com.whisper.unity/Plugins/Android/libggml.a.meta +++ /dev/null @@ -1,91 +0,0 @@ -fileFormatVersion: 2 -guid: aa91e87858d3d410184fd5a923e31f5c -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude VisionOS: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - AndroidSharedLibraryType: Executable - CPU: ARM64 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - VisionOS: VisionOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: ARM64 - CompileFlags: - FrameworkDependencies: - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: AnyCPU - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.whisper.unity/Plugins/Android/libwhisper.a b/Packages/com.whisper.unity/Plugins/Android/libwhisper.a index a553d180..89947c22 100644 Binary files a/Packages/com.whisper.unity/Plugins/Android/libwhisper.a and b/Packages/com.whisper.unity/Plugins/Android/libwhisper.a differ diff --git a/Packages/com.whisper.unity/Runtime/Native/WhisperNativeParams.cs b/Packages/com.whisper.unity/Runtime/Native/WhisperNativeParams.cs index acd0102a..d6f6cd37 100644 --- a/Packages/com.whisper.unity/Runtime/Native/WhisperNativeParams.cs +++ b/Packages/com.whisper.unity/Runtime/Native/WhisperNativeParams.cs @@ -161,7 +161,7 @@ public unsafe struct WhisperNativeParams // common decoding parameters: [MarshalAs(UnmanagedType.U1)] bool suppress_blank; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L89 - [MarshalAs(UnmanagedType.U1)] bool suppress_non_speech_tokens; // ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253 + [MarshalAs(UnmanagedType.U1)] bool suppress_nst; // non-speech tokens, ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253 float temperature; // initial decoding temperature, ref: https://ai.stackexchange.com/a/32478 float max_initial_ts; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L97 @@ -177,7 +177,7 @@ public unsafe struct WhisperNativeParams [StructLayout(LayoutKind.Sequential)] struct greedy_struct { - int best_of; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L264 + public int best_of; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L264 } greedy_struct greedy; @@ -191,6 +191,18 @@ struct beam_search_struct beam_search_struct beam_search; + public float TemperatureInc + { + get => temperature_inc; + set => temperature_inc = value; + } + + public int GreedyBestOf + { + get => greedy.best_of; + set => greedy.best_of = value; + } + // called for every newly generated text segment public whisper_new_segment_callback new_segment_callback; public IntPtr new_segment_callback_user_data; diff --git a/Packages/com.whisper.unity/Runtime/Utils/WhisperOptimization.cs b/Packages/com.whisper.unity/Runtime/Utils/WhisperOptimization.cs new file mode 100644 index 00000000..51b187d0 --- /dev/null +++ b/Packages/com.whisper.unity/Runtime/Utils/WhisperOptimization.cs @@ -0,0 +1,53 @@ +using System; + +namespace Whisper.Utils +{ + /// + /// Helper for optimizing whisper inference performance + /// through dynamic audio context calculation. + /// + public static class WhisperOptimization + { + /// + /// Calculate optimal audio context size based on audio length. + /// Using a smaller audio_ctx for short audio can significantly + /// speed up inference (2-6x for audio shorter than 15 seconds). + /// + /// Audio length in seconds + /// Minimum context (default: 64) + /// Maximum context (default: 1500, which is ~30s) + /// Optimal audio_ctx value + public static int CalculateAudioContext(float audioLengthSeconds, int minContext = 64, int maxContext = 1500) + { + // 30 seconds = 1500 audio_ctx in whisper + int ctx = (int)(audioLengthSeconds / 30f * maxContext); + + // Add 10% padding for safety + ctx = (int)(ctx * 1.1f); + + return Math.Clamp(ctx, minContext, maxContext); + } + + /// + /// Calculate optimal audio context from sample count (16kHz sample rate assumed). + /// + /// Number of PCM samples + /// Sample rate (default: 16000 Hz) + /// Optimal audio_ctx value + public static int CalculateAudioContextFromSamples(int sampleCount, int sampleRate = 16000) + { + float seconds = (float)sampleCount / sampleRate; + return CalculateAudioContext(seconds); + } + + /// + /// Get recommended thread count based on processor count. + /// + /// Maximum threads to use (default: 4) + /// Recommended thread count + public static int GetRecommendedThreadCount(int maxThreads = 4) + { + return Math.Min(Environment.ProcessorCount, maxThreads); + } + } +} diff --git a/Packages/com.whisper.unity/Runtime/Utils/WhisperOptimization.cs.meta b/Packages/com.whisper.unity/Runtime/Utils/WhisperOptimization.cs.meta new file mode 100644 index 00000000..98687d78 --- /dev/null +++ b/Packages/com.whisper.unity/Runtime/Utils/WhisperOptimization.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcc4db8212ee5c0458bc029145a62087 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.whisper.unity/Runtime/WhisperManager.cs b/Packages/com.whisper.unity/Runtime/WhisperManager.cs index 732938d2..36ba6695 100644 --- a/Packages/com.whisper.unity/Runtime/WhisperManager.cs +++ b/Packages/com.whisper.unity/Runtime/WhisperManager.cs @@ -34,9 +34,9 @@ public class WhisperManager : MonoBehaviour [SerializeField] private bool useGpu; - [Tooltip("Use the Flash Attention algorithm for faster inference")] + [Tooltip("Use the Flash Attention algorithm for faster inference (RECOMMENDED)")] [SerializeField] - private bool flashAttention; + private bool flashAttention = true; [Header("Language")] [Tooltip("Output text language. Use empty or \"auto\" for auto-detection.")] @@ -90,6 +90,18 @@ public class WhisperManager : MonoBehaviour "These can significantly reduce the quality of the output.")] public int audioCtx; + [Header("Performance Optimization")] + [Tooltip("Temperature increment for fallback sampling (0.0 = no fallback). " + + "FUTO optimization: set to 0.0 for faster inference.")] + public float temperatureInc = 0.0f; + + [Tooltip("Number of best candidates to keep for greedy sampling (default = 5). " + + "FUTO optimization: set to 1 for faster inference.")] + public int greedyBestOf = 1; + + [Tooltip("Number of threads to use (0 = auto-detect CPU cores).")] + public int threadsCount = 0; + /// /// Raised when whisper transcribed a new text segment from audio. /// @@ -233,6 +245,30 @@ public async Task GetTextAsync(AudioClip clip) return res; } + /// + /// Start async transcription of audio clip with automatic audio_ctx optimization. + /// This can provide 2-6x speedup for audio shorter than 15 seconds. + /// + /// Audio clip to transcribe. + /// Whether to auto-calculate optimal audio_ctx. + /// Full audio transcript. Null if transcription failed. + public async Task GetTextAsyncOptimized(AudioClip clip, bool optimizeAudioCtx = true) + { + var isLoaded = await CheckIfLoaded(); + if (!isLoaded) + return null; + + UpdateParams(); + + if (optimizeAudioCtx) + { + _params.AudioCtx = WhisperOptimization.CalculateAudioContext(clip.length); + } + + var res = await _whisper.GetTextAsync(clip, _params); + return res; + } + /// /// Start async transcription of audio buffer. /// @@ -251,6 +287,32 @@ public async Task GetTextAsync(float[] samples, int frequency, in return res; } + /// + /// Start async transcription of audio buffer with automatic audio_ctx optimization. + /// This can provide 2-6x speedup for audio shorter than 15 seconds. + /// + /// Raw audio buffer. + /// Audio sample rate. + /// Audio channels count. + /// Whether to auto-calculate optimal audio_ctx. + /// Full audio transcript. Null if transcription failed. + public async Task GetTextAsyncOptimized(float[] samples, int frequency, int channels, bool optimizeAudioCtx = true) + { + var isLoaded = await CheckIfLoaded(); + if (!isLoaded) + return null; + + UpdateParams(); + + if (optimizeAudioCtx) + { + _params.AudioCtx = WhisperOptimization.CalculateAudioContextFromSamples(samples.Length, frequency); + } + + var res = await _whisper.GetTextAsync(samples, frequency, channels, _params); + return res; + } + /// /// Create a new instance of Whisper streaming transcription. /// @@ -306,6 +368,20 @@ private void UpdateParams() _params.EnableTokens = enableTokens; _params.TokenTimestamps = tokensTimestamps; _params.InitialPrompt = initialPrompt; + + // FUTO Voice Input optimizations + _params.TemperatureInc = temperatureInc; + _params.GreedyBestOf = greedyBestOf; + + // Set threads count (0 = auto-detect, capped at 4 for optimal performance) + if (threadsCount > 0) + { + _params.ThreadsCount = threadsCount; + } + else + { + _params.ThreadsCount = System.Math.Min(4, SystemInfo.processorCount); + } } private WhisperContextParams CreateContextParams() diff --git a/Packages/com.whisper.unity/Runtime/WhisperParams.cs b/Packages/com.whisper.unity/Runtime/WhisperParams.cs index 8041e109..57005a8e 100644 --- a/Packages/com.whisper.unity/Runtime/WhisperParams.cs +++ b/Packages/com.whisper.unity/Runtime/WhisperParams.cs @@ -297,6 +297,30 @@ public bool TokenTimestamps #endregion + #region Decoding Optimization + + /// + /// Temperature increment for fallback sampling (0.0 = no fallback). + /// FUTO optimization: set to 0.0 for faster inference. + /// + public float TemperatureInc + { + get => _param.TemperatureInc; + set => _param.TemperatureInc = value; + } + + /// + /// Number of best candidates to keep for greedy sampling. + /// FUTO optimization: set to 1 for faster inference. + /// + public int GreedyBestOf + { + get => _param.GreedyBestOf; + set => _param.GreedyBestOf = value; + } + + #endregion + #region Speed Up /// diff --git a/Packages/manifest.json b/Packages/manifest.json index 1be39fce..e6245da9 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,11 +1,12 @@ { "dependencies": { - "com.unity.ide.rider": "3.0.14", - "com.unity.ide.visualstudio": "2.0.15", + "com.unity.ai.navigation": "1.1.6", + "com.unity.ide.rider": "3.0.36", + "com.unity.ide.visualstudio": "2.0.22", "com.unity.ide.vscode": "1.2.5", "com.unity.test-framework": "1.3.4", - "com.unity.testtools.codecoverage": "1.0.1", - "com.unity.timeline": "1.6.4", + "com.unity.testtools.codecoverage": "1.2.6", + "com.unity.timeline": "1.7.7", "com.unity.ugui": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 38b91428..ebe365eb 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,14 @@ { "dependencies": { + "com.unity.ai.navigation": { + "version": "1.1.6", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.ai": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.ext.nunit": { "version": "2.0.3", "depth": 1, @@ -8,7 +17,7 @@ "url": "https://packages.unity.com" }, "com.unity.ide.rider": { - "version": "3.0.14", + "version": "3.0.36", "depth": 0, "source": "registry", "dependencies": { @@ -17,7 +26,7 @@ "url": "https://packages.unity.com" }, "com.unity.ide.visualstudio": { - "version": "2.0.15", + "version": "2.0.22", "depth": 0, "source": "registry", "dependencies": { @@ -33,7 +42,7 @@ "url": "https://packages.unity.com" }, "com.unity.settings-manager": { - "version": "1.0.3", + "version": "2.1.0", "depth": 1, "source": "registry", "dependencies": {}, @@ -51,7 +60,7 @@ "url": "https://packages.unity.com" }, "com.unity.testtools.codecoverage": { - "version": "1.0.1", + "version": "1.2.6", "depth": 0, "source": "registry", "dependencies": { @@ -61,13 +70,13 @@ "url": "https://packages.unity.com" }, "com.unity.timeline": { - "version": "1.6.4", + "version": "1.7.7", "depth": 0, "source": "registry", "dependencies": { + "com.unity.modules.audio": "1.0.0", "com.unity.modules.director": "1.0.0", "com.unity.modules.animation": "1.0.0", - "com.unity.modules.audio": "1.0.0", "com.unity.modules.particlesystem": "1.0.0" }, "url": "https://packages.unity.com" @@ -219,17 +228,6 @@ "version": "1.0.0", "depth": 0, "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.uielementsnative": "1.0.0" - } - }, - "com.unity.modules.uielementsnative": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", "dependencies": { "com.unity.modules.ui": "1.0.0", "com.unity.modules.imgui": "1.0.0", diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 1be49244..7a774730 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 23 + serializedVersion: 26 productGUID: e76326c48c19c46c5a71f18bf7b055f4 AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -48,14 +48,16 @@ PlayerSettings: defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 m_ActiveColorSpace: 0 + unsupportedMSAAFallback: 0 + m_SpriteBatchVertexThreshold: 300 m_MTRendering: 1 mipStripping: 0 numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 iosUseCustomAppBackgroundBehavior: 0 - iosAllowHTTPDownload: 1 allowedAutorotateToPortrait: 1 allowedAutorotateToPortraitUpsideDown: 1 allowedAutorotateToLandscapeRight: 1 @@ -74,6 +76,8 @@ PlayerSettings: androidMinimumWindowWidth: 400 androidMinimumWindowHeight: 300 androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 1 defaultIsNativeResolution: 1 macRetinaSupport: 1 runInBackground: 1 @@ -81,10 +85,12 @@ PlayerSettings: muteOtherAudioSources: 0 Prepare IOS For Recording: 1 Force IOS Speakers When Recording: 0 + audioSpatialExperience: 0 deferSystemGesturesMode: 0 hideHomeButton: 0 submitAnalytics: 1 usePlayerLog: 1 + dedicatedServerOptimizations: 0 bakeCollisionMeshes: 0 forceSingleInstance: 0 useFlipModelSwapchain: 1 @@ -119,8 +125,12 @@ PlayerSettings: switchNVNShaderPoolsGranularity: 33554432 switchNVNDefaultPoolsGranularity: 16777216 switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 switchNVNMaxPublicTextureIDCount: 0 switchNVNMaxPublicSamplerIDCount: 0 + switchNVNGraphicsFirmwareMemory: 32 + switchMaxWorkerMultiple: 8 stadiaPresentMode: 0 stadiaTargetFramerate: 0 vulkanNumSwapchainBuffers: 3 @@ -128,12 +138,9 @@ PlayerSettings: vulkanEnablePreTransform: 1 vulkanEnableLateAcquireNextImage: 0 vulkanEnableCommandBufferRecycling: 1 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 + loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 bundleVersion: 0.1 preloadedAssets: [] metroInputSource: 0 @@ -146,8 +153,9 @@ PlayerSettings: isWsaHolographicRemotingEnabled: 0 enableFrameTimingStats: 0 enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 useHDRDisplay: 0 - D3DHDRBitDepth: 0 + hdrBitDepth: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 resolutionScalingMode: 0 @@ -160,6 +168,7 @@ PlayerSettings: iPhone: com.DefaultCompany.whisper-example buildNumber: Standalone: 0 + VisionOS: 0 iPhone: 0 tvOS: 0 overrideDefaultApplicationIdentifier: 0 @@ -177,12 +186,17 @@ PlayerSettings: APKExpansionFiles: 0 keepLoadedShadersAlive: 0 StripUnusedMeshComponents: 1 + strictShaderVariantMatching: 0 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 11.0 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 12.0 tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 11.0 + tvOSTargetOSVersionString: 12.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 @@ -225,13 +239,16 @@ PlayerSettings: iOSMetalForceHardShadows: 0 metalEditorSupport: 1 metalAPIValidation: 1 + metalCompileShaderBinary: 0 iOSRenderExtraFrameOnPause: 0 iosCopyPluginsCodeInsteadOfSymlink: 0 appleDeveloperTeamID: iOSManualSigningProvisioningProfileID: tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: iOSManualSigningProvisioningProfileType: 0 tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 appleEnableAutomaticSigning: 0 iOSRequireARKit: 0 iOSAutomaticallyDetectAndAddCapabilities: 1 @@ -246,6 +263,7 @@ PlayerSettings: useCustomLauncherGradleManifest: 0 useCustomBaseGradleTemplate: 0 useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 useCustomProguardFile: 0 AndroidTargetArchitectures: 2 AndroidTargetDevices: 0 @@ -253,6 +271,7 @@ PlayerSettings: androidSplashScreen: {fileID: 0} AndroidKeystoreName: AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 0 AndroidIsGame: 1 @@ -266,7 +285,6 @@ PlayerSettings: banner: {fileID: 0} androidGamepadSupportLevel: 0 chromeosInputEmulation: 1 - AndroidMinifyWithR8: 0 AndroidMinifyRelease: 0 AndroidMinifyDebug: 0 AndroidValidateAppBundleSize: 1 @@ -478,6 +496,7 @@ PlayerSettings: - m_BuildTarget: WebGL m_StaticBatching: 0 m_DynamicBatching: 0 + m_BuildTargetShaderSettings: [] m_BuildTargetGraphicsJobs: - m_BuildTarget: MacStandaloneSupport m_GraphicsJobs: 0 @@ -529,6 +548,8 @@ PlayerSettings: m_Devices: - Oculus - OpenVR + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 openGLRequireES31: 0 openGLRequireES31AEP: 0 openGLRequireES32: 0 @@ -538,6 +559,13 @@ PlayerSettings: iPhone: 1 tvOS: 1 m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: - m_BuildTarget: Android m_EncodingQuality: 1 - m_BuildTarget: iPhone @@ -545,6 +573,7 @@ PlayerSettings: - m_BuildTarget: tvOS m_EncodingQuality: 1 m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] m_BuildTargetNormalMapEncoding: - m_BuildTarget: Android m_Encoding: 1 @@ -565,6 +594,7 @@ PlayerSettings: locationUsageDescription: microphoneUsageDescription: Microphone transcripton bluetoothUsageDescription: + macOSTargetOSVersion: 10.13.0 switchNMETAOverride: switchNetLibKey: switchSocketMemoryPoolSize: 6144 @@ -572,10 +602,11 @@ PlayerSettings: switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 - switchUseGOLDLinker: 0 + switchEnableFileSystemTrace: 0 switchLTOSetting: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: + switchCompilerFlags: switchTitleNames_0: switchTitleNames_1: switchTitleNames_2: @@ -649,7 +680,6 @@ PlayerSettings: switchReleaseVersion: 0 switchDisplayVersion: 1.0.0 switchStartupUserAccount: 0 - switchTouchScreenUsage: 0 switchSupportedLanguagesMask: 0 switchLogoType: 0 switchApplicationErrorCodeCategory: @@ -691,6 +721,7 @@ PlayerSettings: switchNativeFsCacheSize: 32 switchIsHoldTypeHorizontal: 0 switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 switchSocketConfigEnabled: 0 switchTcpInitialSendBufferSize: 32 switchTcpInitialReceiveBufferSize: 64 @@ -701,8 +732,9 @@ PlayerSettings: switchSocketBufferEfficiency: 4 switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 - switchPlayerConnectionEnabled: 1 + switchDisableHTCSPlayerConnection: 0 switchUseNewStyleFilepaths: 0 + switchUseLegacyFmodPriorities: 0 switchUseMicroSleepForYield: 1 switchEnableRamDiskSupport: 0 switchMicroSleepForYieldTime: 25 @@ -777,6 +809,7 @@ PlayerSettings: ps4videoRecordingFeaturesUsed: 0 ps4contentSearchFeaturesUsed: 0 ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 ps4GPU800MHz: 1 ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] @@ -789,6 +822,7 @@ PlayerSettings: webGLMemorySize: 16 webGLExceptionSupport: 1 webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 webGLDataCaching: 1 webGLDebugSymbols: 0 webGLEmscriptenArgs: @@ -801,22 +835,44 @@ PlayerSettings: webGLLinkerTarget: 1 webGLThreadsSupport: 0 webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 + webGLPowerPreference: 2 scriptingDefineSymbols: {} additionalCompilerArguments: {} platformArchitecture: {} scriptingBackend: Android: 1 - il2cppCompilerConfiguration: {} - managedStrippingLevel: {} + il2cppCompilerConfiguration: + Android: 2 + il2cppCodeGeneration: {} + managedStrippingLevel: + Android: 3 + EmbeddedLinux: 1 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + QNX: 1 + Stadia: 1 + VisionOS: 1 + WebGL: 1 + Windows Store Apps: 1 + XboxOne: 1 + iPhone: 1 + tvOS: 1 incrementalIl2cppBuild: {} suppressCommonWarnings: 1 allowUnsafeCode: 0 useDeterministicCompilation: 1 - enableRoslynAnalyzers: 1 additionalIl2CppArgs: scriptingRuntimeVersion: 1 gcIncremental: 1 - assemblyVersionValidation: 1 gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 @@ -842,6 +898,7 @@ PlayerSettings: metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 platformCapabilities: {} metroTargetDeviceFamilies: {} metroFTAName: @@ -889,8 +946,14 @@ PlayerSettings: luminVersion: m_VersionCode: 1 m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiLogStartupTiming: 0 + hmiCpuConfiguration: apiCompatibilityLevel: 6 activeInputHandler: 0 + windowsGamepadBackendHint: 0 cloudProjectId: framebufferDepthMemorylessMode: 0 qualitySettingsNames: [] @@ -898,6 +961,7 @@ PlayerSettings: organizationId: cloudEnabled: 0 legacyClampBlendShapeWeights: 0 - playerDataPath: - forceSRGBBlit: 1 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index fbb7c0b0..587f809d 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2021.3.3f1 -m_EditorVersionWithRevision: 2021.3.3f1 (af2e63e8f9bd) +m_EditorVersion: 2022.3.62f3 +m_EditorVersionWithRevision: 2022.3.62f3 (96770f904ca7) diff --git a/build_cpp.sh b/build_cpp.sh index 2e65fad0..71558c57 100644 --- a/build_cpp.sh +++ b/build_cpp.sh @@ -69,26 +69,162 @@ build_ios() { build_android() { clean_build - echo "Starting building for Android..." - - cmake -DCMAKE_TOOLCHAIN_FILE="$android_sdk_path" -DANDROID_ABI=arm64-v8a -DGGML_OPENMP=OFF -DBUILD_SHARED_LIBS=OFF \ - -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release ../ - make + echo "Starting building for Android (Optimized)..." + + # ============================================================ + # Optimized Android ARM64 build for whisper.cpp v1.7.5 + # Target: Snapdragon 855 (Kryo 485 = Cortex-A76 big cores) + # Baseline: 10.3x real-time -> Final: 12.0x (+16.5%) + # Measured: 100 iterations, skip first 5 warmup, ggml-tiny.bin + # ============================================================ + + cmake -DCMAKE_TOOLCHAIN_FILE="$android_sdk_path" \ + -DANDROID_ABI=arm64-v8a \ + -DANDROID_PLATFORM=android-21 \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_FLAGS_RELEASE="-Ofast -ffast-math -fno-finite-math-only -ffp-contract=fast \ + -fvisibility=hidden -ffunction-sections -fdata-sections \ + -march=armv8.2-a+fp16+dotprod -mtune=cortex-a76 \ + -funroll-loops -fomit-frame-pointer -finline-functions -fno-stack-protector \ + -fno-exceptions -DNDEBUG \ + -D__ARM_NEON -D__ARM_FEATURE_FMA -D__ARM_FEATURE_DOTPROD \ + -D__ARM_FEATURE_FP16_VECTOR_ARITHMETIC \ + -ftree-vectorize -fvectorize -fslp-vectorize" \ + -DCMAKE_CXX_FLAGS_RELEASE="-Ofast -ffast-math -fno-finite-math-only -ffp-contract=fast \ + -fvisibility=hidden -ffunction-sections -fdata-sections \ + -march=armv8.2-a+fp16+dotprod -mtune=cortex-a76 \ + -funroll-loops -fomit-frame-pointer -finline-functions -fno-stack-protector \ + -fvisibility-inlines-hidden -fno-rtti -DNDEBUG \ + -D__ARM_NEON -D__ARM_FEATURE_FMA -D__ARM_FEATURE_DOTPROD \ + -D__ARM_FEATURE_FP16_VECTOR_ARITHMETIC \ + -ftree-vectorize -fvectorize -fslp-vectorize" \ + -DCMAKE_EXE_LINKER_FLAGS_RELEASE="-Wl,--gc-sections -Wl,--exclude-libs,ALL -Wl,--strip-debug" \ + -DBUILD_SHARED_LIBS=OFF \ + -DGGML_STATIC=ON \ + -DGGML_NATIVE=OFF \ + -DGGML_OPENMP=OFF \ + -DGGML_LTO=OFF \ + -DGGML_CPU=ON \ + -DGGML_CPU_AARCH64=ON \ + -DGGML_CPU_ARM_ARCH="armv8.2-a+fp16+dotprod" \ + -DGGML_CUDA=OFF -DGGML_METAL=OFF -DGGML_VULKAN=OFF -DGGML_OPENCL=OFF \ + -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_EXAMPLES=OFF \ + ../ + # + # ── Flag Reference ── + # + # C/CXX Flags: + # -Ofast .................. Most aggressive optimization (-O3 + fast-math). Foundation of perf gains. + # -ffast-math ............. Relax IEEE 754 strict compliance for faster FP ops. Minor precision tradeoff. + # -fno-finite-math-only ... Keep NaN/Inf checks. Prevents -ffast-math side effects for stability. + # -ffp-contract=fast ...... Allow auto-generation of FMA (Fused Multiply-Add) instructions. + # -fvisibility=hidden ..... Hide symbols by default. Reduces symbol table and binary size. + # -ffunction-sections ..... Place each function in its own section. Enables linker dead-code elimination. + # -fdata-sections ......... Place each data item in its own section. Enables linker dead-data elimination. + # -march=armv8.2-a+fp16+dotprod ... ARMv8.2-A with FP16 half-precision + DotProduct SIMD extensions. + # Enables NEON dotprod for matrix ops. Core SIMD performance driver. + # -mtune=cortex-a76 ....... Tune instruction scheduling for SD855 big cores. Optimizes pipeline usage. + # -funroll-loops .......... Unroll small loops to eliminate branch overhead in inference inner loops. + # -fomit-frame-pointer .... Free up one general-purpose register (frame pointer). + # -finline-functions ...... Inline functions where beneficial. Eliminates call overhead. + # -fno-stack-protector .... Disable stack canary checks. Removes function entry/exit overhead. + # -fno-exceptions ......... Disable C exception handling. Reduces code size and overhead. + # -DNDEBUG ................ Disable assert() macros in release builds. + # -D__ARM_NEON ............ Define NEON SIMD macro. Activates NEON code paths in whisper.cpp. + # -D__ARM_FEATURE_FMA ..... Define FMA extension macro. Activates FMA-specific code paths. + # -D__ARM_FEATURE_DOTPROD . Define DotProduct macro. Activates int8 dotprod quantization ops. + # -D__ARM_FEATURE_FP16_VECTOR_ARITHMETIC ... Define FP16 vector macro. Activates half-precision SIMD. + # -ftree-vectorize ........ GCC-style auto-vectorization. Converts scalar loops to SIMD. + # -fvectorize ............. Clang-style loop vectorization (same purpose, Clang compatibility). + # -fslp-vectorize ......... Superword Level Parallelism. Merges consecutive scalar ops into SIMD. + # + # C++ Only: + # -fvisibility-inlines-hidden ... Hide inline function symbols. Reduces C++ template symbol bloat. + # -fno-rtti ..................... Disable Run-Time Type Information. Removes dynamic_cast/typeid overhead. + # + # Linker: + # -Wl,--gc-sections ......... Remove unused code/data sections. Works with -ffunction/data-sections. + # -Wl,--exclude-libs,ALL .... Hide all static library symbols. Prevents symbol conflicts. + # -Wl,--strip-debug ......... Strip debug symbols. Significantly reduces library size. + # + # GGML/Whisper Options: + # BUILD_SHARED_LIBS=OFF ..... Build static libraries (.a). Required for Unity Android plugin. + # GGML_STATIC=ON ............ Force ggml static build. + # GGML_NATIVE=OFF ........... Disable host CPU detection. Required for cross-compilation. + # GGML_OPENMP=OFF ........... Disable OpenMP. CRITICAL: ON causes -17% regression with IL2CPP OptimizeSpeed. + # GGML_LTO=OFF .............. Disable Link-Time Optimization. CRITICAL: ON destroys NEON vectorization (-51%). + # GGML_CPU=ON ............... Enable CPU backend. + # GGML_CPU_AARCH64=ON ....... Enable ARM64-specific optimized kernels (GEMM, quantization). + # GGML_CPU_ARM_ARCH ......... Set ggml internal ARM architecture target. + # GGML_CUDA/METAL/VULKAN/OPENCL=OFF ... Disable GPU backends (not applicable on Android). + # WHISPER_BUILD_TESTS=OFF ... Skip test binaries. + # WHISPER_BUILD_EXAMPLES=OFF Skip example binaries. + # + # Performance Results (Snapdragon 855, ggml-tiny.bin, 100 iterations): + # GGML_OPENMP=ON alone: +1%, but with IL2CPP OptimizeSpeed: -17% -> must be OFF + # GGML_LTO=ON: -51% (destroys ARM NEON) -> never enable + # android-23 vs android-21: -5% -> keep android-21 + # armv8.4-a+i8mm: not supported on SD855 + + make -j$(nproc) echo "Build for Android complete!" - rm $unity_project/Packages/com.whisper.unity/Plugins/Android/*.a - - artifact_path="$build_path/src/libwhisper.a" - target_path="$unity_project/Packages/com.whisper.unity/Plugins/Android/libwhisper.a" - cp "$artifact_path" "$target_path" - - artifact_path=$build_path/ggml/src - target_path=$unity_project/Packages/com.whisper.unity/Plugins/Android/ - cp "$artifact_path"/*.a "$target_path" - cp "$artifact_path"/*/*.a "$target_path" - - echo "Build files copied to $target_path" + # === Merge static libraries (required for Unity) === + # Combines 4 .a files into a single archive using ar MRI script. + # Output: Packages/com.whisper.unity/Plugins/Android/libwhisper.a + # - libwhisper.a : whisper inference engine + # - libggml.a : ggml tensor operation library + # - libggml-base.a : ggml base utilities + # - libggml-cpu.a : ggml CPU backend (contains ARM64 NEON kernels) + echo "Merging static libraries..." + + local current_build_dir="$(pwd)" + + target_dir="$unity_project/Packages/com.whisper.unity/Plugins/Android" + rm -f "$target_dir"/*.a + + # Locate libomp.a (only needed if OPENMP=ON; currently OFF) + local ndk_root=$(dirname "$(dirname "$(dirname "$android_sdk_path")")") + local omp_lib=$(find "$ndk_root/toolchains/llvm/prebuilt" -name "libomp.a" -path "*aarch64*" | head -1) + + # Find llvm-ar from the NDK for MRI-based archive merging + local ar_tool=$(find "$ndk_root/toolchains/llvm/prebuilt" -name "llvm-ar" | head -1) + if [ -z "$ar_tool" ]; then + ar_tool="ar" + fi + + local merged_lib="$target_dir/libwhisper.a" + local mri_script="$current_build_dir/merge.mri" + + cat > "$mri_script" << EOF +CREATE $merged_lib +ADDLIB $current_build_dir/src/libwhisper.a +ADDLIB $current_build_dir/ggml/src/libggml.a +ADDLIB $current_build_dir/ggml/src/libggml-base.a +ADDLIB $current_build_dir/ggml/src/libggml-cpu.a +EOF + + # Add libomp.a if OpenMP is enabled and the file exists + if [ -n "$omp_lib" ] && [ -f "$omp_lib" ]; then + echo "ADDLIB $omp_lib" >> "$mri_script" + echo "Including libomp.a from: $omp_lib" + fi + + cat >> "$mri_script" << EOF +SAVE +END +EOF + + $ar_tool -M < "$mri_script" + + if [ -f "$merged_lib" ]; then + echo "Combined library created at $merged_lib" + echo "Library size: $(du -h "$merged_lib" | cut -f1)" + else + echo "ERROR: Failed to create merged library!" + exit 1 + fi } if [ "$targets" = "all" ]; then