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