From 25e5c5dddd4ebcff854161c67a9728acf5bfc7cd Mon Sep 17 00:00:00 2001 From: Stanislav Osipov Date: Thu, 15 Sep 2022 10:02:19 +0300 Subject: [PATCH] feat: Audio Center api (#96) * feat: Audio center allows to play audio clips using pooled audio sources. + use samples * chore: added descrbition for the PlayOneShot method * chore: play one shot descriptions. * chore: Audio sample updated based on UPM convention. --- Runtime/Sound.meta | 8 + Runtime/Sound/AudioCenter.cs | 78 ++ Runtime/Sound/AudioCenter.cs.meta | 11 + Runtime/Sound/PooledAudioSource.cs | 61 ++ Runtime/Sound/PooledAudioSource.cs.meta | 3 + Samples.meta | 8 + Samples/AudioCenter.meta | 8 + Samples/AudioCenter/AudioCenterSample.cs | 29 + Samples/AudioCenter/AudioCenterSample.cs.meta | 11 + Samples/AudioCenter/AudioCenterSample.unity | 775 ++++++++++++++++++ .../AudioCenter/AudioCenterSample.unity.meta | 7 + .../ES_Suction Pop 7 - SFX Producer.mp3 | Bin 0 -> 26096 bytes .../ES_Suction Pop 7 - SFX Producer.mp3.meta | 22 + ...sets.Foundation.Samples.AudioCenter.asmdef | 15 + ...Foundation.Samples.AudioCenter.asmdef.meta | 7 + 15 files changed, 1043 insertions(+) create mode 100644 Runtime/Sound.meta create mode 100644 Runtime/Sound/AudioCenter.cs create mode 100644 Runtime/Sound/AudioCenter.cs.meta create mode 100644 Runtime/Sound/PooledAudioSource.cs create mode 100644 Runtime/Sound/PooledAudioSource.cs.meta create mode 100644 Samples.meta create mode 100644 Samples/AudioCenter.meta create mode 100644 Samples/AudioCenter/AudioCenterSample.cs create mode 100644 Samples/AudioCenter/AudioCenterSample.cs.meta create mode 100644 Samples/AudioCenter/AudioCenterSample.unity create mode 100644 Samples/AudioCenter/AudioCenterSample.unity.meta create mode 100644 Samples/AudioCenter/ES_Suction Pop 7 - SFX Producer.mp3 create mode 100644 Samples/AudioCenter/ES_Suction Pop 7 - SFX Producer.mp3.meta create mode 100644 Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef create mode 100644 Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef.meta diff --git a/Runtime/Sound.meta b/Runtime/Sound.meta new file mode 100644 index 0000000..7e94cd2 --- /dev/null +++ b/Runtime/Sound.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16dcdda780f234c9eaf05af7a2544b9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Sound/AudioCenter.cs b/Runtime/Sound/AudioCenter.cs new file mode 100644 index 0000000..97c4cb6 --- /dev/null +++ b/Runtime/Sound/AudioCenter.cs @@ -0,0 +1,78 @@ +using System; +using StansAssets.Foundation.Extensions; +using StansAssets.Foundation.Patterns; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace StansAssets.Foundation.Audio +{ + /// + /// Simple audio manager that allow to play 2D pooled sounds. + /// Common use case is for playing lot's of UI sounds or other game interaction sounds without 3D effect. + /// + public class AudioCenter + { + readonly GameObject m_Root; + readonly ObjectPool m_Pool; + + /// + /// Creates new audio center. + /// + /// Name will be used for the gameobject that will be used as parent for the polled audio sources. + /// The new audio center instance will be parented to the audioListener gameobject. + public AudioCenter(string name, AudioListener audioListener) + : this(name) + { + m_Root.transform.parent = audioListener.transform; + m_Root.transform.Reset(); + } + + /// + /// Creates new audio center. + /// + /// Name will be used for the gameobject that will be used as parent for the polled audio sources. + public AudioCenter(string name) + { + m_Root = new GameObject(name); + Object.DontDestroyOnLoad(m_Root); + m_Pool = new ObjectPool(() => + { + var pooledSound = new PooledAudioSource(m_Root.transform); + pooledSound.OnRelease += () => + { + m_Pool?.Release(pooledSound); + }; + + return pooledSound; + }, audioSource => + { + audioSource.Activate(); + }, audioSource => + { + audioSource.Deactivate(); + }); + } + + + /// + /// Will take avaliable pooled audio source to play clip once. + /// The pooled audio source will be released after clip is played. + /// + /// The audio clip to play. + public void PlayOneShot(AudioClip clip) + { + m_Pool.Get().PlayOneShot(clip); + } + + /// + /// Get instance of the pooled audio source. + /// You will be responsible for releasing this audio source once you are done using it. + /// + /// + /// + public PooledAudioSource GetAudioSource() + { + return m_Pool.Get(); + } + } +} diff --git a/Runtime/Sound/AudioCenter.cs.meta b/Runtime/Sound/AudioCenter.cs.meta new file mode 100644 index 0000000..97867b0 --- /dev/null +++ b/Runtime/Sound/AudioCenter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d77838d6f9374f42a540cb7a41a7736 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Sound/PooledAudioSource.cs b/Runtime/Sound/PooledAudioSource.cs new file mode 100644 index 0000000..58e20f5 --- /dev/null +++ b/Runtime/Sound/PooledAudioSource.cs @@ -0,0 +1,61 @@ +using System; +using StansAssets.Foundation.Async; +using StansAssets.Foundation.Extensions; +using UnityEngine; + +namespace StansAssets.Foundation.Audio +{ + /// + /// A pooled wrapper around Unity . + /// Used as audio source for the . + /// You can also obtain a new instance by + /// + public class PooledAudioSource + { + readonly AudioSource m_AudioSource; + readonly GameObject m_GameObject; + internal event Action OnRelease; + + internal PooledAudioSource(Transform root) + { + m_GameObject = new GameObject(nameof(AudioSource)); + m_GameObject.transform.parent = root; + m_GameObject.transform.Reset(); + + m_AudioSource = m_GameObject.AddComponent(); + m_AudioSource.playOnAwake = false; + } + + /// + /// Method will play audo clip once, and as soon as audio clip is played + /// the 'Release' method will be called. + /// + /// The audio clip to play. + public void PlayOneShot(AudioClip clip) + { + m_GameObject.name = clip.name; + m_AudioSource.PlayOneShot(clip); + CoroutineUtility.WaitForSeconds(clip.length, Release); + } + + /// + /// Release pooled sound. + /// + public void Release() + { + OnRelease?.Invoke(); + } + + internal void Deactivate() + { + m_GameObject.SetActive(false); + m_AudioSource.volume = 1; + m_AudioSource.clip = null; + } + + internal void Activate() + { + m_GameObject.SetActive(true); + } + } +} diff --git a/Runtime/Sound/PooledAudioSource.cs.meta b/Runtime/Sound/PooledAudioSource.cs.meta new file mode 100644 index 0000000..1ae0f37 --- /dev/null +++ b/Runtime/Sound/PooledAudioSource.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 785d2dc453214f35b3a148803cc0e997 +timeCreated: 1653607186 \ No newline at end of file diff --git a/Samples.meta b/Samples.meta new file mode 100644 index 0000000..1f9dc13 --- /dev/null +++ b/Samples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dff4259e84dd94f6f8c05d1f9004bee9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/AudioCenter.meta b/Samples/AudioCenter.meta new file mode 100644 index 0000000..990d27b --- /dev/null +++ b/Samples/AudioCenter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e40cb123f4f3f40659f0ac514d2bc2a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/AudioCenter/AudioCenterSample.cs b/Samples/AudioCenter/AudioCenterSample.cs new file mode 100644 index 0000000..dfb939e --- /dev/null +++ b/Samples/AudioCenter/AudioCenterSample.cs @@ -0,0 +1,29 @@ +using StansAssets.Foundation.Audio; +using UnityEngine; +using UnityEngine.UI; + +namespace StansAssets.Foundation.Samples +{ + class AudioCenterSample : MonoBehaviour + { + [SerializeField] + AudioClip m_TestClip; + + [SerializeField] + AudioListener m_AudioListener; + + [SerializeField] + Button m_PlayButton; + + AudioCenter m_AudioCenter; + + void Start() + { + m_AudioCenter = new AudioCenter("Sample Audio Center", m_AudioListener); + m_PlayButton.onClick.AddListener(() => + { + m_AudioCenter.PlayOneShot(m_TestClip); + }); + } + } +} diff --git a/Samples/AudioCenter/AudioCenterSample.cs.meta b/Samples/AudioCenter/AudioCenterSample.cs.meta new file mode 100644 index 0000000..2f9908f --- /dev/null +++ b/Samples/AudioCenter/AudioCenterSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cc1fff8c95be426087b2b84ee5e983c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/AudioCenter/AudioCenterSample.unity b/Samples/AudioCenter/AudioCenterSample.unity new file mode 100644 index 0000000..33ad7c2 --- /dev/null +++ b/Samples/AudioCenter/AudioCenterSample.unity @@ -0,0 +1,775 @@ +%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_IndirectSpecularColor: {r: 0.44657815, g: 0.49641192, b: 0.57481617, a: 1} + 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: 2 + 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 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &760145566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 760145567} + - component: {fileID: 760145569} + - component: {fileID: 760145568} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &760145567 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760145566} + 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: 1191550381} + 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 &760145568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760145566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Play One Shot + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &760145569 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760145566} + m_CullTransparentMesh: 1 +--- !u!1 &1035699511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1035699512} + - component: {fileID: 1035699513} + m_Layer: 0 + m_Name: AudioCenterSample + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1035699512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035699511} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + 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!114 &1035699513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035699511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2cc1fff8c95be426087b2b84ee5e983c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_TestClip: {fileID: 8300000, guid: 67473cfa22ab14aa0b34527c5c1414eb, type: 3} + m_AudioListener: {fileID: 1609847151} + m_PlayButton: {fileID: 1191550382} +--- !u!1 &1191550380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1191550381} + - component: {fileID: 1191550384} + - component: {fileID: 1191550383} + - component: {fileID: 1191550382} + m_Layer: 5 + m_Name: Play Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1191550381 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191550380} + 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: 760145567} + m_Father: {fileID: 1413411469} + 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: 21} + m_SizeDelta: {x: 804.3431, y: 150.8143} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1191550382 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191550380} + 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: 1191550383} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1191550383 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191550380} + 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 &1191550384 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191550380} + m_CullTransparentMesh: 1 +--- !u!1 &1413411465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1413411469} + - component: {fileID: 1413411468} + - component: {fileID: 1413411467} + - component: {fileID: 1413411466} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1413411466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1413411465} + 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 &1413411467 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1413411465} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1413411468 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1413411465} + 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_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1413411469 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1413411465} + 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: 1191550381} + m_Father: {fileID: 0} + m_RootOrder: 3 + 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 &1415150046 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1415150048} + - component: {fileID: 1415150047} + 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 &1415150047 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1415150046} + 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 &1415150048 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1415150046} + 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: 2 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1470479423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1470479426} + - component: {fileID: 1470479425} + - component: {fileID: 1470479424} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1470479424 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470479423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1470479425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470479423} + 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 &1470479426 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470479423} + 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: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1609847150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1609847153} + - component: {fileID: 1609847152} + - component: {fileID: 1609847151} + 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 &1609847151 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1609847150} + m_Enabled: 1 +--- !u!20 &1609847152 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1609847150} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + 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 &1609847153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1609847150} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Samples/AudioCenter/AudioCenterSample.unity.meta b/Samples/AudioCenter/AudioCenterSample.unity.meta new file mode 100644 index 0000000..34fda32 --- /dev/null +++ b/Samples/AudioCenter/AudioCenterSample.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 28759bad32b834403bb52d2f9b6b2f6b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/AudioCenter/ES_Suction Pop 7 - SFX Producer.mp3 b/Samples/AudioCenter/ES_Suction Pop 7 - SFX Producer.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..14dc7924946b920ebb310daec0e8ea98c091e7de GIT binary patch literal 26096 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 literal 0 HcmV?d00001 diff --git a/Samples/AudioCenter/ES_Suction Pop 7 - SFX Producer.mp3.meta b/Samples/AudioCenter/ES_Suction Pop 7 - SFX Producer.mp3.meta new file mode 100644 index 0000000..03a4986 --- /dev/null +++ b/Samples/AudioCenter/ES_Suction Pop 7 - SFX Producer.mp3.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 67473cfa22ab14aa0b34527c5c1414eb +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/Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef b/Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef new file mode 100644 index 0000000..38ee15e --- /dev/null +++ b/Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef @@ -0,0 +1,15 @@ +{ + "name": "StansAssets.Foundation.Samples.AudioCenter", + "references": [ + "StansAssets.Foundation" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef.meta b/Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef.meta new file mode 100644 index 0000000..0f8ca19 --- /dev/null +++ b/Samples/AudioCenter/StansAssets.Foundation.Samples.AudioCenter.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9d7d87fb30ef547e1bac1f72d73b3520 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: