diff --git a/Demo/API/Assets/Scenes/InnerAudio.unity b/Demo/API/Assets/Scenes/InnerAudio.unity index bf94bf1dbd546f96a95f7e472f373ef56fd09e78..4dc91c2c082bda6edc7ec110633a7b19d3359872 100644 --- a/Demo/API/Assets/Scenes/InnerAudio.unity +++ b/Demo/API/Assets/Scenes/InnerAudio.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641275, b: 0.5748172, a: 1} + m_IndirectSpecularColor: {r: 0.44657815, g: 0.49641192, b: 0.57481617, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -194,7 +194,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Play 2 + m_Text: Play Short 5 --- !u!222 &475772372 CanvasRenderer: m_ObjectHideFlags: 0 @@ -203,7 +203,7 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 475772369} m_CullTransparentMesh: 0 ---- !u!1 &520074057 +--- !u!1 &594407489 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -211,79 +211,133 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 520074058} - - component: {fileID: 520074060} - - component: {fileID: 520074059} + - component: {fileID: 594407490} + - component: {fileID: 594407493} + - component: {fileID: 594407492} + - component: {fileID: 594407491} m_Layer: 5 - m_Name: Tips + m_Name: Short 5 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &520074058 +--- !u!224 &594407490 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 520074057} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 594407489} + 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_Children: + - {fileID: 475772370} m_Father: {fileID: 2105647631} - m_RootOrder: 0 + m_RootOrder: 2 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: 64.64699} - m_SizeDelta: {x: -273.4621, y: -309.29} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -90} + m_SizeDelta: {x: 320, y: 60} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &520074059 +--- !u!114 &594407491 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 520074057} + m_GameObject: {fileID: 594407489} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + 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: 594407492} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2105647632} + m_TargetAssemblyTypeName: AudioManager, Assembly-CSharp + m_MethodName: playShort5 + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &594407492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594407489} + 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.19607843, g: 0.19607843, b: 0.19607843, a: 1} + 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_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u672C\u573A\u666F\u4F1A\u81EA\u52A8\u4E0B\u8F7D\u5E76\u64AD\u653E\u97F3\u9891" ---- !u!222 &520074060 + 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 &594407493 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 520074057} + m_GameObject: {fileID: 594407489} m_CullTransparentMesh: 0 ---- !u!1 &594407489 +--- !u!1 &647899803 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -291,45 +345,45 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 594407490} - - component: {fileID: 594407493} - - component: {fileID: 594407492} - - component: {fileID: 594407491} + - component: {fileID: 647899804} + - component: {fileID: 647899807} + - component: {fileID: 647899806} + - component: {fileID: 647899805} m_Layer: 5 - m_Name: Play2 + m_Name: Resume m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &594407490 +--- !u!224 &647899804 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 594407489} + m_GameObject: {fileID: 647899803} 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: 475772370} + - {fileID: 1611328529} m_Father: {fileID: 2105647631} - m_RootOrder: 2 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -90} + m_AnchoredPosition: {x: 0, y: -270} m_SizeDelta: {x: 320, y: 60} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &594407491 +--- !u!114 &647899805 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 594407489} + m_GameObject: {fileID: 647899803} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} @@ -363,29 +417,29 @@ MonoBehaviour: m_SelectedTrigger: Selected m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 594407492} + m_TargetGraphic: {fileID: 647899806} m_OnClick: m_PersistentCalls: m_Calls: - m_Target: {fileID: 2105647632} m_TargetAssemblyTypeName: AudioManager, Assembly-CSharp - m_MethodName: playAfterDownload - m_Mode: 3 + m_MethodName: resumeAllAudio + m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 1 + m_IntArgument: 4 m_FloatArgument: 0 m_StringArgument: m_BoolArgument: 0 m_CallState: 2 ---- !u!114 &594407492 +--- !u!114 &647899806 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 594407489} + m_GameObject: {fileID: 647899803} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -409,13 +463,93 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &594407493 +--- !u!222 &647899807 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 594407489} + m_GameObject: {fileID: 647899803} + m_CullTransparentMesh: 0 +--- !u!1 &945804509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 945804510} + - component: {fileID: 945804512} + - component: {fileID: 945804511} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &945804510 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 945804509} + 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: 1970663474} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &945804511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 945804509} + 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: 32 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Play Short +--- !u!222 &945804512 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 945804509} m_CullTransparentMesh: 0 --- !u!1 &1026316876 GameObject: @@ -614,11 +748,11 @@ RectTransform: m_Children: - {fileID: 1026316877} m_Father: {fileID: 2105647631} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -270} + m_AnchoredPosition: {x: 0, y: -360} m_SizeDelta: {x: 320, y: 60} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1187294105 @@ -786,7 +920,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Play Random + m_Text: Pause All --- !u!222 &1260414954 CanvasRenderer: m_ObjectHideFlags: 0 @@ -902,7 +1036,7 @@ GameObject: - component: {fileID: 1302124278} - component: {fileID: 1302124277} m_Layer: 5 - m_Name: Random + m_Name: Pause m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -975,7 +1109,7 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2105647632} m_TargetAssemblyTypeName: AudioManager, Assembly-CSharp - m_MethodName: playRandom + m_MethodName: pauseAllAudio m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -1094,7 +1228,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Play 1 + m_Text: Play BGM --- !u!222 &1360654997 CanvasRenderer: m_ObjectHideFlags: 0 @@ -1136,7 +1270,7 @@ RectTransform: m_Children: - {fileID: 2074957559} m_Father: {fileID: 2105647631} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1267,7 +1401,6 @@ 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 @@ -1305,6 +1438,220 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1611328528 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1611328529} + - component: {fileID: 1611328531} + - component: {fileID: 1611328530} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1611328529 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1611328528} + 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: 647899804} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1611328530 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1611328528} + 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: 32 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Resume All +--- !u!222 &1611328531 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1611328528} + m_CullTransparentMesh: 0 +--- !u!1 &1970663473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1970663474} + - component: {fileID: 1970663477} + - component: {fileID: 1970663476} + - component: {fileID: 1970663475} + m_Layer: 5 + m_Name: Play Short + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1970663474 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970663473} + 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: 945804510} + m_Father: {fileID: 2105647631} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 90} + m_SizeDelta: {x: 320, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1970663475 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970663473} + 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: 1970663476} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2105647632} + m_TargetAssemblyTypeName: AudioManager, Assembly-CSharp + m_MethodName: playShort + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1970663476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970663473} + 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 &1970663477 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970663473} + m_CullTransparentMesh: 0 --- !u!1 &2039791427 GameObject: m_ObjectHideFlags: 0 @@ -1318,7 +1665,7 @@ GameObject: - component: {fileID: 2039791430} - component: {fileID: 2039791429} m_Layer: 5 - m_Name: Play1 + m_Name: Play BGM m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1391,8 +1738,8 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2105647632} m_TargetAssemblyTypeName: AudioManager, Assembly-CSharp - m_MethodName: playAfterDownload - m_Mode: 3 + m_MethodName: playBGM + m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine @@ -1615,10 +1962,11 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 520074058} + - {fileID: 1970663474} - {fileID: 2039791428} - {fileID: 594407490} - {fileID: 1302124276} + - {fileID: 647899804} - {fileID: 1187294104} - {fileID: 1439564062} m_Father: {fileID: 0} diff --git a/Demo/API/Assets/Scripts/AudioManager.cs b/Demo/API/Assets/Scripts/AudioManager.cs index 42a28f5565a84640302c7d702740de23514fb7b1..361bed429fede8a19be1b83b80926d2aa58ebd2e 100644 --- a/Demo/API/Assets/Scripts/AudioManager.cs +++ b/Demo/API/Assets/Scripts/AudioManager.cs @@ -6,13 +6,20 @@ using WeChatWASM; public class AudioManager : MonoBehaviour { // cdn路径音频最多支持10个同时在线播放,先下载后的音频(needDownload)最多支持32个同时播放,先初始化10个 - private static int DEFAULT_AUDIO_COUNT = 10; + //private static int DEFAULT_AUDIO_COUNT = 10; // 创建音频队列 private static Queue audioPool = new Queue(); // 当前场景需要预下载的音频列表 private static string[] audioList = { + // 短音频 + "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20221108/194356/1.mp3", + "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20221108/194517/2.mp3", + "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20221108/194523/3.mp3", + "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20221108/194530/4.mp3", + "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20221108/194536/5.mp3", + // 长音频 "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220901/211827/CallMeTeenTop.mp3", "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220815/105451/1.mp3", "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220901/211846/Night-n.mp3", @@ -23,83 +30,128 @@ public class AudioManager : MonoBehaviour // 正在播放的音频对象列表 private static List audioPlayArray = new List(); + // 背景音乐 + private WXInnerAudioContext audioBGM = null; + private bool isDestroyed = false; + private int createdAudioCount = 0; + // 初始化 public void Start() { - // 创建音频对象池,创建时设置属性需要下载 - for (var i = 0; i < DEFAULT_AUDIO_COUNT; i++) - { - addAudio(); - }; + // // 创建音频对象池,创建时设置属性需要下载 + // for (var i = 0; i < DEFAULT_AUDIO_COUNT; i++) + // { + // addAudio(false); + // }; // 批量下载音频文件 downloadAudio(); - - // 先下载后播放第3个音频 - playAfterDownload(2); - - // 立即播放(但不会缓存到本地)第1个音频 - playRightNow(0); } + // 从缓存池中获取音频实例 private WXInnerAudioContext getAudio() { - if (this.isDestroyed) { + if (this.isDestroyed) + { return null; } if (audioPool.Count == 0) { - addAudio(); + addAudio(false); } var audio = audioPool.Dequeue(); + audio.needDownload = true; audioPlayArray.Add(audio); return audio; } - private void removeAudio(WXInnerAudioContext audio) + // 销毁或回收实例 + private void removeAudio(WXInnerAudioContext audio, bool needDestroy = true) { + audio.OffCanplay(); if (audioPlayArray.Contains(audio)) { - audio.OffCanplay(); audioPlayArray.Remove(audio); - audioPool.Enqueue(audio); } + if (needDestroy) + { + audio.Destroy(); + } + else + { + if (!audioPool.Contains(audio)) + { + audioPool.Enqueue(audio); + } + } + + Debug.Log("___________________"); + Debug.Log("已创建InnerAudio" + createdAudioCount + " 对象池:" + audioPool.Count + " 正在播放:" + audioPlayArray.Count); + Debug.Log("___________________"); } - private WXInnerAudioContext addAudio() + // 创建InnerAudioContext实例 + // 参数needDestroy表示是否需要在播放完之后销毁,目前建议都先销毁再创建使用 + private WXInnerAudioContext addAudio(bool needDestroy = true) { + if (createdAudioCount > 32) + { + Debug.LogError("最多只支持同时使用32个InnerAudio"); + } + var audio = WX.CreateInnerAudioContext(new InnerAudioContextParam() { needDownload = true }); + createdAudioCount += 1; + // 自动播放停止 audio.OnEnded(() => { - removeAudio(audio); + Debug.Log(audio.instanceId + " OnEnded"); + removeAudio(audio, needDestroy); }); // 加载出错 audio.OnError(() => { + Debug.Log(audio.instanceId + "audio OnError"); audio.Stop(); - removeAudio(audio); + removeAudio(audio, needDestroy); }); // 手动停止 audio.OnStop(() => { - removeAudio(audio); + Debug.Log(audio.instanceId + "audio OnStop"); + removeAudio(audio, needDestroy); }); - audioPool.Enqueue(audio); + // 暂停 + audio.OnPause(() => + { + Debug.Log(audio.instanceId + "audio OnPause"); + }); + + // 播放成功 + audio.OnPlay(() => + { + Debug.Log(audio.instanceId + "audio OnPlay"); + }); + + if (!needDestroy) + { + audioPool.Enqueue(audio); + } return audio; } + // 预下载音频 private void downloadAudio() { // 预下载音频 @@ -110,7 +162,7 @@ public class AudioManager : MonoBehaviour // 下载成功 // 下载后播放第2个音频 - playAfterDownload(1); + // playAfterDownload(1); } else { @@ -119,81 +171,144 @@ public class AudioManager : MonoBehaviour }); } - public void playAfterDownload(int index) + // 播放音频 + public void playAfterDownload(int index, bool isShort) { var audioIndex = getAudio(); - if (audioIndex == null) { + if (audioIndex == null) + { return; } - // 如果没有下文修改needDownload为false的函数,理论上创建的所有音频都是true,可以省去这一条 - audioIndex.needDownload = true; - - - if (audioIndex.src == audioList[index]) { - audioIndex.Play(); + // 如果要设置的src和原音频对象一致,可以直接播放 + if (audioIndex.src == audioList[index]) + { + audioIndex.Play(); } - else { - // 对于已经设置了needDownload为true的audio,设置src后就会开始下载对应的音频文件 - // 如果该文件已经下载过,并且配置了缓存本地,就不会重复下载 - // 如果该文件没有下载过,等同于先调用WX.PreDownloadAudios下载后再播放 - audioIndex.src = audioList[index]; - - // 在可以播放时播放 - audioIndex.OnCanplay(() => - { - audioIndex.Play(); - }); + else + { + // 对于已经设置了needDownload为true的audio,设置src后就会开始下载对应的音频文件 + // 如果该文件已经下载过,并且配置了缓存本地,就不会重复下载 + // 如果该文件没有下载过,等同于先调用WX.PreDownloadAudios下载后再播放 + audioIndex.src = audioList[index]; + + // 短音频可以直接调用Play + if (isShort) + { + audioIndex.Play(); + } + else + { + // 长音频在可以播放时播放 + audioIndex.OnCanplay(() => + { + audioIndex.Play(); + }); + } } } + // 不缓存立即播放 public void playRightNow(int index) { // 如果是需要在当前场景立刻播放的音频,则不设置needDownload,音频会边下边播 // 但是再次使用该音频时会因为没有下载而需要再次下载,并不推荐这样使用 var audioPlayRightNow = getAudio(); - if (audioPlayRightNow == null) { + audioPlayRightNow.needDownload = false; + + if (audioPlayRightNow == null) + { return; } - // 修改src会触发下载,所以设置needDownload属性要在修改src之前 - audioPlayRightNow.needDownload = false; - // 如果要设置的src和原音频对象一致,可以直接播放 - if (audioPlayRightNow.src == audioList[index]) { - audioPlayRightNow.Play(); + if (audioPlayRightNow.src == audioList[index]) + { + audioPlayRightNow.Play(); } - else { - // 如果当前音频已经下载过,并且配置了缓存本地,就算设置needDownload为false也不会重复下载 - audioPlayRightNow.src = audioList[index]; - - // 在可以播放时播放 - audioPlayRightNow.OnCanplay(() => - { - audioPlayRightNow.Play(); - }); + else + { + // 如果当前音频已经下载过,并且配置了缓存本地,就算设置needDownload为false也不会重复下载 + audioPlayRightNow.src = audioList[index]; + + // 在可以播放时播放 + audioPlayRightNow.OnCanplay(() => + { + audioPlayRightNow.Play(); + }); } } + // 暂停所有在播放的音乐 + public void pauseAllAudio() + { + audioPlayArray.ForEach(audio => + { + audio.Pause(); + }); + } + + // 重新播放所有在播放的音乐 + public void resumeAllAudio() + { + audioPlayArray.ForEach(audio => + { + // innerAudio没有resume,直接用play重新播放 + audio.Play(); + }); + } + + // 停止所有在播放的音乐 public void stopAllAudio() { - audioPlayArray.ForEach(audio => { + audioPlayArray.ForEach(audio => + { audio.OffCanplay(); audio.Stop(); }); } - public void playRandom() + // 播放短音频 + public void playShort() + { + var index = new System.Random().Next(0, 5); + Debug.Log("playShort:" + index); + + playAfterDownload(index, true); + } + + // 同时播放5个短音频(测试用) + public void playShort5() { - var index = new System.Random().Next(0, audioList.Length); + for (var i = 0; i < 5; i++) + { + this.playShort(); + }; + } + + // 播放背景音乐 + public void playBGM() + { + var index = new System.Random().Next(5, 10); Debug.Log("Play:" + index); - Debug.Log("PlayAudioLength:" + audioPlayArray.Count); - playRightNow(index); + if (audioBGM != null) + { + audioBGM.Stop(); + } + // 长音频在使用后需要销毁 + audioBGM = addAudio(true); + audioPlayArray.Add(audioBGM); + audioBGM.src = audioList[index]; + audioBGM.OnCanplay(() => + { + audioBGM.Play(); + }); } + // 销毁场景 private void OnDestroy() { this.isDestroyed = true; diff --git a/Demo/API/Assets/WX-WASM-SDK/Editor/MiniGameConfig.asset b/Demo/API/Assets/WX-WASM-SDK/Editor/MiniGameConfig.asset index 03fc55ea65fa652aa498aa9e3a856d929f6db21b..5ebda98ce2a996b21b7918116dbcdc87c308c439 100644 --- a/Demo/API/Assets/WX-WASM-SDK/Editor/MiniGameConfig.asset +++ b/Demo/API/Assets/WX-WASM-SDK/Editor/MiniGameConfig.asset @@ -38,7 +38,7 @@ MonoBehaviour: loadingBarWidth: 240 needCheckUpdate: 0 SDKOptions: - UseAudioApi: 0 + UseAudioApi: 1 UseFriendRelation: 0 UseCompressedTexture: 0 CompileOptions: diff --git a/Demo/API/ProjectSettings/EditorBuildSettings.asset b/Demo/API/ProjectSettings/EditorBuildSettings.asset index ccb7048d463b298c3386897ae9d8e5fe3d9ebbff..a8d53bb0e0996f0cb306178af6f3143302ee3969 100644 --- a/Demo/API/ProjectSettings/EditorBuildSettings.asset +++ b/Demo/API/ProjectSettings/EditorBuildSettings.asset @@ -11,4 +11,10 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/SampleScene.unity guid: 9a069299b0b9d4cf68218d815a4c1b38 + - enabled: 1 + path: Assets/Scenes/InnerAudio.unity + guid: 6cc335c875b7242b2b937937d262f304 + - enabled: 1 + path: Assets/Scenes/Recorder.unity + guid: 61476b21b30644ba3b6656f5633e7b3c m_configObjects: {} diff --git a/Demo/API/UserSettings/EditorUserSettings.asset b/Demo/API/UserSettings/EditorUserSettings.asset index f8b5010ffcfed9a66200edf771f94d3ffe08a9c0..caea23d2a6459020088fb02e9bce5b17dbe5e970 100644 --- a/Demo/API/UserSettings/EditorUserSettings.asset +++ b/Demo/API/UserSettings/EditorUserSettings.asset @@ -11,6 +11,12 @@ EditorUserSettings: RecentlyUsedSceneGuid-1: value: 5a5004505c0750020f5e0e7b14775c16404f4a7b742c7e6178284930b3e26760 flags: 0 + RecentlyUsedSceneGuid-2: + value: 5500005153575b0a0f5d5c7444775d1145154e7c797e20657b7a4e36b5e2673b + flags: 0 + RecentlyUsedSceneGuid-3: + value: 5552575556000a035a5b0e7542770d12441541797b717567297b4b61e4b3646c + flags: 0 vcSharedLogLevel: value: 0d5e400f0650 flags: 0 diff --git a/Design/AudioOptimization.md b/Design/AudioOptimization.md index f21a20f34ba5f85eb84f726fcad2f65bc363d3c5..0321efc16fd342615ebe225eb5f264869b38630b 100644 --- a/Design/AudioOptimization.md +++ b/Design/AudioOptimization.md @@ -11,7 +11,7 @@ ### 接口使用 参考[微信开发者文档](https://developers.weixin.qq.com/minigame/dev/api/media/audio/InnerAudioContext.html) -其中src为音频地址,可填本地路径如 xx.wav,运行时会自动和配置的音频地址前缀(默认为DATA_CDN/Assets)做拼接得到最终线上地址。 +其中 src 为音频地址,可填本地路径如 xx.wav,运行时会自动和配置的音频地址前缀(默认为 DATA_CDN/Assets)做拼接得到最终线上地址。 ```c# // 使用方法一:创建音频对象可以在初始化是加上needDownload = true,音频会先下载到本地,然后再播放 @@ -42,7 +42,7 @@ audio2.OnCanplay(() => // 使用方法三:先提前创建音频对象,批量下载音频文件,在下载完成后可以直接修改音频对象的src并播放 -string[] a = { "Audio/0.wav", "Audio/1.wav", "Audio/2.wav" }; +string[] a = { "Audio/0.wav", "Audio/1.wav", "Audio/2.wav" }; var audio3 = WX.CreateInnerAudioContext(new InnerAudioContextParam(){ needDownload = true }); WX.PreDownloadAudios(a, (int res) => { @@ -63,10 +63,12 @@ audio.Stop(); ``` ## 参考示例 -音频一般最多只能同时存在10个,所以必须要开发者自己控制音频对象池重复使用,可以参考以下示例: + +InnerAudioContext 实例最多同时存在 32 个,如果播放的不是本地文件而是 cdn 地址,则最多只支持 10 个,因此建议使用 needDownload 先下载,可以参考以下示例使用: [音频示例](https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Demo/API/Assets/Scripts/AudioManager.cs) ## 示例补充说明 + - 示例只是作为参考,可以不按照示例,以开发者文档为准 - WX.CreateInnerAudioContext 返回的音频对象是可以复用的,可以多次调用 Play 方法播放,但是如果需要多个音频同时播放就要创建多个音频对象。 - 其中音频 src 为音频地址,可填本地路径如 Audios/xx.wav,运行时会自动和配置的音频地址前缀(默认为 DATA_CDN/Assets)做拼接得到最终线上地址。