clean project

This commit is contained in:
Helar Jaadla 2022-03-07 17:52:41 +02:00
parent a174b45bd2
commit cbeb10ec35
5100 changed files with 837159 additions and 0 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 83b7bbecd9fac4db9824039903a1eea8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7e2c000a47cf74a35ba28043f5839c1e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,77 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Controller
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.1792453, g: 0.1792453, b: 0.1792453, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3d2e36aacd7dc084b96e0755f1af4137
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,101 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Grid
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _EMISSION
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 50, y: 50}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: a5888ab2610a91d40a5deefc40b7bfe4, type: 3}
m_Scale: {x: 100, y: 100}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BlendOp: 0
- _BumpScale: 1
- _CameraFadingEnabled: 0
- _CameraFarFadeDistance: 2
- _CameraNearFadeDistance: 1
- _ColorMode: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DistortionBlend: 0.5
- _DistortionEnabled: 0
- _DistortionStrength: 1
- _DistortionStrengthScaled: 0
- _DstBlend: 0
- _EmissionEnabled: 0
- _FlipbookMode: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossyReflections: 1
- _LightingEnabled: 0
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SoftParticlesEnabled: 0
- _SoftParticlesFarFadeDistance: 1
- _SoftParticlesNearFadeDistance: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3f9336a53d1d2ea43895699cc52cb411
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,84 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Skybox Light
m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _SUNDISK_HIGH_QUALITY
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _AtmosphereThickness: 1.54
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _Exposure: 1
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SunDisk: 2
- _SunSize: 0
- _SunSizeConvergence: 5
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _GroundColor: {r: 1, g: 1, b: 1, a: 1}
- _SkyTint: {r: 0.5849056, g: 0.322448, b: 0, a: 1}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3a408e788dcbed6429c8d22a01b32a76
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4a0dd92c4753243b18b4100cf4991b5b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,97 @@
fileFormatVersion: 2
guid: e48d18018a0ba46c283d9fd9c227e578
ModelImporter:
serializedVersion: 19301
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 1
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVPackMargin: 4
useFileScale: 1
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,97 @@
fileFormatVersion: 2
guid: 2d10b9b89f2474de9800b152c3d00004
ModelImporter:
serializedVersion: 19301
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 1
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVPackMargin: 4
useFileScale: 1
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 82604acad0a5a414f8a866ee8d466621
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,786 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1591450736581743243
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7719217461193035141}
- component: {fileID: 3948495021522208145}
- component: {fileID: 6581167756232844618}
m_Layer: 0
m_Name: TouchPad
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7719217461193035141
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1591450736581743243}
m_LocalRotation: {x: 0.000000021855694, y: 0, z: -0, w: 1}
m_LocalPosition: {x: 2.2105108e-10, y: -0.0000135928385, z: -0.0049661375}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8270855663187062767}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3948495021522208145
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1591450736581743243}
m_Mesh: {fileID: -1120971793077124694, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &6581167756232844618
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1591450736581743243}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &2833903026367321022
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5488926764375732961}
- component: {fileID: 5546920259920998435}
- component: {fileID: 3591102075257121437}
m_Layer: 0
m_Name: Button_B
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5488926764375732961
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2833903026367321022}
m_LocalRotation: {x: 0.000000059604645, y: -0.000000030733645, z: -0.000000028871002,
w: 1}
m_LocalPosition: {x: -0.007821825, y: 0.0009400594, z: 0.006571072}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8173916776436821938}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5546920259920998435
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2833903026367321022}
m_Mesh: {fileID: 8449303727733987256, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &3591102075257121437
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2833903026367321022}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &2920996176376820429
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5551125943416818270}
- component: {fileID: 1311942897710075639}
- component: {fileID: 804292978268976271}
m_Layer: 0
m_Name: ThumbStick
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5551125943416818270
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2920996176376820429}
m_LocalRotation: {x: 0.00000005960465, y: 0, z: -0, w: 1}
m_LocalPosition: {x: 0.008775876, y: -0.002558912, z: -0.0074315914}
m_LocalScale: {x: 1.342947, y: 1.342947, z: 1.342947}
m_Children: []
m_Father: {fileID: 8173916776436821938}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1311942897710075639
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2920996176376820429}
m_Mesh: {fileID: -2564423107879867638, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &804292978268976271
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2920996176376820429}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &3355591549739262786
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7656785331879846650}
- component: {fileID: 3629011562858007340}
- component: {fileID: 8505742608970525457}
m_Layer: 0
m_Name: Trigger
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7656785331879846650
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3355591549739262786}
m_LocalRotation: {x: 0.000000021855694, y: 3.2567517e-16, z: 0.000000014901159,
w: 1}
m_LocalPosition: {x: -5.559989e-10, y: -0.013359987, z: -0.018506905}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8270855663187062767}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3629011562858007340
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3355591549739262786}
m_Mesh: {fileID: -8653722315008560443, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &8505742608970525457
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3355591549739262786}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &4045590804765120743
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4409659463910318501}
- component: {fileID: 6190287511479189489}
- component: {fileID: 2953040850335233957}
m_Layer: 0
m_Name: ThumbStick_Base
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4409659463910318501
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4045590804765120743}
m_LocalRotation: {x: 0.000000059604645, y: 0, z: -0, w: 1}
m_LocalPosition: {x: 0.008775877, y: 0.00152745, z: -0.0074315914}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8173916776436821938}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6190287511479189489
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4045590804765120743}
m_Mesh: {fileID: -2014588322676101042, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &2953040850335233957
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4045590804765120743}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &5350001822289929954
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8173916776436821938}
m_Layer: 0
m_Name: XRController_LT_Thumbstick_Buttons
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8173916776436821938
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5350001822289929954}
m_LocalRotation: {x: 0.000000021855694, y: 0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 7951258207224713824}
- {fileID: 5488926764375732961}
- {fileID: 5551125943416818270}
- {fileID: 4409659463910318501}
m_Father: {fileID: 8270855663187062767}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &6048850322503762846
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8937122768819410266}
- component: {fileID: 6989809552187391942}
- component: {fileID: 2850486098467457892}
m_Layer: 0
m_Name: Button_Home
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8937122768819410266
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6048850322503762846}
m_LocalRotation: {x: 0.18379451, y: -0.0000000859335, z: 0.000000016067826, w: 0.9829647}
m_LocalPosition: {x: 0.0000000071757764, y: -0.0032368493, z: 0.024549427}
m_LocalScale: {x: 1.01935, y: 1.01935, z: 1.01935}
m_Children: []
m_Father: {fileID: 8270855663187062767}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6989809552187391942
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6048850322503762846}
m_Mesh: {fileID: -8429650256770907399, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &2850486098467457892
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6048850322503762846}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &6877554675875058235
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7951258207224713824}
- component: {fileID: 2046265684884497959}
- component: {fileID: 2101229328401842903}
m_Layer: 0
m_Name: Button_A
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7951258207224713824
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6877554675875058235}
m_LocalRotation: {x: 0.000000059604645, y: -0.000000030733645, z: -0.000000028871002,
w: 1}
m_LocalPosition: {x: -0.011533444, y: 0.0009400594, z: -0.007045295}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8173916776436821938}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2046265684884497959
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6877554675875058235}
m_Mesh: {fileID: 5083779560280695074, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &2101229328401842903
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6877554675875058235}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &8103503810883324120
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5729059251352797873}
- component: {fileID: 7013576290909491880}
- component: {fileID: 2937204069651033959}
m_Layer: 0
m_Name: Controller_Base
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5729059251352797873
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8103503810883324120}
m_LocalRotation: {x: 0.000000021855694, y: 0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8270855663187062767}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &7013576290909491880
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8103503810883324120}
m_Mesh: {fileID: 22788929071467060, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &2937204069651033959
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8103503810883324120}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &8443930452699679086
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8402887055810999798}
- component: {fileID: 7720275433028147840}
- component: {fileID: 5436389215136348666}
m_Layer: 0
m_Name: Bumper
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8402887055810999798
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8443930452699679086}
m_LocalRotation: {x: 0.000000021668717, y: -0.1305262, z: 0.0000000028527405, w: 0.9914449}
m_LocalPosition: {x: -0.012636564, y: -0.028556997, z: 0.027326612}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8270855663187062767}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &7720275433028147840
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8443930452699679086}
m_Mesh: {fileID: -4189514412694937182, guid: e48d18018a0ba46c283d9fd9c227e578, type: 3}
--- !u!23 &5436389215136348666
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8443930452699679086}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &8758423527188247893
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8270855663187062767}
m_Layer: 0
m_Name: XRControllerLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8270855663187062767
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8758423527188247893}
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_Children:
- {fileID: 8402887055810999798}
- {fileID: 8937122768819410266}
- {fileID: 5729059251352797873}
- {fileID: 7719217461193035141}
- {fileID: 7656785331879846650}
- {fileID: 8173916776436821938}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5b158b94c373d4b4f9e98cdb92789343
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,783 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &631318195828040478
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3716161019320855118}
m_Layer: 0
m_Name: XRController_LT_Thumbstick_Buttons
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3716161019320855118
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 631318195828040478}
m_LocalRotation: {x: 0.000000021855694, y: 0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 3217094005667092380}
- {fileID: 1067765487391569693}
- {fileID: 1149664065565101986}
- {fileID: 9209759161381479513}
m_Father: {fileID: 3475118261464492563}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1228417906145134178
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4538198013890515110}
- component: {fileID: 2593272954759969338}
- component: {fileID: 7310209448969834136}
m_Layer: 0
m_Name: Button_Home
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4538198013890515110
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1228417906145134178}
m_LocalRotation: {x: 0.17364818, y: -0.00000008609464, z: 0.000000015180808, w: 0.9848078}
m_LocalPosition: {x: -0.0000000071777, y: -0.0032408535, z: 0.024560427}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3475118261464492563}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2593272954759969338
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1228417906145134178}
m_Mesh: {fileID: -8429650256770907399, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &7310209448969834136
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1228417906145134178}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &2129104537058187207
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3217094005667092380}
- component: {fileID: 6816243177344082907}
- component: {fileID: 6905410428598011691}
m_Layer: 0
m_Name: Button_A
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3217094005667092380
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2129104537058187207}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.011533444, y: 0.0009400594, z: -0.007045295}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3716161019320855118}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6816243177344082907
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2129104537058187207}
m_Mesh: {fileID: 5083779560280695074, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &6905410428598011691
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2129104537058187207}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &3641317572183526692
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 971748149831272269}
- component: {fileID: 2569541872588003156}
- component: {fileID: 7655812912622807707}
m_Layer: 0
m_Name: Controller_Base
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &971748149831272269
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3641317572183526692}
m_LocalRotation: {x: 0.000000021855694, y: 0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3475118261464492563}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2569541872588003156
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3641317572183526692}
m_Mesh: {fileID: 22788929071467060, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &7655812912622807707
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3641317572183526692}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &4022625689426332818
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3918395025868533770}
- component: {fileID: 3016865672996839292}
- component: {fileID: 687940176838523910}
m_Layer: 0
m_Name: Bumper
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3918395025868533770
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4022625689426332818}
m_LocalRotation: {x: -0.70441604, y: 0.061628427, z: 0.061628427, w: 0.7044161}
m_LocalPosition: {x: 0.012636564, y: -0.028556997, z: 0.027326612}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3475118261464492563}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3016865672996839292
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4022625689426332818}
m_Mesh: {fileID: -4189514412694937182, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &687940176838523910
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4022625689426332818}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &4283425761326543017
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3475118261464492563}
m_Layer: 0
m_Name: XRControllerRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3475118261464492563
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4283425761326543017}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.0753, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 3918395025868533770}
- {fileID: 4538198013890515110}
- {fileID: 971748149831272269}
- {fileID: 3016789030709610617}
- {fileID: 2936275983042619142}
- {fileID: 3716161019320855118}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &6118169511635425143
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3016789030709610617}
- component: {fileID: 8373948243224051821}
- component: {fileID: 1848978295326630070}
m_Layer: 0
m_Name: TouchPad
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3016789030709610617
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6118169511635425143}
m_LocalRotation: {x: 0.000000021855694, y: 0, z: -0, w: 1}
m_LocalPosition: {x: 2.2105108e-10, y: -0.0000135928385, z: -0.0049661375}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3475118261464492563}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8373948243224051821
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6118169511635425143}
m_Mesh: {fileID: -1120971793077124694, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &1848978295326630070
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6118169511635425143}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &7325642504921798210
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1067765487391569693}
- component: {fileID: 1010913343161546207}
- component: {fileID: 8298949448185474913}
m_Layer: 0
m_Name: Button_B
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1067765487391569693
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7325642504921798210}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.007821825, y: 0.0009400594, z: 0.006571072}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3716161019320855118}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1010913343161546207
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7325642504921798210}
m_Mesh: {fileID: 8449303727733987256, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &8298949448185474913
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7325642504921798210}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &7670919110547240753
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1149664065565101986}
- component: {fileID: 5821210241915783947}
- component: {fileID: 5320034229441704307}
m_Layer: 0
m_Name: ThumbStick
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1149664065565101986
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7670919110547240753}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.008775876, y: -0.002558912, z: -0.0074315914}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3716161019320855118}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5821210241915783947
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7670919110547240753}
m_Mesh: {fileID: -2564423107879867638, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &5320034229441704307
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7670919110547240753}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &7812784923275191998
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2936275983042619142}
- component: {fileID: 8115825213372190416}
- component: {fileID: 3816683123715682029}
m_Layer: 0
m_Name: Trigger
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2936275983042619142
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7812784923275191998}
m_LocalRotation: {x: 0.000000021855694, y: 0, z: -0, w: 1}
m_LocalPosition: {x: -5.559989e-10, y: -0.013359987, z: -0.018506905}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3475118261464492563}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8115825213372190416
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7812784923275191998}
m_Mesh: {fileID: -8653722315008560443, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &3816683123715682029
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7812784923275191998}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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
--- !u!1 &8852161128374344987
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9209759161381479513}
- component: {fileID: 1663432946110593549}
- component: {fileID: 7639984874612879961}
m_Layer: 0
m_Name: ThumbStick_Base
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &9209759161381479513
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8852161128374344987}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.008775877, y: 0.00152745, z: -0.0074315914}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3716161019320855118}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1663432946110593549
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8852161128374344987}
m_Mesh: {fileID: -2014588322676101042, guid: 2d10b9b89f2474de9800b152c3d00004, type: 3}
--- !u!23 &7639984874612879961
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8852161128374344987}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 3d2e36aacd7dc084b96e0755f1af4137, type: 2}
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

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1f4d373a613d0466fbd8849470265852
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2aab7ef822b354523935cb8a8fdb23fc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,152 @@
fileFormatVersion: 2
guid: a5888ab2610a91d40a5deefc40b7bfe4
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Windows Store Apps
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Lumin
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4aa865ce879c443d3b970d28b0499121
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8e9214df9da5b4a17af52339d5d82789
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1,140 @@
fileFormatVersion: 2
guid: 11e34d76fce7843be984510eca5c9139
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,116 @@
fileFormatVersion: 2
guid: 6eaf09dd6cc8a49708bf60691e32bebf
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,64 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 89305aa391d1c5141bbe1628d930a2c5, type: 3}
m_Name: VRTutorialContainer
m_EditorClassIdentifier:
Modified:
m_PersistentCalls:
m_Calls: []
ParentContainer: {fileID: 0}
OrderInView: 0
BackgroundImage: {fileID: 2800000, guid: 6eaf09dd6cc8a49708bf60691e32bebf, type: 3}
Title:
m_Untranslated: Virtual Reality Template
Subtitle:
m_Untranslated:
Description:
m_Untranslated:
ProjectLayout: {fileID: 102900000, guid: eabc9546105bf4accac1fd62a63e88e6, type: 3}
Sections:
- OrderInView: 0
Heading:
m_Untranslated: 'Documentation '
Text:
m_Untranslated:
Metadata:
Url: https://docs.unity3d.com/Packages/com.unity.template.vr@latest
Image: {fileID: 2800000, guid: caa22bb026fa84979ba1be2779739367, type: 3}
Tutorial: {fileID: 0}
- OrderInView: 2
Heading:
m_Untranslated: Forums
Text:
m_Untranslated:
Metadata:
Url: https://forum.unity.com/forums/ar-vr-xr-discussion.80/
Image: {fileID: 2800000, guid: caa22bb026fa84979ba1be2779739367, type: 3}
Tutorial: {fileID: 0}
- OrderInView: 4
Heading:
m_Untranslated: Bug Reporting
Text:
m_Untranslated:
Metadata:
Url: https://unity3d.com/unity/qa/bug-reporting
Image: {fileID: 2800000, guid: caa22bb026fa84979ba1be2779739367, type: 3}
Tutorial: {fileID: 0}
- OrderInView: 6
Heading:
m_Untranslated: Template Feedback
Text:
m_Untranslated:
Metadata:
Url: 'https://unitysoftware.co1.qualtrics.com/jfe/form/SV_b8GWOIYxi4l6PDE?templatename=vr '
Image: {fileID: 2800000, guid: caa22bb026fa84979ba1be2779739367, type: 3}
Tutorial: {fileID: 0}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 66a752886585f42d5b39f6f643d399f9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,36 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 579f019eb5d26450982c6ae506c6c3ff, type: 3}
m_Name: VRTutorialProjectSettings
m_EditorClassIdentifier:
m_WelcomePage: {fileID: 11400000, guid: 3bf5c60804f704e11826afa05a7e2152, type: 2}
m_InitialScene: {fileID: 102900000, guid: 9fc0d4010bbf28b4594072e72b8655ab, type: 3}
m_InitialCameraSettings:
m_CameraMode: 0
m_FocusMode: 0
m_Orthographic: 0
m_Size: 0
m_Pivot: {x: 0, y: 0, z: 0}
m_Rotation: {x: 0, y: 0, z: 0, w: 0}
m_FrameObject:
m_SceneGuid:
m_GameObjectGuid:
m_SerializedComponentType:
m_TypeName:
m_ComponentIndex: 0
m_AssetObject: {fileID: 0}
m_Prefab: {fileID: 0}
m_Enabled: 0
m_RestoreDefaultAssetsOnTutorialReload: 0
m_UseLegacyStartupBehavior: 0
m_StartupTutorial: {fileID: 0}
m_TutorialStyle: {fileID: 11400000, guid: 148a9beb0fa9a4026a837fad3a14e6a4, type: 2}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 76b4acc4d12394f60a5accbec43ae2a7
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,27 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a385a00f03d2f4d1aa06e69dc6fdeea4, type: 3}
m_Name: VRTutorialStyle
m_EditorClassIdentifier:
m_Skin: {fileID: 0}
m_OrderedListDelimiter: .
m_UnorderedListBullet: "\u2022"
m_MaskingColor: {r: 0, g: 0.15686275, b: 0.20784314, a: 0.8}
m_HighlightColor: {r: 0, g: 0.7764706, b: 0.8745098, a: 1}
m_BlockedInteractionColor: {r: 1, g: 1, b: 1, a: 0.5}
m_HighlightThickness: 3
m_HighlightAnimationSpeed: 1.5
m_HighlightAnimationDelay: 5
TextColorMainDarkSkin: {r: 1, g: 1, b: 1, a: 1}
TextColorMainLightSkin: {r: 0, g: 0, b: 0, a: 1}
TextColorSecondaryDarkSkin: {r: 0.66, g: 0.66, b: 0.66, a: 1}
TextColorSecondaryLightSkin: {r: 0.33, g: 0.33, b: 0.33, a: 1}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 148a9beb0fa9a4026a837fad3a14e6a4
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,44 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0885f594ab85594caa28e1a96cbe0d8, type: 3}
m_Name: VRTutorialWelcomePage
m_EditorClassIdentifier:
m_Image: {fileID: 2800000, guid: 11e34d76fce7843be984510eca5c9139, type: 3}
m_WindowTitle:
m_Untranslated: VR Project Template
m_Title:
m_Untranslated: Welcome to the VR Template Project!
m_Description:
m_Untranslated: "Before you begin, go to Edit > Project Settings > XR Plug-in
Management and select the platform(s) you plan to deploy to. If you don\u2019t
see your platform listed, make sure you have the right build targets installed
in Unity Hub. For more information on the content and settings used in this
template, you can refer to the documentation <a href=\"https://docs.unity3d.com/2019.4/Documentation/Manual/xr-template-vr.html\">here</a>."
m_Buttons:
- Text:
m_Untranslated: Close
Tooltip:
m_Untranslated:
OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 11400000}
m_MethodName: CloseCurrentModalDialog
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: 1

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3bf5c60804f704e11826afa05a7e2152
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Oculus.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 26d246aaa301eb64caf9a41cec2012ec
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 111b98a3df7f8114fb9ea4103901b293
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 29ab7e927676ef74a93aeedf4146f1ac
folderAsset: yes
timeCreated: 1470780399
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 180c8a539f95cce428f820b0ba392c1f
folderAsset: yes
timeCreated: 1468506676
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 485ac48a563e2bf44bb4de7ead5a1f68
timeCreated: 1461716881
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: d3994560fb567c34a821fd9355c10eef
timeCreated: 1461716882
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 7000b4d67a1320940b363f3cf891dfff
timeCreated: 1461716881
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 8198ccc08475a764daaf226b841a55f1
timeCreated: 1461716882
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,26 @@
{
"name": "Oculus.AudioManager",
"references": [
"Oculus.Spatializer"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.unity.xr.management",
"expression": "",
"define": "USING_XR_MANAGEMENT"
},
{
"name": "com.unity.xr.oculus",
"expression": "",
"define": "USING_XR_SDK_OCULUS"
}
],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 21b850ac1b5452b46a20c637f002dbf9
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 6d597fe114807b54a99033a3dae9ce0d
folderAsset: yes
timeCreated: 1470780399
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 7ee6cbebddf12044c95f9d6eb6e40823
folderAsset: yes
timeCreated: 1470780399
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,36 @@
using UnityEngine;
using System.Collections;
namespace OVR
{
public class TestScript : MonoBehaviour {
[InspectorNote( "Sound Setup", "Press '1' to play testSound1 and '2' to play testSound2")]
public SoundFXRef testSound1;
public SoundFXRef testSound2;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
// use attached game object location
if ( Input.GetKeyDown( KeyCode.Alpha1 ) )
{
testSound1.PlaySoundAt( transform.position );
}
// hard code information
if ( Input.GetKeyDown( KeyCode.Alpha2 ) ) {
testSound2.PlaySoundAt( new Vector3( 5.0f, 0.0f, 0.0f ) );
}
}
}
} // namespace OVR

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: cfae243ecd01edd49bd439c56a8b18cf
timeCreated: 1468506975
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,484 @@
%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: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 0
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 0
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: 1024
m_ReflectionCompression: 2
m_MixedBakeMode: 1
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 512
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 0
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 0
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_UseShadowmask: 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
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &767466533
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 767466535}
- component: {fileID: 767466534}
m_Layer: 0
m_Name: AudioManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &767466534
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 767466533}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6d1d30b41806244fca035fdae2896fb7, type: 3}
m_Name:
m_EditorClassIdentifier:
makePersistent: 1
enableSpatializedAudio: 1
enableSpatializedFastOverride: 0
audioMixer: {fileID: 0}
defaultMixerGroup: {fileID: 24300001, guid: 323417d454569d94fa01d511f6eb44d9, type: 2}
reservedMixerGroup: {fileID: 0}
voiceChatMixerGroup: {fileID: 0}
verboseLogging: 0
maxSoundEmitters: 32
volumeSoundFX: 1
soundFxFadeSecs: 1
audioMinFallOffDistance: 1
audioMaxFallOffDistance: 25
soundGroupings:
- name: Test Group
soundList:
- name: TestSound1
playback: 0
volume: 1
pitchVariance: {x: 0.95, y: 1.05}
falloffDistance: {x: 1, y: 25}
falloffCurve: 2
volumeFalloffCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1.0044228
inSlope: -1.9459304
outSlope: -1.9459304
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.27001944
value: 0.24837627
inSlope: -1.3226271
outSlope: -1.3226271
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.99744946
value: -0.0020017216
inSlope: -0.42040923
outSlope: -0.42040923
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 0
reverbZoneMix:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1.0044228
inSlope: -1.9459304
outSlope: -1.9459304
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.36357749
value: 0.4567863
inSlope: -1.3226271
outSlope: -1.3226271
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.99594045
value: 0.19572063
inSlope: -0.107312
outSlope: -0.107312
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 0
spread: 0
pctChanceToPlay: 1
priority: 0
delay: {x: 0, y: 0}
looping: 0
ospProps:
enableSpatialization: 1
useFastOverride: 1
gain: 0
enableInvSquare: 1
volumetric: 0
invSquareFalloff: {x: 1, y: 250}
soundClips:
- {fileID: 8300000, guid: 7000b4d67a1320940b363f3cf891dfff, type: 3}
- {fileID: 8300000, guid: 8198ccc08475a764daaf226b841a55f1, type: 3}
visibilityToggle: 0
- name: TestSound2
playback: 0
volume: 1
pitchVariance: {x: 0.79999995, y: 1.25}
falloffDistance: {x: 1, y: 25}
falloffCurve: 1
volumeFalloffCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMix:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spread: 0
pctChanceToPlay: 1
priority: 0
delay: {x: 0, y: 0}
looping: 0
ospProps:
enableSpatialization: 1
useFastOverride: 0
gain: 0
enableInvSquare: 0
volumetric: 0
invSquareFalloff: {x: 1, y: 25}
soundClips:
- {fileID: 8300000, guid: 485ac48a563e2bf44bb4de7ead5a1f68, type: 3}
- {fileID: 8300000, guid: d3994560fb567c34a821fd9355c10eef, type: 3}
visibilityToggle: 0
mixerGroup: {fileID: 24300001, guid: 1dd706bb85d8aef4e83a6229dbd62c36, type: 2}
maxPlayingSounds: 0
preloadAudio: 0
volumeOverride: 1
playingSoundCount: 0
--- !u!4 &767466535
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 767466533}
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_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1050355579
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1050355581}
- component: {fileID: 1050355580}
m_Layer: 0
m_Name: TestScript
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1050355580
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1050355579}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cfae243ecd01edd49bd439c56a8b18cf, type: 3}
m_Name:
m_EditorClassIdentifier:
testSound1:
soundFXName: TestSound1
testSound2:
soundFXName: TestSound2
--- !u!4 &1050355581
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1050355579}
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_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2106254871
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2106254876}
- component: {fileID: 2106254875}
- component: {fileID: 2106254873}
- component: {fileID: 2106254872}
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 &2106254872
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2106254871}
m_Enabled: 1
--- !u!124 &2106254873
Behaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2106254871}
m_Enabled: 1
--- !u!20 &2106254875
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2106254871}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844}
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: 1
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: 0
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &2106254876
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2106254871}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 600e5d49b0a68254286400e32c53addc
timeCreated: 1468506358
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 25be027379f7fce4d97ba2bcaf313019
folderAsset: yes
timeCreated: 1470780399
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: b8c0d722519c64144a78f8fc99cd40b5
folderAsset: yes
timeCreated: 1468505670
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,118 @@
using UnityEngine;
using System.Collections;
namespace OVR
{
/*
-----------------------
AmbienceEmitter()
-----------------------
*/
public class AmbienceEmitter : MonoBehaviour {
public SoundFXRef[] ambientSounds = new SoundFXRef[0];
public bool autoActivate = true;
[Tooltip("Automatically play the sound randomly again when checked. Should be OFF for looping sounds")]
public bool autoRetrigger = true;
[MinMax( 2.0f, 4.0f, 0.1f, 10.0f )]
public Vector2 randomRetriggerDelaySecs = new Vector2( 2.0f, 4.0f );
[Tooltip( "If defined, the sounds will randomly play from these transform positions, otherwise the sound will play from this transform" )]
public Transform[] playPositions = new Transform[0];
private bool activated = false;
private int playingIdx = -1;
private float nextPlayTime = 0.0f;
private float fadeTime = 0.25f;
private int lastPosIdx = -1;
/*
-----------------------
Awake()
-----------------------
*/
void Awake() {
if ( autoActivate ) {
activated = true;
nextPlayTime = Time.time + Random.Range( randomRetriggerDelaySecs.x, randomRetriggerDelaySecs.y );
}
// verify all the play positions are valid
foreach ( Transform t in playPositions ) {
if ( t == null ) {
Debug.LogWarning( "[AmbienceEmitter] Invalid play positions in " + name );
playPositions = new Transform[0];
break;
}
}
}
/*
-----------------------
Update()
-----------------------
*/
void Update() {
if ( activated ) {
if ( ( playingIdx == -1 ) || autoRetrigger ) {
if ( Time.time >= nextPlayTime ) {
Play();
if ( !autoRetrigger ) {
activated = false;
}
}
}
}
}
/*
-----------------------
OnTriggerEnter()
-----------------------
*/
public void OnTriggerEnter( Collider col ) {
activated = !activated;
}
/*
-----------------------
Play()
-----------------------
*/
public void Play() {
Transform transformToPlayFrom = transform;
if ( playPositions.Length > 0 ) {
int idx = Random.Range( 0, playPositions.Length );
while ( ( playPositions.Length > 1 ) && ( idx == lastPosIdx ) ) {
idx = Random.Range( 0, playPositions.Length );
}
transformToPlayFrom = playPositions[idx];
lastPosIdx = idx;
}
playingIdx = ambientSounds[Random.Range(0, ambientSounds.Length)].PlaySoundAt( transformToPlayFrom.position );
if ( playingIdx != -1 ) {
AudioManager.FadeInSound( playingIdx, fadeTime );
nextPlayTime = Time.time + Random.Range( randomRetriggerDelaySecs.x, randomRetriggerDelaySecs.y );
}
}
/*
-----------------------
EnableEmitter()
-----------------------
*/
public void EnableEmitter( bool enable ) {
activated = enable;
if ( enable ) {
Play();
} else {
if ( playingIdx != -1 ) {
AudioManager.FadeOutSound( playingIdx, fadeTime );
}
}
}
}
} // namespace OVR

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c11944691f6b9cf44a391c95cb3f7dea
timeCreated: 1455050294
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,429 @@
using UnityEngine;
using UnityEngine.Audio;
using System.Collections;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
using System;
using System.Reflection;
#endif
namespace OVR
{
public enum PreloadSounds {
Default, // default unity behavior
Preload, // audio clips are forced to preload
ManualPreload, // audio clips are forced to not preload, preloading must be done manually
}
public enum Fade
{
In,
Out
}
[System.Serializable]
public class SoundGroup {
public SoundGroup( string name ) {
this.name = name;
}
public SoundGroup() {
mixerGroup = null;
maxPlayingSounds = 0;
preloadAudio = PreloadSounds.Default;
volumeOverride = 1.0f;
}
public void IncrementPlayCount() {
playingSoundCount = Mathf.Clamp( ++playingSoundCount, 0, maxPlayingSounds );
}
public void DecrementPlayCount() {
playingSoundCount = Mathf.Clamp( --playingSoundCount, 0, maxPlayingSounds );
}
public bool CanPlaySound() {
return ( maxPlayingSounds == 0 ) || ( playingSoundCount < maxPlayingSounds );
}
public string name = string.Empty;
public SoundFX[] soundList = new SoundFX[0];
public AudioMixerGroup mixerGroup = null; // default = AudioManager.defaultMixerGroup
[Range(0,64)]
public int maxPlayingSounds = 0; // default = 0, unlimited
// TODO: this preload behavior is not yet implemented
public PreloadSounds preloadAudio = PreloadSounds.Default; // default = true, audio clip data will be preloaded
public float volumeOverride = 1.0f; // default = 1.0
[HideInInspector]
public int playingSoundCount = 0;
}
/*
-----------------------
AudioManager
-----------------------
*/
public partial class AudioManager : MonoBehaviour {
[Tooltip("Make the audio manager persistent across all scene loads")]
public bool makePersistent = true; // true = don't destroy on load
[Tooltip("Enable the OSP audio plugin features")]
public bool enableSpatializedAudio = true; // true = enable spatialized audio
[Tooltip("Always play spatialized sounds with no reflections (Default)")]
public bool enableSpatializedFastOverride = false; // true = disable spatialized reflections override
[Tooltip("The audio mixer asset used for snapshot blends, etc.")]
public AudioMixer audioMixer = null;
[Tooltip( "The audio mixer group used for the pooled emitters" )]
public AudioMixerGroup defaultMixerGroup = null;
[Tooltip( "The audio mixer group used for the reserved pool emitter" )]
public AudioMixerGroup reservedMixerGroup = null;
[Tooltip( "The audio mixer group used for voice chat" )]
public AudioMixerGroup voiceChatMixerGroup = null;
[Tooltip("Log all PlaySound calls to the Unity console")]
public bool verboseLogging = false; // true = log all PlaySounds
[Tooltip("Maximum sound emitters")]
public int maxSoundEmitters = 32; // total number of sound emitters created
[Tooltip("Default volume for all sounds modulated by individual sound FX volumes")]
public float volumeSoundFX = 1.0f; // user pref: volume of all sound FX
[Tooltip("Sound FX fade time")]
public float soundFxFadeSecs = 1.0f; // sound FX fade time
public float audioMinFallOffDistance = 1.0f; // minimum falloff distance
public float audioMaxFallOffDistance = 25.0f; // maximum falloff distance
public SoundGroup[] soundGroupings = new SoundGroup[0];
private Dictionary<string,SoundFX> soundFXCache = null;
static private AudioManager theAudioManager = null;
static private FastList<string> names = new FastList<string>();
static private string[] defaultSound = new string[1] { "Default Sound" };
static private SoundFX nullSound = new SoundFX();
static private bool hideWarnings = false;
static public bool enableSpatialization { get { return ( theAudioManager !=null ) ? theAudioManager.enableSpatializedAudio : false; } }
static public AudioManager Instance { get { return theAudioManager; } }
static public float NearFallOff { get { return theAudioManager.audioMinFallOffDistance; } }
static public float FarFallOff { get { return theAudioManager.audioMaxFallOffDistance; } }
static public AudioMixerGroup EmitterGroup { get { return theAudioManager.defaultMixerGroup; } }
static public AudioMixerGroup ReservedGroup { get { return theAudioManager.reservedMixerGroup; } }
static public AudioMixerGroup VoipGroup { get { return theAudioManager.voiceChatMixerGroup; } }
/*
-----------------------
Awake()
-----------------------
*/
void Awake() {
Init();
}
/*
-----------------------
OnDestroy()
-----------------------
*/
void OnDestroy() {
// we only want the initialized audio manager instance cleaning up the sound emitters
if ( theAudioManager == this ) {
if ( soundEmitterParent != null ) {
Destroy( soundEmitterParent );
}
}
///TODO - if you change scenes you'll want to call OnPreSceneLoad to detach the sound emitters
///from anything they might be parented to or they will get destroyed with that object
///there should only be one instance of the AudioManager across the life of the game/app
///GameManager.OnPreSceneLoad -= OnPreSceneLoad;
}
/*
-----------------------
Init()
-----------------------
*/
void Init() {
if ( theAudioManager != null ) {
if ( Application.isPlaying && ( theAudioManager != this ) ) {
enabled = false;
}
return;
}
theAudioManager = this;
///TODO - if you change scenes you'll want to call OnPreSceneLoad to detach the sound emitters
///from anything they might be parented to or they will get destroyed with that object
///there should only be one instance of the AudioManager across the life of the game/app
///GameManager.OnPreSceneLoad += OnPreSceneLoad;
// make sure the first one is a null sound
nullSound.name = "Default Sound";
// build the sound FX cache
RebuildSoundFXCache();
// create the sound emitters
if ( Application.isPlaying ) {
InitializeSoundSystem();
if ( makePersistent && ( transform.parent == null ) ) {
// don't destroy the audio manager on scene loads
DontDestroyOnLoad( gameObject );
}
}
#if UNITY_EDITOR
Debug.Log( "[AudioManager] Initialized..." );
#endif
}
/*
-----------------------
Update()
-----------------------
*/
void Update() {
// update the free and playing lists
UpdateFreeEmitters();
}
/*
-----------------------
RebuildSoundFXCache()
-----------------------
*/
void RebuildSoundFXCache() {
// build the SoundFX dictionary for quick name lookups
int count = 0;
for ( int group = 0; group < soundGroupings.Length; group++ ) {
count += soundGroupings[group].soundList.Length;
}
soundFXCache = new Dictionary<string,SoundFX>( count + 1 );
// add the null sound
soundFXCache.Add( nullSound.name, nullSound );
// add the rest
for ( int group = 0; group < soundGroupings.Length; group++ ) {
for ( int i = 0; i < soundGroupings[group].soundList.Length; i++ ) {
if ( soundFXCache.ContainsKey( soundGroupings[group].soundList[i].name ) ) {
Debug.LogError( "ERROR: Duplicate Sound FX name in the audio manager: '" + soundGroupings[group].name + "' > '" + soundGroupings[group].soundList[i].name + "'" );
} else {
soundGroupings[group].soundList[i].Group = soundGroupings[group];
soundFXCache.Add( soundGroupings[group].soundList[i].name, soundGroupings[group].soundList[i] );
}
}
soundGroupings[group].playingSoundCount = 0;
}
}
/*
-----------------------
FindSoundFX()
-----------------------
*/
static public SoundFX FindSoundFX( string name, bool rebuildCache = false ) {
#if UNITY_EDITOR
if ( theAudioManager == null ) {
Debug.LogError( "ERROR: audio manager not yet initialized or created!" + " Time: " + Time.time );
return null;
}
#endif
if ( string.IsNullOrEmpty( name ) ) {
return nullSound;
}
if ( rebuildCache ) {
theAudioManager.RebuildSoundFXCache();
}
if ( !theAudioManager.soundFXCache.ContainsKey( name ) ) {
#if DEBUG_BUILD || UNITY_EDITOR
Debug.LogError( "WARNING: Missing Sound FX in cache: " + name );
#endif
return nullSound;
}
return theAudioManager.soundFXCache[name];
}
/*
-----------------------
FindAudioManager()
-----------------------
*/
static private bool FindAudioManager() {
GameObject audioManagerObject = GameObject.Find( "AudioManager" );
if ( ( audioManagerObject == null ) || ( audioManagerObject.GetComponent<AudioManager>() == null ) ) {
if ( !hideWarnings ) {
Debug.LogError( "[ERROR] AudioManager object missing from hierarchy!" );
hideWarnings = true;
}
return false;
} else {
audioManagerObject.GetComponent<AudioManager>().Init();
}
return true;
}
/*
-----------------------
GetGameObject()
-----------------------
*/
static public GameObject GetGameObject() {
if ( theAudioManager == null ) {
if ( !FindAudioManager() ) {
return null;
}
}
return theAudioManager.gameObject;
}
/*
-----------------------
NameMinusGroup()
strip off the sound group from the inspector dropdown
-----------------------
*/
static public string NameMinusGroup( string name ) {
if ( name.IndexOf( "/" ) > -1 ) {
return name.Substring( name.IndexOf( "/" ) + 1 );
}
return name;
}
/*
-----------------------
GetSoundFXNames()
used by the inspector
-----------------------
*/
static public string[] GetSoundFXNames( string currentValue, out int currentIdx ) {
currentIdx = 0;
names.Clear();
if ( theAudioManager == null ) {
if ( !FindAudioManager() ) {
return defaultSound;
}
}
names.Add( nullSound.name );
for ( int group = 0; group < theAudioManager.soundGroupings.Length; group++ ) {
for ( int i = 0; i < theAudioManager.soundGroupings[group].soundList.Length; i++ ) {
if ( string.Compare( currentValue, theAudioManager.soundGroupings[group].soundList[i].name, true ) == 0 ) {
currentIdx = names.Count;
}
names.Add( theAudioManager.soundGroupings[group].name + "/" + theAudioManager.soundGroupings[group].soundList[i].name );
}
}
//names.Sort( delegate( string s1, string s2 ) { return s1.CompareTo( s2 ); } );
return names.ToArray();
}
#if UNITY_EDITOR
/*
-----------------------
OnPrefabReimported()
-----------------------
*/
static public void OnPrefabReimported() {
if ( theAudioManager != null ) {
Debug.Log( "[AudioManager] Reimporting the sound FX cache." );
theAudioManager.RebuildSoundFXCache();
}
}
/*
-----------------------
PlaySound()
used in the editor
-----------------------
*/
static public void PlaySound( string soundFxName ) {
if ( theAudioManager == null ) {
if ( !FindAudioManager() ) {
return;
}
}
SoundFX soundFX = FindSoundFX( soundFxName, true );
if ( soundFX == null ) {
return;
}
AudioClip clip = soundFX.GetClip();
if ( clip != null ) {
Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
MethodInfo method = audioUtilClass.GetMethod(
"PlayClip",
BindingFlags.Static | BindingFlags.Public,
null,
new System.Type[] { typeof(AudioClip) },
null );
method.Invoke( null, new object[] { clip } );
}
}
/*
-----------------------
IsSoundPlaying()
used in the editor
-----------------------
*/
static public bool IsSoundPlaying( string soundFxName ) {
if ( theAudioManager == null ) {
if ( !FindAudioManager() ) {
return false;
}
}
SoundFX soundFX = FindSoundFX( soundFxName, true );
if ( soundFX == null ) {
return false;
}
AudioClip clip = soundFX.GetClip();
if ( clip != null ) {
Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
MethodInfo method = audioUtilClass.GetMethod(
"IsClipPlaying",
BindingFlags.Static | BindingFlags.Public,
null,
new System.Type[] { typeof(AudioClip) },
null );
return Convert.ToBoolean( method.Invoke( null, new object[] { clip } ) );
}
return false;
}
/*
-----------------------
StopSound()
used in the editor
-----------------------
*/
static public void StopSound(string soundFxName)
{
if (theAudioManager == null)
{
if (!FindAudioManager())
{
return;
}
}
SoundFX soundFX = FindSoundFX(soundFxName, true);
if (soundFX == null)
{
return;
}
AudioClip clip = soundFX.GetClip();
if (clip != null)
{
Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
MethodInfo method = audioUtilClass.GetMethod(
"StopClip",
BindingFlags.Static | BindingFlags.Public,
null,
new System.Type[] { typeof(AudioClip) },
null);
method.Invoke(null, new object[] { clip });
}
}
#endif
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6d1d30b41806244fca035fdae2896fb7
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,798 @@
using UnityEngine;
using UnityEngine.Audio;
namespace OVR
{
//-------------------------------------------------------------------------
// Types
//-------------------------------------------------------------------------
public enum EmitterChannel {
None = -1,
Reserved = 0, // plays on the single reserved emitter
Any // queues to the next available emitter
}
[System.Serializable]
public class MixerSnapshot {
public AudioMixerSnapshot snapshot = null;
public float transitionTime = 0.25f;
}
/*
-----------------------
GameManager Sound Routines
-----------------------
*/
public partial class AudioManager : MonoBehaviour {
public enum Fade {
In,
Out
}
private float audioMaxFallOffDistanceSqr = 25.0f * 25.0f; // past this distance, sounds are ignored for the local player
private SoundEmitter[] soundEmitters = null; // pool of sound emitters to play sounds through
private FastList<SoundEmitter> playingEmitters = new FastList<SoundEmitter>();
private FastList<SoundEmitter> nextFreeEmitters = new FastList<SoundEmitter>();
private MixerSnapshot currentSnapshot = null;
static private GameObject soundEmitterParent = null; // parent object for the sound emitters
static private Transform staticListenerPosition = null; // play position for regular 2D sounds
static private bool showPlayingEmitterCount = false;
static private bool forceShowEmitterCount = false;
static private bool soundEnabled = true;
static public bool SoundEnabled { get { return soundEnabled; } }
static readonly AnimationCurve defaultReverbZoneMix = new AnimationCurve( new Keyframe[2] { new Keyframe( 0f, 1.0f ), new Keyframe( 1f, 1f ) } );
// Calculate the maximum number of emitters that can be running at one time.
static private int CalculateMaxEmittersSize() {
return theAudioManager.maxSoundEmitters + (int)EmitterChannel.Any;
}
// Verify if this index is valid
static private bool ValidateEmitterIndex(int index) {
return index > -1 && index < CalculateMaxEmittersSize();
}
/*
-----------------------
InitializeSoundSystem()
initialize persistent sound emitter objects that live across scene loads
-----------------------
*/
void InitializeSoundSystem() {
int bufferLength = 960;
int numBuffers = 4;
AudioSettings.GetDSPBufferSize( out bufferLength, out numBuffers );
if ( Application.isPlaying ) {
Debug.Log( "[AudioManager] Audio Sample Rate: " + AudioSettings.outputSampleRate );
Debug.Log( "[AudioManager] Audio Buffer Length: " + bufferLength + " Size: " + numBuffers );
}
// find the audio listener for playing regular 2D sounds
AudioListener audioListenerObject = GameObject.FindObjectOfType<AudioListener>() as AudioListener;
if ( audioListenerObject == null ) {
Debug.LogError( "[AudioManager] Missing AudioListener object! Add one to the scene." );
} else {
staticListenerPosition = audioListenerObject.transform;
}
// we allocate maxSoundEmitters + reserved channels
soundEmitters = new SoundEmitter[CalculateMaxEmittersSize()];
// see if the sound emitters have already been created, if so, nuke it, it shouldn't exist in the scene upon load
soundEmitterParent = GameObject.Find( "__SoundEmitters__" );
if ( soundEmitterParent != null ) {
// delete any sound emitters hanging around
Destroy( soundEmitterParent );
}
// create them all
soundEmitterParent = new GameObject( "__SoundEmitters__" );
for ( int i = 0; i < CalculateMaxEmittersSize(); i++ ) {
GameObject emitterObject = new GameObject( "SoundEmitter_" + i );
emitterObject.transform.parent = soundEmitterParent.transform;
emitterObject.transform.position = Vector3.zero;
// don't ever save this to the scene
emitterObject.hideFlags = HideFlags.DontSaveInEditor;
// add the sound emitter components
soundEmitters[i] = emitterObject.AddComponent<SoundEmitter>();
soundEmitters[i].SetDefaultParent( soundEmitterParent.transform );
soundEmitters[i].SetChannel( i );
soundEmitters[i].Stop();
// save off the original index
soundEmitters[i].originalIdx = i;
}
// reset the free emitter lists
ResetFreeEmitters();
soundEmitterParent.hideFlags = HideFlags.DontSaveInEditor;
audioMaxFallOffDistanceSqr = audioMaxFallOffDistance * audioMaxFallOffDistance;
}
/*
-----------------------
UpdateFreeEmitters()
-----------------------
*/
void UpdateFreeEmitters() {
if ( verboseLogging ) {
if ( Input.GetKeyDown( KeyCode.A ) ) {
forceShowEmitterCount = !forceShowEmitterCount;
}
if ( forceShowEmitterCount ) {
showPlayingEmitterCount = true;
}
}
// display playing emitter count when the sound system is overwhelmed
int total = 0, veryLow = 0, low = 0, def = 0, high = 0, veryHigh = 0;
// find emitters that are done playing and add them to the nextFreeEmitters list
for ( int i = 0; i < playingEmitters.size; ) {
if ( playingEmitters[i] == null ) {
Debug.LogError( "[AudioManager] ERROR: playingEmitters list had a null emitter! Something nuked a sound emitter!!!" );
playingEmitters.RemoveAtFast( i );
return;
}
if ( !playingEmitters[i].IsPlaying() ) {
// add to the free list and remove from the playing list
if ( verboseLogging ) {
if ( nextFreeEmitters.Contains( playingEmitters[i] ) ) {
Debug.LogError( "[AudioManager] ERROR: playing sound emitter already in the free emitters list!" );
}
}
playingEmitters[i].Stop();
nextFreeEmitters.Add( playingEmitters[i] );
playingEmitters.RemoveAtFast( i );
continue;
}
// debugging/profiling
if ( verboseLogging && showPlayingEmitterCount ) {
total++;
switch ( playingEmitters[i].priority ) {
case SoundPriority.VeryLow: veryLow++; break;
case SoundPriority.Low: low++; break;
case SoundPriority.Default: def++; break;
case SoundPriority.High: high++; break;
case SoundPriority.VeryHigh: veryHigh++; break;
}
}
i++;
}
if ( verboseLogging && showPlayingEmitterCount ) {
Debug.LogWarning( string.Format( "[AudioManager] Playing sounds: Total {0} | VeryLow {1} | Low {2} | Default {3} | High {4} | VeryHigh {5} | Free {6}", Fmt( total ), Fmt( veryLow ), Fmt( low ), Fmt( def ), Fmt( high ), Fmt( veryHigh ), FmtFree( nextFreeEmitters.Count ) ) );
showPlayingEmitterCount = false;
}
}
/*
-----------------------
Fmt()
-----------------------
*/
string Fmt( int count ) {
float t = count / (float)theAudioManager.maxSoundEmitters;
if ( t < 0.5f ) {
return "<color=green>" + count.ToString() + "</color>";
} else if ( t < 0.7 ) {
return "<color=yellow>" + count.ToString() + "</color>";
} else {
return "<color=red>" + count.ToString() + "</color>";
}
}
/*
-----------------------
FmtFree()
-----------------------
*/
string FmtFree( int count ) {
float t = count / (float)theAudioManager.maxSoundEmitters;
if ( t < 0.2f ) {
return "<color=red>" + count.ToString() + "</color>";
} else if ( t < 0.3 ) {
return "<color=yellow>" + count.ToString() + "</color>";
} else {
return "<color=green>" + count.ToString() + "</color>";
}
}
/*
-----------------------
OnPreSceneLoad()
-----------------------
*/
void OnPreSceneLoad() {
// move any attached sounds back to the sound emitters parent before changing levels so they don't get destroyed
Debug.Log( "[AudioManager] OnPreSceneLoad cleanup" );
for ( int i = 0; i < soundEmitters.Length; i++ ) {
soundEmitters[i].Stop();
soundEmitters[i].ResetParent( soundEmitterParent.transform );
}
// reset our emitter lists
ResetFreeEmitters();
}
/*
-----------------------
ResetFreeEmitters()
-----------------------
*/
void ResetFreeEmitters() {
nextFreeEmitters.Clear();
playingEmitters.Clear();
for ( int i = (int)EmitterChannel.Any; i < soundEmitters.Length; i++ ) {
nextFreeEmitters.Add( soundEmitters[i] );
}
}
/*
-----------------------
FadeOutSoundChannel()
utility function to fade out a playing sound channel
-----------------------
*/
static public void FadeOutSoundChannel( int channel, float delaySecs, float fadeTime ) {
theAudioManager.soundEmitters[channel].FadeOutDelayed( delaySecs, fadeTime );
}
/*
-----------------------
StopSound()
-----------------------
*/
static public bool StopSound( int idx, bool fadeOut = true, bool stopReserved = false ) {
if ( !stopReserved && ( idx == (int)EmitterChannel.Reserved ) ) {
return false;
}
if ( !fadeOut ) {
theAudioManager.soundEmitters[idx].Stop();
}
else {
theAudioManager.soundEmitters[idx].FadeOut( theAudioManager.soundFxFadeSecs );
}
return true;
}
/*
-----------------------
FadeInSound()
-----------------------
*/
public static void FadeInSound( int idx, float fadeTime, float volume ) {
theAudioManager.soundEmitters[idx].FadeIn( fadeTime, volume );
}
/*
-----------------------
FadeInSound()
-----------------------
*/
public static void FadeInSound( int idx, float fadeTime ) {
theAudioManager.soundEmitters[idx].FadeIn( fadeTime );
}
/*
-----------------------
FadeOutSound()
-----------------------
*/
public static void FadeOutSound( int idx, float fadeTime ) {
theAudioManager.soundEmitters[idx].FadeOut( fadeTime );
}
/*
-----------------------
StopAllSounds()
-----------------------
*/
public static void StopAllSounds( bool fadeOut, bool stopReserved = false ) {
for ( int i = 0; i < theAudioManager.soundEmitters.Length; i++ ) {
StopSound( i, fadeOut, stopReserved );
}
}
/*
-----------------------
MuteAllSounds()
-----------------------
*/
public void MuteAllSounds( bool mute, bool muteReserved = false ) {
for ( int i = 0; i < soundEmitters.Length; i++ ) {
if ( !muteReserved && ( i == (int)EmitterChannel.Reserved ) ) {
continue;
}
soundEmitters[i].audioSource.mute = true;
}
}
/*
-----------------------
UnMuteAllSounds()
-----------------------
*/
public void UnMuteAllSounds( bool unmute, bool unmuteReserved = false ) {
for ( int i = 0; i < soundEmitters.Length; i++ ) {
if ( !unmuteReserved && ( i == (int)EmitterChannel.Reserved ) ) {
continue;
}
if ( soundEmitters[i].audioSource.isPlaying ) {
soundEmitters[i].audioSource.mute = false;
}
}
}
/*
-----------------------
GetEmitterEndTime()
-----------------------
*/
static public float GetEmitterEndTime( int idx ) {
return theAudioManager.soundEmitters[idx].endPlayTime;
}
/*
-----------------------
SetEmitterTime()
-----------------------
*/
static public float SetEmitterTime( int idx, float time ) {
return theAudioManager.soundEmitters[idx].time = time;
}
/*
-----------------------
PlaySound()
-----------------------
*/
static public int PlaySound( AudioClip clip, float volume, EmitterChannel src = EmitterChannel.Any, float delay = 0.0f, float pitchVariance = 1.0f, bool loop = false ) {
if ( !SoundEnabled ) {
return -1;
}
return PlaySoundAt( ( staticListenerPosition != null ) ? staticListenerPosition.position : Vector3.zero, clip, volume, src, delay, pitchVariance, loop );
}
/*
-----------------------
FindFreeEmitter()
-----------------------
*/
static private int FindFreeEmitter( EmitterChannel src, SoundPriority priority ) {
// default to the reserved emitter
SoundEmitter next = theAudioManager.soundEmitters[0];
if ( src == EmitterChannel.Any ) {
// pull from the free emitter list if possible
if ( theAudioManager.nextFreeEmitters.size > 0 ) {
// return the first in the list
next = theAudioManager.nextFreeEmitters[0];
// remove it from the free list
theAudioManager.nextFreeEmitters.RemoveAtFast( 0 );
} else {
// no free emitters available so pull from the lowest priority sound
if ( priority == SoundPriority.VeryLow ) {
// skip low priority sounds
return -1;
} else {
// find a playing emitter that has a lower priority than what we're requesting
// TODO - we could first search for Very Low, then Low, etc ... TBD if it's worth the effort
next = theAudioManager.playingEmitters.Find( item => item != null && item.priority < priority );
if ( next == null ) {
// last chance to find a free emitter
if ( priority < SoundPriority.Default ) {
// skip sounds less than the default priority
if ( theAudioManager.verboseLogging ) {
Debug.LogWarning( "[AudioManager] skipping sound " + priority );
}
return -1;
} else {
// grab a default priority emitter so that we don't cannabalize a high priority sound
next = theAudioManager.playingEmitters.Find( item => item != null && item.priority <= SoundPriority.Default ); ;
}
}
if ( next != null ) {
if ( theAudioManager.verboseLogging ) {
Debug.LogWarning( "[AudioManager] cannabalizing " + next.originalIdx + " Time: " + Time.time );
}
// remove it from the playing list
next.Stop();
theAudioManager.playingEmitters.RemoveFast( next );
}
}
}
}
if ( next == null ) {
Debug.LogError( "[AudioManager] ERROR - absolutely couldn't find a free emitter! Priority = " + priority + " TOO MANY PlaySound* calls!" );
showPlayingEmitterCount = true;
return -1;
}
return next.originalIdx;
}
/*
-----------------------
PlaySound()
-----------------------
*/
static public int PlaySound( SoundFX soundFX, EmitterChannel src = EmitterChannel.Any, float delay = 0.0f ) {
if ( !SoundEnabled ) {
return -1;
}
return PlaySoundAt( ( staticListenerPosition != null ) ? staticListenerPosition.position : Vector3.zero, soundFX, src, delay );
}
/*
-----------------------
PlaySoundAt()
-----------------------
*/
static public int PlaySoundAt( Vector3 position, SoundFX soundFX, EmitterChannel src = EmitterChannel.Any, float delay = 0.0f, float volumeOverride = 1.0f, float pitchMultiplier = 1.0f ) {
if ( !SoundEnabled ) {
return -1;
}
AudioClip clip = soundFX.GetClip();
if ( clip == null ) {
return -1;
}
// check the distance from the local player and ignore sounds out of range
if ( staticListenerPosition != null ) {
float distFromListener = ( staticListenerPosition.position - position ).sqrMagnitude;
if ( distFromListener > theAudioManager.audioMaxFallOffDistanceSqr ) {
return -1;
}
if ( distFromListener > soundFX.MaxFalloffDistSquared ) {
return -1;
}
}
// check max playing sounds
if ( soundFX.ReachedGroupPlayLimit() ) {
if ( theAudioManager.verboseLogging ) {
Debug.Log( "[AudioManager] PlaySoundAt() with " + soundFX.name + " skipped due to group play limit" );
}
return -1;
}
int idx = FindFreeEmitter( src, soundFX.priority );
if ( idx == -1 ) {
// no free emitters - should only happen on very low priority sounds
return -1;
}
SoundEmitter emitter = theAudioManager.soundEmitters[idx];
// make sure to detach the emitter from a previous parent
emitter.ResetParent( soundEmitterParent.transform );
emitter.gameObject.SetActive( true );
// set up the sound emitter
AudioSource audioSource = emitter.audioSource;
ONSPAudioSource osp = emitter.osp;
audioSource.enabled = true;
audioSource.volume = Mathf.Clamp01( Mathf.Clamp01( theAudioManager.volumeSoundFX * soundFX.volume ) * volumeOverride * soundFX.GroupVolumeOverride );
audioSource.pitch = soundFX.GetPitch() * pitchMultiplier;
audioSource.time = 0.0f;
audioSource.spatialBlend = 1.0f;
audioSource.rolloffMode = soundFX.falloffCurve;
if ( soundFX.falloffCurve == AudioRolloffMode.Custom ) {
audioSource.SetCustomCurve( AudioSourceCurveType.CustomRolloff, soundFX.volumeFalloffCurve );
}
audioSource.SetCustomCurve( AudioSourceCurveType.ReverbZoneMix, soundFX.reverbZoneMix );
audioSource.dopplerLevel = 0;
audioSource.clip = clip;
audioSource.spread = soundFX.spread;
audioSource.loop = soundFX.looping;
audioSource.mute = false;
audioSource.minDistance = soundFX.falloffDistance.x;
audioSource.maxDistance = soundFX.falloffDistance.y;
audioSource.outputAudioMixerGroup = soundFX.GetMixerGroup( AudioManager.EmitterGroup );
// set the play time so we can check when sounds are done
emitter.endPlayTime = Time.time + clip.length + delay;
// cache the default volume for fading
emitter.defaultVolume = audioSource.volume;
// sound priority
emitter.priority = soundFX.priority;
// reset this
emitter.onFinished = null;
// update the sound group limits
emitter.SetPlayingSoundGroup( soundFX.Group );
// add to the playing list
if ( src == EmitterChannel.Any ) {
theAudioManager.playingEmitters.AddUnique( emitter );
}
// OSP properties
if ( osp != null ) {
osp.EnableSpatialization = soundFX.ospProps.enableSpatialization;
osp.EnableRfl = theAudioManager.enableSpatializedFastOverride || soundFX.ospProps.useFastOverride ? true : false;
osp.Gain = soundFX.ospProps.gain;
osp.UseInvSqr = soundFX.ospProps.enableInvSquare;
osp.Near = soundFX.ospProps.invSquareFalloff.x;
osp.Far = soundFX.ospProps.invSquareFalloff.y;
audioSource.spatialBlend = (soundFX.ospProps.enableSpatialization) ? 1.0f : 0.8f;
// make sure to set the properties in the audio source before playing
osp.SetParameters(ref audioSource);
}
audioSource.transform.position = position;
if ( theAudioManager.verboseLogging ) {
Debug.Log( "[AudioManager] PlaySoundAt() channel = " + idx + " soundFX = " + soundFX.name + " volume = " + emitter.volume + " Delay = " + delay + " time = " + Time.time + "\n" );
}
// play the sound
if ( delay > 0f ) {
audioSource.PlayDelayed( delay );
} else {
audioSource.Play();
}
return idx;
}
/*
-----------------------
PlayRandomSoundAt()
-----------------------
*/
static public int PlayRandomSoundAt( Vector3 position, AudioClip[] clips, float volume, EmitterChannel src = EmitterChannel.Any, float delay = 0.0f, float pitch = 1.0f, bool loop = false ) {
if ( ( clips == null ) || ( clips.Length == 0 ) ) {
return -1;
}
int idx = Random.Range( 0, clips.Length );
return PlaySoundAt( position, clips[idx], volume, src, delay, pitch, loop );
}
/*
-----------------------
PlaySoundAt()
-----------------------
*/
static public int PlaySoundAt( Vector3 position, AudioClip clip, float volume = 1.0f, EmitterChannel src = EmitterChannel.Any, float delay = 0.0f, float pitch = 1.0f, bool loop = false ) {
if ( !SoundEnabled ) {
return -1;
}
if ( clip == null ) {
return -1;
}
// check the distance from the local player and ignore sounds out of range
if ( staticListenerPosition != null ) {
if ( ( staticListenerPosition.position - position ).sqrMagnitude > theAudioManager.audioMaxFallOffDistanceSqr ) {
// no chance of being heard
return -1;
}
}
int idx = FindFreeEmitter( src, 0 );
if ( idx == -1 ) {
// no free emitters - should only happen on very low priority sounds
return -1;
}
SoundEmitter emitter = theAudioManager.soundEmitters[idx];
// make sure to detach the emitter from a previous parent
emitter.ResetParent( soundEmitterParent.transform );
emitter.gameObject.SetActive( true );
// set up the sound emitter
AudioSource audioSource = emitter.audioSource;
ONSPAudioSource osp = emitter.osp;
audioSource.enabled = true;
audioSource.volume = Mathf.Clamp01( theAudioManager.volumeSoundFX * volume );
audioSource.pitch = pitch;
audioSource.spatialBlend = 0.8f;
audioSource.rolloffMode = AudioRolloffMode.Linear;
audioSource.SetCustomCurve( AudioSourceCurveType.ReverbZoneMix, defaultReverbZoneMix );
audioSource.dopplerLevel = 0.0f;
audioSource.clip = clip;
audioSource.spread = 0.0f;
audioSource.loop = loop;
audioSource.mute = false;
audioSource.minDistance = theAudioManager.audioMinFallOffDistance;
audioSource.maxDistance = theAudioManager.audioMaxFallOffDistance;
audioSource.outputAudioMixerGroup = AudioManager.EmitterGroup;
// set the play time so we can check when sounds are done
emitter.endPlayTime = Time.time + clip.length + delay;
// cache the default volume for fading
emitter.defaultVolume = audioSource.volume;
// default priority
emitter.priority = 0;
// reset this
emitter.onFinished = null;
// update the sound group limits
emitter.SetPlayingSoundGroup( null );
// add to the playing list
if ( src == EmitterChannel.Any ) {
theAudioManager.playingEmitters.AddUnique( emitter );
}
// disable spatialization (by default for regular AudioClips)
if ( osp != null ) {
osp.EnableSpatialization = false;
}
audioSource.transform.position = position;
if ( theAudioManager.verboseLogging ) {
Debug.Log( "[AudioManager] PlaySoundAt() channel = " + idx + " clip = " + clip.name + " volume = " + emitter.volume + " Delay = " + delay + " time = " + Time.time + "\n" );
}
// play the sound
if ( delay > 0f ) {
audioSource.PlayDelayed( delay );
} else {
audioSource.Play();
}
return idx;
}
/*
-----------------------
SetOnFinished()
-----------------------
*/
public static void SetOnFinished( int emitterIdx, System.Action onFinished ) {
if ( ValidateEmitterIndex(emitterIdx) ) {
theAudioManager.soundEmitters[emitterIdx].SetOnFinished( onFinished );
}
}
/*
-----------------------
SetOnFinished()
-----------------------
*/
public static void SetOnFinished( int emitterIdx, System.Action<object> onFinished, object obj ) {
if ( ValidateEmitterIndex(emitterIdx) ) {
theAudioManager.soundEmitters[emitterIdx].SetOnFinished( onFinished, obj );
}
}
/*
-----------------------
AttachSoundToParent()
-----------------------
*/
public static void AttachSoundToParent( int idx, Transform parent ) {
if ( theAudioManager.verboseLogging ) {
string parentName = parent.name;
if ( parent.parent != null ) {
parentName = parent.parent.name + "/" + parentName;
}
Debug.Log( "[AudioManager] ATTACHING INDEX " + idx + " to " + parentName );
}
theAudioManager.soundEmitters[idx].ParentTo( parent );
}
/*
-----------------------
DetachSoundFromParent()
-----------------------
*/
public static void DetachSoundFromParent( int idx ) {
if ( theAudioManager.verboseLogging ) {
Debug.Log( "[AudioManager] DETACHING INDEX " + idx );
}
theAudioManager.soundEmitters[idx].DetachFromParent();
}
/*
-----------------------
DetachSoundsFromParent()
-----------------------
*/
public static void DetachSoundsFromParent( SoundEmitter[] emitters, bool stopSounds = true ) {
if ( emitters == null ) {
return;
}
foreach ( SoundEmitter emitter in emitters ) {
if ( emitter.defaultParent != null ) {
if ( stopSounds ) {
emitter.Stop();
}
emitter.DetachFromParent();
// make sure it's active
emitter.gameObject.SetActive( true );
} else {
if ( stopSounds ) {
emitter.Stop();
}
}
}
}
/*
-----------------------
SetEmitterMixerGroup()
-----------------------
*/
public static void SetEmitterMixerGroup( int idx, AudioMixerGroup mixerGroup ) {
if ( ( theAudioManager != null ) && ( idx > -1 ) ) {
theAudioManager.soundEmitters[idx].SetAudioMixer( mixerGroup );
}
}
/*
-----------------------
GetActiveSnapshot()
-----------------------
*/
public static MixerSnapshot GetActiveSnapshot() {
return ( theAudioManager != null ) ? theAudioManager.currentSnapshot : null;
}
/*
-----------------------
SetCurrentSnapshot()
-----------------------
*/
public static void SetCurrentSnapshot( MixerSnapshot mixerSnapshot ) {
#if UNITY_EDITOR
if ( mixerSnapshot == null || mixerSnapshot.snapshot == null ) {
Debug.LogError( "[AudioManager] ERROR setting empty mixer snapshot!" );
} else {
Debug.Log( "[AudioManager] Setting audio mixer snapshot: " + ( ( mixerSnapshot != null && mixerSnapshot.snapshot != null ) ? mixerSnapshot.snapshot.name : "None" ) + " Time: " + Time.time );
}
#endif
if ( theAudioManager != null ) {
if ( ( mixerSnapshot != null ) && ( mixerSnapshot.snapshot != null ) ) {
mixerSnapshot.snapshot.TransitionTo( mixerSnapshot.transitionTime );
} else {
mixerSnapshot = null;
}
theAudioManager.currentSnapshot = mixerSnapshot;
}
}
/*
-----------------------
BlendWithCurrentSnapshot()
-----------------------
*/
public static void BlendWithCurrentSnapshot( MixerSnapshot blendSnapshot, float weight, float blendTime = 0.0f ) {
if ( theAudioManager != null ) {
if ( theAudioManager.audioMixer == null ) {
Debug.LogWarning( "[AudioManager] can't call BlendWithCurrentSnapshot if the audio mixer is not set!" );
return;
}
if ( blendTime == 0.0f ) {
blendTime = Time.deltaTime;
}
if ( ( theAudioManager.currentSnapshot != null ) && (theAudioManager.currentSnapshot.snapshot != null ) ) {
if ( ( blendSnapshot != null ) && ( blendSnapshot.snapshot != null ) ) {
weight = Mathf.Clamp01( weight );
if ( weight == 0.0f ) {
// revert to the default snapshot
theAudioManager.currentSnapshot.snapshot.TransitionTo( blendTime );
} else {
AudioMixerSnapshot[] snapshots = new AudioMixerSnapshot[] { theAudioManager.currentSnapshot.snapshot, blendSnapshot.snapshot };
float[] weights = new float[] { 1.0f - weight, weight };
theAudioManager.audioMixer.TransitionToSnapshots( snapshots, weights, blendTime );
}
}
}
}
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 41cb0f893e9a44e83b09a66c55bd7856
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 02213405caaf04aeea7876974c06fa5a
folderAsset: yes
DefaultImporter:
userData:

View File

@ -0,0 +1,46 @@
using UnityEngine;
using UnityEditor;
namespace OVR
{
/*
-----------------------
AudioImportPostProcessor()
-----------------------
*/
public class AudioImportPostProcessor : AssetPostprocessor {
static void OnPostprocessAllAssets( string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths ) {
AudioManager audioManager = AudioManager.Instance;
if ( audioManager != null ) {
// find the asset path to the loaded audio manager prefab
#if UNITY_2018_2_OR_NEWER
Object prefabObject = PrefabUtility.GetCorrespondingObjectFromSource(audioManager);
#else
Object prefabObject = PrefabUtility.GetPrefabParent( audioManager );
#endif
if ( prefabObject != null ) {
string path = AssetDatabase.GetAssetPath( prefabObject );
// check to see if the AudioManager prefab has been reimported.
// if so, rebuild everything
foreach ( string asset in importedAssets ) {
if ( asset.ToLower() == path.ToLower() ) {
// in the event the audio manager is selected, deselect it first before reloading
Debug.Log( "[AudioManager] AudioManager prefab reloaded: " + path );
Selection.objects = new Object[0] { };
// unfortunately even saving the audio manager prefab will trigger this action
//string msg = "The Audio Manager was reloaded. If you are going to be making modifications to the Audio Manager, ";
//msg += "please verify you have the latest version before proceeding. If in doubt, restart Unity before making modifications.";
//EditorUtility.DisplayDialog( "Audio Manager Prefab Reloaded", msg, "OK" );
// do the actual reload
AudioManager.OnPrefabReimported();
break;
}
}
}
}
}
}
} // namespace OVR

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 48902580b26e3554d992bad48087eee5
timeCreated: 1471010515
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,631 @@
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
namespace OVR
{
/*
-----------------------
AudioManagerInspector
-----------------------
*/
[CustomEditor(typeof(AudioManager))]
public class AudioManagerInspector : Editor {
private AudioManager audioManager = null;
private string dragDropIdentifier = "MoveSoundFX";
private GUIStyle customDividerStyle = null;
/*
-----------------------
OnInspectorGUI()
-----------------------
*/
public override void OnInspectorGUI() {
audioManager = target as AudioManager;
Event e = Event.current;
// draw the default properties
DrawDefaultProperties();
// draw the categories section
DrawCategories( e );
serializedObject.Update();
// draw the sound effects for the selected category
DrawSoundEffects( e );
serializedObject.ApplyModifiedProperties();
CreateStyles();
}
/*
-----------------------
MarkDirty()
-----------------------
*/
void MarkDirty() {
serializedObject.SetIsDifferentCacheDirty();
EditorUtility.SetDirty( audioManager );
}
static private int selectedGroup = 0;
private int nextGroup = -1;
private int editGroup = -1;
private FastList<SoundGroup> soundGroups = new FastList<SoundGroup>();
private FastList<ItemRect> groups = new FastList<ItemRect>();
private Rect dropArea = new Rect();
private bool addSound = false;
private int deleteSoundIdx = -1;
private int dupeSoundIdx = -1;
private bool sortSounds = false;
private bool moveQueued = false;
private int origGroup = -1;
private int origIndex = -1;
private int moveToGroup = -1;
/*
-----------------------
DrawDefaultProperties()
-----------------------
*/
void DrawDefaultProperties() {
BeginContents();
if ( DrawHeader( "Default Properties", true ) ) {
EditorGUILayout.BeginVertical( GUI.skin.box );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "makePersistent" ), new GUIContent( "Don't Destroy on Load" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "enableSpatializedAudio" ), new GUIContent( "Enable Spatialized Audio" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "enableSpatializedFastOverride" ), new GUIContent( "Force Disable Reflections" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "audioMixer" ), new GUIContent( "Master Audio Mixer" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "defaultMixerGroup" ), new GUIContent( "Pooled Emitter Mixer Group" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "reservedMixerGroup" ), new GUIContent( "Reserved Emitter Mixer Group" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "voiceChatMixerGroup" ), new GUIContent( "Voice Chat Mixer Group" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "verboseLogging" ), new GUIContent( "Verbose Logging" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "maxSoundEmitters" ), new GUIContent( "Max Sound Emitters" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "volumeSoundFX" ), new GUIContent( "Default Volume" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "soundFxFadeSecs" ), new GUIContent( "Sound FX Fade Secs" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "audioMinFallOffDistance" ), new GUIContent( "Minimum Falloff Distance" ) );
EditorGUILayout.PropertyField( serializedObject.FindProperty( "audioMaxFallOffDistance" ), new GUIContent( "Maximum Falloff Distance" ) );
EditorGUILayout.EndVertical();
serializedObject.ApplyModifiedProperties();
}
EndContents();
}
/*
-----------------------
DrawSoundGroupProperties()
-----------------------
*/
void DrawSoundGroupProperties() {
if ( selectedGroup == -1 ) {
return;
}
SerializedProperty soundGroupsArray = serializedObject.FindProperty( "soundGroupings" );
if ( selectedGroup >= soundGroupsArray.arraySize ) {
return;
}
SerializedProperty soundGroup = soundGroupsArray.GetArrayElementAtIndex( selectedGroup );
string soundGroupName = soundGroup.FindPropertyRelative( "name" ).stringValue;
if ( DrawHeader( string.Format( "{0} Properties", soundGroupName ), true ) ) {
EditorGUILayout.BeginVertical( GUI.skin.box );
EditorGUILayout.PropertyField( soundGroup.FindPropertyRelative( "mixerGroup" ), new GUIContent( "Override Mixer Group", "Leave empty to use the Audio Manager's default mixer group" ) );
if ( !Application.isPlaying ) {
EditorGUILayout.PropertyField( soundGroup.FindPropertyRelative( "maxPlayingSounds" ), new GUIContent( "Max Playing Sounds Limit", "Max playing sounds for this sound group, 0 = no limit" ) );
} else {
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PropertyField( soundGroup.FindPropertyRelative( "maxPlayingSounds" ), new GUIContent( "Max Playing Sounds Limit", "Max playing sounds for this sound group, 0 = no limit" ) );
// cast to the actual object
int playingSounds = soundGroup.FindPropertyRelative( "playingSoundCount" ).intValue;
EditorGUILayout.LabelField( string.Format( "Playing: {0}", playingSounds ), GUILayout.Width( 80.0f ) );
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.PropertyField( soundGroup.FindPropertyRelative( "preloadAudio" ), new GUIContent( "Preload Audio Clips", "Default = No special preloading, Preload = Audio clips are set to 'Preload', Manual Preload = Audio clips are set to not 'Preload'" ) );
EditorGUILayout.PropertyField( soundGroup.FindPropertyRelative( "volumeOverride" ), new GUIContent( "Volume Override", "All sounds played in this group will have volume scaled by this amount" ) );
if ( soundGroup.FindPropertyRelative( "volumeOverride" ).floatValue == 0.0f ) {
EditorGUILayout.HelpBox( "With a volumeOverride of 0.0, these sounds will not play!", MessageType.Warning );
}
EditorGUILayout.EndVertical();
serializedObject.ApplyModifiedProperties();
}
}
/*
-----------------------
DrawCategories()
-----------------------
*/
void DrawCategories( Event e ) {
// do any housework before we start drawing
if ( moveQueued ) {
// make a temp copy
List<SoundFX> origSoundList = new List<SoundFX>( audioManager.soundGroupings[origGroup].soundList );
SoundFX temp = origSoundList[origIndex];
List<SoundFX> moveToSoundList = new List<SoundFX>( audioManager.soundGroupings[moveToGroup].soundList );
// add it to the move to group
moveToSoundList.Add( temp );
audioManager.soundGroupings[moveToGroup].soundList = moveToSoundList.ToArray();
// and finally, remove it from the original group
origSoundList.RemoveAt( origIndex );
audioManager.soundGroupings[origGroup].soundList = origSoundList.ToArray();
Debug.Log( "> Moved '" + temp.name + "' from " + "'" + audioManager.soundGroupings[origGroup].name + "' to '" + audioManager.soundGroupings[moveToGroup].name );
MarkDirty();
moveQueued = false;
}
// switch to the next group
if ( nextGroup > -1 ) {
selectedGroup = nextGroup;
nextGroup = -1;
}
// add a sound
if ( addSound ) {
List<SoundFX> soundList = new List<SoundFX>( audioManager.soundGroupings[selectedGroup].soundList );
SoundFX soundFX = new SoundFX();
soundFX.name = audioManager.soundGroupings[selectedGroup].name.ToLower() + "_new_unnamed_sound_fx";
soundList.Add( soundFX );
audioManager.soundGroupings[selectedGroup].soundList = soundList.ToArray();
MarkDirty();
addSound = false;
}
// sort the sounds
if ( sortSounds ) {
List<SoundFX> soundList = new List<SoundFX>( audioManager.soundGroupings[selectedGroup].soundList );
soundList.Sort( delegate ( SoundFX sfx1, SoundFX sfx2 ) { return string.Compare( sfx1.name, sfx2.name ); } );
audioManager.soundGroupings[selectedGroup].soundList = soundList.ToArray();
MarkDirty();
sortSounds = false;
}
// delete a sound
if ( deleteSoundIdx > -1 ) {
List<SoundFX> soundList = new List<SoundFX>( audioManager.soundGroupings[selectedGroup].soundList );
soundList.RemoveAt( deleteSoundIdx );
audioManager.soundGroupings[selectedGroup].soundList = soundList.ToArray();
MarkDirty();
deleteSoundIdx = -1;
}
// duplicate a sound
if ( dupeSoundIdx > -1 ) {
List<SoundFX> soundList = new List<SoundFX>( audioManager.soundGroupings[selectedGroup].soundList );
SoundFX origSoundFX = soundList[dupeSoundIdx];
// clone this soundFX
string json = JsonUtility.ToJson( origSoundFX );
SoundFX soundFX = JsonUtility.FromJson<SoundFX>( json );
soundFX.name += "_duplicated";
soundList.Insert( dupeSoundIdx + 1, soundFX );
audioManager.soundGroupings[selectedGroup].soundList = soundList.ToArray();
MarkDirty();
dupeSoundIdx = -1;
}
if ( e.type == EventType.Repaint ) {
groups.Clear();
}
GUILayout.Space( 6f );
Color defaultColor = GUI.contentColor;
BeginContents();
if ( DrawHeader( "Sound FX Groups", true ) ) {
EditorGUILayout.BeginVertical( GUI.skin.box );
soundGroups.Clear();
for ( int i = 0; i < audioManager.soundGroupings.Length; i++ ) {
soundGroups.Add( audioManager.soundGroupings[i] );
}
for ( int i = 0; i < soundGroups.size; i++ ) {
EditorGUILayout.BeginHorizontal();
{
if ( i == selectedGroup ) {
GUI.contentColor = ( i == editGroup ) ? Color.white : Color.yellow;
} else {
GUI.contentColor = defaultColor;
}
if ( ( e.type == EventType.KeyDown ) && ( ( e.keyCode == KeyCode.Return ) || ( e.keyCode == KeyCode.KeypadEnter ) ) ) {
// toggle editing
if ( editGroup >= 0 ) {
editGroup = -1;
}
Event.current.Use();
}
if ( i == editGroup ) {
soundGroups[i].name = GUILayout.TextField( soundGroups[i].name, GUILayout.MinWidth( Screen.width - 80f ) );
} else {
GUILayout.Label( soundGroups[i].name, ( i == selectedGroup ) ? EditorStyles.whiteLabel : EditorStyles.label, GUILayout.ExpandWidth( true ) );
}
GUILayout.FlexibleSpace();
if ( GUILayout.Button( GUIContent.none, "OL Minus", GUILayout.Width(17f) ) ) { // minus button
if ( EditorUtility.DisplayDialog( "Delete '" + soundGroups[i].name + "'", "Are you sure you want to delete the selected sound group?", "Continue", "Cancel" ) ) {
soundGroups.RemoveAt( i );
MarkDirty();
}
}
}
EditorGUILayout.EndHorizontal();
// build a list of items
Rect lastRect = GUILayoutUtility.GetLastRect();
if ( e.type == EventType.Repaint ) {
groups.Add ( new ItemRect( i, lastRect, null ) );
}
if ( ( e.type == EventType.MouseDown ) && lastRect.Contains( e.mousePosition ) ) {
if ( ( i != selectedGroup ) || ( e.clickCount == 2 ) ) {
nextGroup = i;
if ( e.clickCount == 2 ) {
editGroup = i;
} else if ( editGroup != nextGroup ) {
editGroup = -1;
}
Repaint();
}
}
}
// add the final plus button
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if ( GUILayout.Button( GUIContent.none, "OL Plus", GUILayout.Width(17f) ) ) { // plus button
soundGroups.Add( new SoundGroup( "unnamed sound group" ) );
selectedGroup = editGroup = soundGroups.size - 1;
MarkDirty();
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
// reset the color
GUI.contentColor = defaultColor;
// the sort and import buttons
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if ( GUILayout.Button( "Sort", GUILayout.Width( 70f ) ) ) {
soundGroups.Sort( delegate( SoundGroup sg1, SoundGroup sg2 ) { return string.Compare( sg1.name, sg2.name ); } );
MarkDirty();
}
EditorGUILayout.EndHorizontal();
// draw a rect around the selected item
if ( ( selectedGroup >= 0 ) && ( selectedGroup < groups.size ) ) {
EditorGUI.DrawRect( groups[selectedGroup].rect, new Color( 1f, 1f, 1f, 0.06f ) );
}
// finally move the sound groups back into the audio manager
if ( soundGroups.size > 0 ) {
audioManager.soundGroupings = soundGroups.ToArray();
}
// calculate the drop area rect
if ( ( e.type == EventType.Repaint ) && ( groups.size > 0 ) ) {
dropArea.x = groups[0].rect.x;
dropArea.y = groups[0].rect.y;
dropArea.width = groups[0].rect.width;
dropArea.height = ( groups[groups.size-1].rect.y - groups[0].rect.y ) + groups[groups.size-1].rect.height;
}
}
// draw the sound group properties now
DrawSoundGroupProperties();
EndContents();
EditorGUILayout.HelpBox("Create and delete sound groups by clicking + and - respectively. Double click to rename sound groups. Drag and drop sounds from below to the groups above to move them.", MessageType.Info);
}
public class CustomDragData{
public int originalGroupIndex;
public int originalIndex;
public SerializedProperty originalProperty;
}
public class ItemRect {
public ItemRect( int index, Rect rect, SerializedProperty prop ) {
this.index = index;
this.rect = rect;
this.prop = prop;
}
public int index;
public Rect rect;
public SerializedProperty prop;
}
private FastList<ItemRect> items = new FastList<ItemRect>();
/*
-----------------------
CreateStyles()
-----------------------
*/
void CreateStyles() {
if ( customDividerStyle == null ) {
customDividerStyle = new GUIStyle( EditorStyles.label );
customDividerStyle.normal.background = MakeTex( 4, 4, new Color( 0.5f, 0.5f, 0.5f, 0.25f ) );
customDividerStyle.margin.right -= 16;
}
}
/*
-----------------------
MakeTex()
-----------------------
*/
private Texture2D MakeTex( int width, int height, Color col ) {
Color[] pix = new Color[width*height];
for ( int i = 0; i < pix.Length; i++ )
pix[i] = col;
Texture2D result = new Texture2D(width, height);
result.SetPixels( pix );
result.Apply();
return result;
}
/*
-----------------------
DrawSoundEffects()
-----------------------
*/
void DrawSoundEffects( Event e ) {
if ( ( selectedGroup < 0 ) || ( audioManager.soundGroupings.Length == 0 ) || ( selectedGroup >= audioManager.soundGroupings.Length ) ) {
return;
}
if ( e.type == EventType.Repaint ) {
items.Clear();
} else {
CheckStartDrag( e );
}
BeginContents();
if ( DrawHeader( "Sound Effects", true ) ) {
GUILayout.Space(3f);
GUILayout.BeginVertical( GUI.skin.box );
SerializedProperty soundGroupsArray = serializedObject.FindProperty( "soundGroupings" );
SerializedProperty soundGroup = soundGroupsArray.GetArrayElementAtIndex( selectedGroup );
SerializedProperty soundList = soundGroup.FindPropertyRelative( "soundList" );
CreateStyles();
Rect prevRect = new Rect();
if ( soundList.arraySize > 0 ) {
// show all the sounds
for ( int i = 0; i < soundList.arraySize; i++ ) {
EditorGUI.indentLevel = 1;
SerializedProperty soundFX = soundList.GetArrayElementAtIndex( i );
SerializedProperty visToggle = soundFX.FindPropertyRelative( "visibilityToggle" );
EditorGUILayout.BeginHorizontal( customDividerStyle );
{
string soundFXName = soundFX.FindPropertyRelative( "name" ).stringValue;
// save the visibility state
visToggle.boolValue = EditorGUILayout.Foldout( visToggle.boolValue, soundFXName );
// play button
if ( GUILayout.Button( "\u25BA", GUILayout.Width( 17f ), GUILayout.Height( 16f ) ) ) {
if ( AudioManager.IsSoundPlaying( soundFXName ) ) {
AudioManager.StopSound( soundFXName );
} else {
AudioManager.PlaySound( soundFXName );
}
}
}
EditorGUILayout.EndHorizontal();
if ( visToggle.boolValue ) {
EditorGUILayout.PropertyField( soundFX, true );
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if ( GUILayout.Button( "Delete FX", GUILayout.Width( Screen.width / 3.0f ) ) ) {
if ( EditorUtility.DisplayDialog( "Delete " + soundFX.displayName, "Are you sure?", "Yes", "No!" ) ) {
deleteSoundIdx = i;
}
}
if ( GUILayout.Button( "Duplicate FX", GUILayout.Width( Screen.width / 3.0f ) ) ) {
dupeSoundIdx = i;
}
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
GUILayout.Space( 10.0f );
}
if ( e.type == EventType.Repaint ) {
// GetLastRect() is now returning the last rect drawn in the property drawer,
// not the rect used for the entire SoundFX
Rect curRect = prevRect;
curRect.y = prevRect.y + EditorGUIUtility.singleLineHeight;
Rect lastRect = GUILayoutUtility.GetLastRect();
curRect.height = ( lastRect.y + lastRect.height ) - curRect.y;
curRect.width = Screen.width;
items.Add( new ItemRect( i, curRect, soundFX ) );
}
prevRect = GUILayoutUtility.GetLastRect();
}
} else {
EditorGUILayout.LabelField( " " );
}
GUILayout.EndVertical();
GUILayout.Space(3f);
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if ( GUILayout.Button( "Add FX", GUILayout.Width( 70f ) ) ) {
//soundList.InsertArrayElementAtIndex( soundList.arraySize );
//MarkDirty();
addSound = true;
}
if ( GUILayout.Button( "Sort", GUILayout.Width( 70f ) ) ) {
sortSounds = true;
}
EditorGUILayout.EndHorizontal();
}
EndContents();
UpdateDrag( e );
}
/*
-----------------------
CheckStartDrag()
-----------------------
*/
void CheckStartDrag( Event e ) {
if ( ( e.type == EventType.MouseDrag ) && ( e.button == 0 ) ) {
for ( int i = 0; i < items.size; i++ ) {
if ( items[i].rect.Contains( e.mousePosition ) ) {
DragAndDrop.PrepareStartDrag();// reset data
CustomDragData dragData = new CustomDragData();
dragData.originalGroupIndex = selectedGroup;
dragData.originalIndex = items[i].index;
dragData.originalProperty = items[i].prop;
DragAndDrop.SetGenericData( dragDropIdentifier, dragData );
DragAndDrop.objectReferences = new Object[0];
DragAndDrop.StartDrag( dragData.originalProperty.FindPropertyRelative( "name" ).stringValue );
e.Use();
}
}
}
}
/*
-----------------------
FindGroupIndex()
-----------------------
*/
int FindGroupIndex( Event e ) {
for ( int i = 0; i < groups.size; i++ ) {
if ( groups[i].rect.Contains( e.mousePosition ) ) {
return i;
}
}
return -1;
}
/*
-----------------------
UpdateDrag()
-----------------------
*/
void UpdateDrag( Event e ) {
CustomDragData dragData = DragAndDrop.GetGenericData( dragDropIdentifier ) as CustomDragData;
if ( dragData == null ) {
return;
}
int groupIndex = FindGroupIndex( e );
switch ( e.type ) {
case EventType.DragUpdated:
if ( ( groupIndex >= 0 ) && ( groupIndex != selectedGroup ) ) {
DragAndDrop.visualMode = DragAndDropVisualMode.Move;
} else {
DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
}
e.Use();
break;
case EventType.Repaint:
if ( ( DragAndDrop.visualMode == DragAndDropVisualMode.None ) ||
( DragAndDrop.visualMode == DragAndDropVisualMode.Rejected ) ) {
break;
}
if ( groupIndex >= 0 && groupIndex < groups.size ) {
EditorGUI.DrawRect( groups[groupIndex].rect, new Color( 0f, 1f, 0f, 0.1f ) );
}
break;
case EventType.DragPerform:
DragAndDrop.AcceptDrag();
// queue the sound FX move
QueueSoundFXMove( dragData.originalGroupIndex, dragData.originalIndex, groupIndex );
e.Use();
break;
case EventType.MouseUp:
// in case MouseDrag never occurred:
DragAndDrop.PrepareStartDrag();
break;
}
}
/*
-----------------------
QueueSoundFXMove()
-----------------------
*/
void QueueSoundFXMove( int origGroupIndex, int origSoundIndex, int newGroupIndex ) {
moveQueued = true;
origGroup = origGroupIndex;
origIndex = origSoundIndex;
moveToGroup = newGroupIndex;
}
/*
-----------------------
DrawHeader()
-----------------------
*/
static public bool DrawHeader (string text) { return DrawHeader(text, text, false); }
static public bool DrawHeader (string text, string key) { return DrawHeader(text, key, false); }
static public bool DrawHeader (string text, bool forceOn) { return DrawHeader(text, text, forceOn); }
static public bool DrawHeader( string text, string key, bool forceOn ) {
bool state = EditorPrefs.GetBool(key, true);
GUILayout.Space(3f);
if (!forceOn && !state) GUI.backgroundColor = new Color(0.8f, 0.8f, 0.8f);
GUILayout.BeginHorizontal();
GUILayout.Space(3f);
GUI.changed = false;
text = "<b><size=11>" + text + "</size></b>";
if (state) text = "\u25BC " + text;
else text = "\u25B6 " + text;
if (!GUILayout.Toggle(true, text, "dragtab", GUILayout.MinWidth(20f))) state = !state;
if (GUI.changed) EditorPrefs.SetBool(key, state);
GUILayout.Space(2f);
GUILayout.EndHorizontal();
GUI.backgroundColor = Color.white;
if (!forceOn && !state) GUILayout.Space(3f);
return state;
}
/*
-----------------------
BeginContents()
-----------------------
*/
static public void BeginContents() {
GUILayout.BeginHorizontal();
GUILayout.Space(4f);
EditorGUILayout.BeginHorizontal(GUILayout.MinHeight(10f));
GUILayout.BeginVertical();
GUILayout.Space(2f);
}
/*
-----------------------
EndContents()
-----------------------
*/
static public void EndContents() {
GUILayout.Space(3f);
GUILayout.EndVertical();
EditorGUILayout.EndHorizontal();
GUILayout.Space(3f);
GUILayout.EndHorizontal();
GUILayout.Space(3f);
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9f04a80514947486d9793cab0005447f
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,70 @@
using UnityEditor;
using UnityEngine;
namespace OVR
{
/*
-----------------------
MinMaxPropertyDrawer
-----------------------
*/
[CustomPropertyDrawer (typeof (MinMaxAttribute))]
public class MinMaxPropertyDrawer : PropertyDrawer {
// Provide easy access to the MinMaxAttribute for reading information from it.
MinMaxAttribute minMax { get { return ((MinMaxAttribute)attribute); } }
/*
-----------------------
GetPropertyHeight()
-----------------------
*/
public override float GetPropertyHeight( SerializedProperty prop, GUIContent label ) {
return base.GetPropertyHeight( prop, label ) * 2f;
}
/*
-----------------------
OnGUI()
-----------------------
*/
public override void OnGUI( Rect position, SerializedProperty property, GUIContent label ) {
Rect sliderPosition = EditorGUI.PrefixLabel( position, label );
SerializedProperty min = property.FindPropertyRelative( "x" );
SerializedProperty max = property.FindPropertyRelative( "y" );
// draw the range and the reset button first so that the slider doesn't grab all the input
Rect rangePosition = sliderPosition;
rangePosition.y += rangePosition.height * 0.5f;
rangePosition.height *= 0.5f;
Rect contentPosition = rangePosition;
EditorGUI.indentLevel = 0;
EditorGUIUtility.labelWidth = 30f;
contentPosition.width *= 0.3f;
EditorGUI.PropertyField(contentPosition, min, new GUIContent( "Min" ) );
contentPosition.x += contentPosition.width + 20f;
EditorGUI.PropertyField( contentPosition, max, new GUIContent( "Max" ) );
contentPosition.x += contentPosition.width + 20f;
contentPosition.width = 50.0f;
if ( GUI.Button( contentPosition, "Reset" ) ) {
min.floatValue = minMax.minDefaultVal;
max.floatValue = minMax.maxDefaultVal;
}
float minValue = min.floatValue;
float maxValue = max.floatValue;
#if UNITY_2017_1_OR_NEWER
EditorGUI.MinMaxSlider( sliderPosition, GUIContent.none, ref minValue, ref maxValue, minMax.min, minMax.max );
#else
EditorGUI.MinMaxSlider( GUIContent.none, sliderPosition, ref minValue, ref maxValue, minMax.min, minMax.max );
#endif
// round to readable values
min.floatValue = Mathf.Round( minValue / 0.01f ) * 0.01f;
max.floatValue = Mathf.Round( maxValue / 0.01f ) * 0.01f;
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 225aed143a64c4a6a93f3a07656ac5cd
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,50 @@
using UnityEditor;
using UnityEngine;
namespace OVR
{
/*
-----------------------
MixerSnapshotPropertyDrawer
-----------------------
*/
[CustomPropertyDrawer( typeof( MixerSnapshot ) )]
public class MixerSnapshotPropertyDrawer : PropertyDrawer {
// Draw the property inside the given rect
public override void OnGUI( Rect position, SerializedProperty property, GUIContent label ) {
// Using BeginProperty / EndProperty on the parent property means that
// prefab override logic works on the entire property.
EditorGUI.BeginProperty( position, label, property );
// Draw label
position = EditorGUI.PrefixLabel( position, GUIUtility.GetControlID( FocusType.Passive ), label );
// Don't make child fields be indented
var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
EditorGUIUtility.labelWidth = 65;
float width = ( position.width - 15.0f ) / 2.0f;
// Calculate rects
var srcRect = new Rect( position.x, position.y, width + 20, position.height ); position.x += width + 25.0f;
var destRect = new Rect( position.x, position.y, width - 60, position.height ); position.x += width - 60.0f;
var secsRect = new Rect( position.x, position.y, 40, position.height );
// Draw fields - pass GUIContent.none to each so they are drawn without labels
EditorGUI.PropertyField( srcRect, property.FindPropertyRelative( "snapshot" ), GUIContent.none );
EditorGUI.PropertyField( destRect, property.FindPropertyRelative( "transitionTime" ), new GUIContent( "Transition" ) );
EditorGUI.LabelField( secsRect, new GUIContent( "sec(s)" ) );
// Set indent back to what it was
EditorGUI.indentLevel = indent;
EditorGUI.EndProperty();
}
}
} // namespace OVR

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 82a91f30f2305c14dbfd2cc3c289dc59
timeCreated: 1472247018
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,66 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
namespace OVR
{
/*
-----------------------
OSPPropsPropertyDrawer
-----------------------
*/
[CustomPropertyDrawer(typeof(OSPProps))]
public class OSPPropsPropertyDrawer : PropertyDrawer {
static float lineHeight = EditorGUIUtility.singleLineHeight + 2.0f;
static float indent = 32.0f;
// TODO - some day just enumerate these
static string[] props = new string[] { "useFastOverride", "gain", "enableInvSquare", "volumetric" , "invSquareFalloff" };
static string[] names = new string[] { "Reflections Enabled", "Gain", "Enable Oculus Atten.", "Volumetric", "Range" };
static int[] lines = new int[] { 1, 1, 1, 1, 2, 2 };
/*
-----------------------
OnGUI()
-----------------------
*/
public override void OnGUI( Rect position, SerializedProperty prop, GUIContent label ) {
SerializedProperty playSpatializedProp = prop.FindPropertyRelative("enableSpatialization");
position.height = lineHeight;
EditorGUI.PropertyField( position, playSpatializedProp );
if ( playSpatializedProp.boolValue ) {
position.y += lineHeight + 4.0f;
Rect posLine = position;
posLine.x += indent;
posLine.width -= indent;
posLine.height = 1f;
GUI.Box( posLine, "" );
position.y -= 10.0f;
for ( int i = 0; i < props.Length; i++ ) {
position.y += lineHeight;
position.height = ( lineHeight * lines[i] );
SerializedProperty sibling = prop.FindPropertyRelative( props[i] );
EditorGUI.PropertyField( position, sibling, new GUIContent( names[i] ) );
}
}
}
/*
-----------------------
GetPropertyHeight()
-----------------------
*/
public override float GetPropertyHeight (SerializedProperty prop, GUIContent label) {
SerializedProperty playSpatializedProp = prop.FindPropertyRelative("enableSpatialization");
if ( !playSpatializedProp.boolValue ) {
return base.GetPropertyHeight( prop, label );
} else {
return base.GetPropertyHeight( prop, label ) + ( lineHeight * ( props.Length + 1 ) ) + 16.0f;
}
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9fc79251b168140d68851f1e8c283514
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,18 @@
{
"name": "Oculus.AudioManager.Audio.Editor",
"rootNamespace": "",
"references": [
"Oculus.AudioManager"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e2367297a6c431949a05cf8078ad917d
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,67 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
namespace OVR
{
/*
-----------------------
SoundFXPropertyDrawer
-----------------------
*/
[CustomPropertyDrawer(typeof(SoundFX))]
public class SoundFXPropertyDrawer : PropertyDrawer {
static float lineHeight = EditorGUIUtility.singleLineHeight + 2.0f;
static string[] props = new string[] { "name", "playback", "volume", "pitchVariance", "falloffDistance", "falloffCurve", "reverbZoneMix", "spread", "pctChanceToPlay", "priority", "delay", "looping", "ospProps", "soundClips" };
/*
-----------------------
OnGUI()
-----------------------
*/
public override void OnGUI( Rect position, SerializedProperty prop, GUIContent label ) {
EditorGUILayout.BeginVertical();
for ( int i = 0; i < props.Length; i++ ) {
EditorGUI.indentLevel = 2;
SerializedProperty property = prop.FindPropertyRelative( props[i] );
if ( props[i] == "reverbZoneMix" ) {
EditorGUILayout.BeginHorizontal();
SerializedProperty reverbCurve = prop.FindPropertyRelative( "reverbZoneMix" );
EditorGUILayout.PropertyField( reverbCurve, true, GUILayout.Width( Screen.width - 130.0f ) );
if ( GUILayout.Button( "Reset", GUILayout.Width( 50.0f ) ) ) {
reverbCurve.animationCurveValue = new AnimationCurve( new Keyframe[2] { new Keyframe( 0f, 1.0f ), new Keyframe( 1f, 1f ) } );
}
EditorGUILayout.EndHorizontal();
} else {
EditorGUILayout.PropertyField( property, true, GUILayout.Width( Screen.width - 80.0f ) );
position.y += lineHeight + 4.0f;
if ( props[i] == "falloffCurve" ) {
if ( property.enumValueIndex == (int)AudioRolloffMode.Custom ) {
EditorGUILayout.PropertyField( prop.FindPropertyRelative( "volumeFalloffCurve" ), true, GUILayout.Width( Screen.width - 80.0f ) );
position.y += lineHeight + 4.0f;
}
}
}
}
EditorGUILayout.EndVertical();
GUILayout.Space( 5.0f );
}
/*
-----------------------
GetPropertyHeight()
-----------------------
*/
public override float GetPropertyHeight (SerializedProperty prop, GUIContent label) {
return base.GetPropertyHeight( prop, label );
}
}
} // namespace OVR

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: e791ce392b6937f47b1f7c90c6b402db
timeCreated: 1468857307
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,62 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
namespace OVR
{
/*
-----------------------
SoundFXRefPropertyDrawer
-----------------------
*/
[CustomPropertyDrawer(typeof(SoundFXRef))]
public class SoundFXRefPropertyDrawer : PropertyDrawer {
static private GUIStyle disabledStyle = null;
/*
-----------------------
OnGUI()
-----------------------
*/
public override void OnGUI( Rect position, SerializedProperty prop, GUIContent label ) {
int idx = 0;
Rect buttonPosition = position;
buttonPosition.x = position.x + position.width - 40f;
buttonPosition.width = 20f;
position.width = buttonPosition.x - position.x - 2f;
SerializedProperty nameProp = prop.FindPropertyRelative( "soundFXName" );
if ( AudioManager.GetGameObject() == null ) {
if ( disabledStyle == null ) {
disabledStyle = new GUIStyle();
disabledStyle.normal.textColor = Color.gray;
}
EditorGUI.LabelField(position, label.text, nameProp.stringValue, disabledStyle );
}
else {
string[] soundFXNames = AudioManager.GetSoundFXNames( nameProp.stringValue, out idx );
idx = EditorGUI.Popup( position, label.text, idx, soundFXNames );
nameProp.stringValue = AudioManager.NameMinusGroup( soundFXNames[idx] );
// play button
if ( GUI.Button( buttonPosition, "\u25BA" ) ) {
if ( AudioManager.IsSoundPlaying( nameProp.stringValue ) ) {
AudioManager.StopSound( nameProp.stringValue );
} else {
AudioManager.PlaySound( nameProp.stringValue );
}
}
buttonPosition.x += 22.0f;
// select audio manager
if ( GUI.Button( buttonPosition, "\u2630" ) ) {
Selection.activeGameObject = AudioManager.GetGameObject();
}
}
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6204bcaba636340b48858c9f10ab9016
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,26 @@
using UnityEngine;
namespace OVR
{
/*
-----------------------
MinMaxAttribute
-----------------------
*/
public class MinMaxAttribute : PropertyAttribute {
public float minDefaultVal = 1.0f;
public float maxDefaultVal = 1.0f;
public float min = 0.0f;
public float max = 1.0f;
public MinMaxAttribute( float minDefaultVal, float maxDefaultVal, float min, float max ) {
this.minDefaultVal = minDefaultVal;
this.maxDefaultVal = maxDefaultVal;
this.min = min;
this.max = max;
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 15126f023faf44286a08bdb5bdbdb6e7
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,433 @@
using UnityEngine;
using UnityEngine.Audio;
using System.Collections;
namespace OVR
{
/*
-----------------------
SoundEmitter()
-----------------------
*/
public class SoundEmitter : MonoBehaviour {
public enum FadeState {
Null,
FadingIn,
FadingOut,
Ducking,
}
// OPTIMIZE
public float volume { get { return audioSource.volume; } set { audioSource.volume = value; } }
public float pitch { get { return audioSource.pitch; } set { audioSource.pitch = value; } }
public AudioClip clip { get { return audioSource.clip; } set { audioSource.clip = value; } }
public float time { get { return audioSource.time; } set { audioSource.time = value; } }
public float length { get { return ( audioSource.clip != null ) ? audioSource.clip.length : 0.0f; } }
public bool loop { get { return audioSource.loop; } set { audioSource.loop = value; } }
public bool mute { get { return audioSource.mute; } set { audioSource.mute = value; } }
public AudioVelocityUpdateMode velocityUpdateMode { get { return audioSource.velocityUpdateMode; } set { audioSource.velocityUpdateMode = value; } }
public bool isPlaying { get { return audioSource.isPlaying; } }
public EmitterChannel channel = EmitterChannel.Reserved;
public bool disableSpatialization = false;
private FadeState state = FadeState.Null;
[System.NonSerialized]
[HideInInspector]
public AudioSource audioSource = null;
[System.NonSerialized]
[HideInInspector]
public SoundPriority priority = SoundPriority.Default;
[System.NonSerialized]
[HideInInspector]
public ONSPAudioSource osp = null;
[System.NonSerialized]
[HideInInspector]
public float endPlayTime = 0.0f;
private Transform lastParentTransform = null;
[System.NonSerialized]
[HideInInspector]
public float defaultVolume = 1.0f;
[System.NonSerialized]
[HideInInspector]
public Transform defaultParent = null;
[System.NonSerialized]
[HideInInspector]
public int originalIdx = -1;
[System.NonSerialized]
[HideInInspector]
public System.Action onFinished = null;
[System.NonSerialized]
[HideInInspector]
public System.Action<object> onFinishedObject = null;
[System.NonSerialized]
[HideInInspector]
public object onFinishedParam;
[System.NonSerialized]
[HideInInspector]
public SoundGroup playingSoundGroup = null;
/*
-----------------------
Awake()
-----------------------
*/
void Awake() {
// unity defaults to 'playOnAwake = true'
audioSource = GetComponent<AudioSource>();
if ( audioSource == null ) {
audioSource = gameObject.AddComponent<AudioSource>();
}
// is the spatialized audio enabled?
if ( AudioManager.enableSpatialization && !disableSpatialization ) {
osp = GetComponent<ONSPAudioSource>();
if ( osp == null ) {
osp = gameObject.AddComponent<ONSPAudioSource>();
}
}
audioSource.playOnAwake = false;
audioSource.Stop();
}
/*
-----------------------
SetPlayingSoundGroup()
-----------------------
*/
public void SetPlayingSoundGroup( SoundGroup soundGroup ) {
playingSoundGroup = soundGroup;
if ( soundGroup != null ) {
soundGroup.IncrementPlayCount();
}
}
/*
-----------------------
SetOnFinished()
-----------------------
*/
public void SetOnFinished( System.Action onFinished ) {
this.onFinished = onFinished;
}
/*
-----------------------
SetOnFinished()
-----------------------
*/
public void SetOnFinished( System.Action<object> onFinished, object obj ) {
onFinishedObject = onFinished;
onFinishedParam = obj;
}
/*
-----------------------
SetChannel()
-----------------------
*/
public void SetChannel( int _channel ) {
channel = (EmitterChannel)_channel;
}
/*
-----------------------
SetDefaultParent()
-----------------------
*/
public void SetDefaultParent( Transform parent ) {
defaultParent = parent;
}
/*
-----------------------
SetAudioMixer()
-----------------------
*/
public void SetAudioMixer( AudioMixerGroup _mixer ) {
if ( audioSource != null ) {
audioSource.outputAudioMixerGroup = _mixer;
}
}
/*
-----------------------
IsPlaying()
-----------------------
*/
public bool IsPlaying() {
if ( loop && audioSource.isPlaying ) {
return true;
}
return endPlayTime > Time.time;
}
/*
-----------------------
Play()
-----------------------
*/
public void Play() {
// overrides everything
state = FadeState.Null;
endPlayTime = Time.time + length;
StopAllCoroutines();
audioSource.Play();
}
/*
-----------------------
Pause()
-----------------------
*/
public void Pause() {
// overrides everything
state = FadeState.Null;
StopAllCoroutines();
audioSource.Pause();
}
/*
-----------------------
Stop()
-----------------------
*/
public void Stop() {
// overrides everything
state = FadeState.Null;
StopAllCoroutines();
if ( audioSource != null ) {
audioSource.Stop();
}
if ( onFinished != null ) {
onFinished();
onFinished = null;
}
if ( onFinishedObject != null ) {
onFinishedObject( onFinishedParam );
onFinishedObject = null;
}
if ( playingSoundGroup != null ) {
playingSoundGroup.DecrementPlayCount();
playingSoundGroup = null;
}
}
/*
-----------------------
GetSampleTime()
-----------------------
*/
int GetSampleTime() {
return audioSource.clip.samples - audioSource.timeSamples;
}
/*
-----------------------
ParentTo()
-----------------------
*/
public void ParentTo( Transform parent ) {
if ( lastParentTransform != null ) {
Debug.LogError( "[SoundEmitter] You must detach the sound emitter before parenting to another object!" );
return;
}
lastParentTransform = transform.parent;
transform.parent = parent;
}
/*
-----------------------
DetachFromParent()
-----------------------
*/
public void DetachFromParent() {
if ( lastParentTransform == null ) {
transform.parent = defaultParent;
return;
}
transform.parent = lastParentTransform;
lastParentTransform = null;
}
/*
-----------------------
ResetParent()
-----------------------
*/
public void ResetParent( Transform parent ) {
transform.parent = parent;
lastParentTransform = null;
}
/*
-----------------------
SyncTo()
-----------------------
*/
public void SyncTo( SoundEmitter other, float fadeTime, float toVolume ) {
StartCoroutine( DelayedSyncTo( other, fadeTime, toVolume ) );
}
/*
-----------------------
DelayedSyncTo()
have to wait until the end of frame to do proper sync'ing
-----------------------
*/
IEnumerator DelayedSyncTo( SoundEmitter other, float fadeTime, float toVolume ) {
yield return new WaitForEndOfFrame();
//audio.timeSamples = other.GetSampleTime();
//audio.time = Mathf.Min( Mathf.Max( 0.0f, other.time - other.length ), other.time );
audioSource.time = other.time;
audioSource.Play();
FadeTo( fadeTime, toVolume );
}
/*
-----------------------
FadeTo()
-----------------------
*/
public void FadeTo( float fadeTime, float toVolume ) {
//Log.Print( ">>> FADE TO: " + channel );
// don't override a fade out
if ( state == FadeState.FadingOut ) {
//Log.Print( " ....ABORTED" );
return;
}
state = FadeState.Ducking;
StopAllCoroutines();
StartCoroutine( FadeSoundChannelTo( fadeTime, toVolume ) );
}
/*
-----------------------
FadeIn()
-----------------------
*/
public void FadeIn( float fadeTime, float defaultVolume ) {
//Log.Print( ">>> FADE IN: " + channel );
audioSource.volume = 0.0f;
state = FadeState.FadingIn;
StopAllCoroutines();
StartCoroutine( FadeSoundChannel( 0.0f, fadeTime, Fade.In, defaultVolume ) );
}
/*
-----------------------
FadeIn()
-----------------------
*/
public void FadeIn( float fadeTime ) {
//Log.Print( ">>> FADE IN: " + channel );
audioSource.volume = 0.0f;
state = FadeState.FadingIn;
StopAllCoroutines();
StartCoroutine( FadeSoundChannel( 0.0f, fadeTime, Fade.In, defaultVolume ) );
}
/*
-----------------------
FadeOut()
-----------------------
*/
public void FadeOut( float fadeTime ) {
//Log.Print( ">>> FADE OUT: " + channel );
if ( !audioSource.isPlaying ) {
//Log.Print( " ... SKIPPING" );
return;
}
state = FadeState.FadingOut;
StopAllCoroutines();
StartCoroutine( FadeSoundChannel( 0.0f, fadeTime, Fade.Out, audioSource.volume ) );
}
/*
-----------------------
FadeOutDelayed()
-----------------------
*/
public void FadeOutDelayed( float delayedSecs, float fadeTime ) {
//Log.Print( ">>> FADE OUT DELAYED: " + channel );
if ( !audioSource.isPlaying ) {
//Log.Print( " ... SKIPPING" );
return;
}
state = FadeState.FadingOut;
StopAllCoroutines();
StartCoroutine( FadeSoundChannel( delayedSecs, fadeTime, Fade.Out, audioSource.volume ) );
}
/*
-----------------------
FadeSoundChannelTo()
-----------------------
*/
IEnumerator FadeSoundChannelTo( float fadeTime, float toVolume ) {
float start = audioSource.volume;
float end = toVolume;
float startTime = Time.realtimeSinceStartup;
float elapsedTime = 0.0f;
while ( elapsedTime < fadeTime ) {
elapsedTime = Time.realtimeSinceStartup - startTime;
float t = elapsedTime / fadeTime;
audioSource.volume = Mathf.Lerp( start, end, t );
yield return 0;
}
state = FadeState.Null;
}
/*
-----------------------
FadeSoundChannel()
-----------------------
*/
IEnumerator FadeSoundChannel( float delaySecs, float fadeTime, Fade fadeType, float defaultVolume ) {
if ( delaySecs > 0.0f ) {
yield return new WaitForSeconds( delaySecs );
}
float start = ( fadeType == Fade.In ) ? 0.0f : defaultVolume;
float end = ( fadeType == Fade.In ) ? defaultVolume : 0.0f;
bool restartPlay = false;
if ( fadeType == Fade.In ) {
if ( Time.time == 0.0f ) {
restartPlay = true;
}
audioSource.volume = 0.0f;
audioSource.Play();
}
float startTime = Time.realtimeSinceStartup;
float elapsedTime = 0.0f;
while ( elapsedTime < fadeTime ) {
elapsedTime = Time.realtimeSinceStartup - startTime;
float t = elapsedTime / fadeTime;
audioSource.volume = Mathf.Lerp( start, end, t );
yield return 0;
if ( restartPlay && ( Time.time > 0.0f ) ) {
audioSource.Play();
restartPlay = false;
}
if ( !audioSource.isPlaying ) {
break;
}
}
if ( fadeType == Fade.Out ) {
Stop();
}
state = FadeState.Null;
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ecd24e91b27c645fc95f6c42115c13cc
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,311 @@
using UnityEngine;
using UnityEngine.Audio;
namespace OVR
{
public enum SoundFXNext {
Random = 0,
Sequential = 1,
}
public enum FreqHint {
None = 0,
Wide = 1,
Narrow = 2,
}
public enum SoundPriority {
VeryLow = -2,
Low = -1,
Default = 0,
High = 1,
VeryHigh = 2,
}
[System.Serializable]
public class OSPProps {
public OSPProps() {
enableSpatialization = false;
useFastOverride = false;
gain = 0.0f;
enableInvSquare = false;
volumetric = 0.0f;
invSquareFalloff = new Vector2( 1.0f, 25.0f );
}
[Tooltip( "Set to true to play the sound FX spatialized with binaural HRTF, default = false")]
public bool enableSpatialization = false;
[Tooltip( "Play the sound FX with reflections, default = false")]
public bool useFastOverride = false;
[Tooltip( "Boost the gain on the spatialized sound FX, default = 0.0")]
[Range( 0.0f, 24.0f )]
public float gain = 0.0f;
[Tooltip("Enable Inverse Square attenuation curve, default = false")]
public bool enableInvSquare = false;
[Tooltip("Change the sound from point source (0.0f) to a spherical volume, default = 0.0")]
[Range(0.0f, 1000.0f)]
public float volumetric = 0.0f;
[Tooltip("Set the near and far falloff value for the OSP attenuation curve, default = 1.0")]
[MinMax ( 1.0f, 25.0f, 0.0f, 250.0f )]
public Vector2 invSquareFalloff = new Vector2( 1.0f, 25.0f );
}
/*
-----------------------
SoundFX
-----------------------
*/
[System.Serializable]
public class SoundFX {
public SoundFX() {
playback = SoundFXNext.Random;
volume = 1.0f;
pitchVariance = Vector2.one;
falloffDistance = new Vector2( 1.0f, 25.0f );
falloffCurve = AudioRolloffMode.Linear;
volumeFalloffCurve = new AnimationCurve( new Keyframe[2] { new Keyframe( 0f, 1.0f ), new Keyframe( 1f, 1f ) } );
reverbZoneMix = new AnimationCurve( new Keyframe[2] { new Keyframe( 0f, 1.0f ), new Keyframe( 1f, 1f ) } );
spread = 0.0f;
pctChanceToPlay = 1.0f;
priority = SoundPriority.Default;
delay = Vector2.zero;
looping = false;
ospProps = new OSPProps();
}
[Tooltip( "Each sound FX should have a unique name")]
public string name = string.Empty;
[Tooltip( "Sound diversity playback option when multiple audio clips are defined, default = Random")]
public SoundFXNext playback = SoundFXNext.Random;
[Tooltip( "Default volume for this sound FX, default = 1.0")]
[Range (0.0f, 1.0f)]
public float volume = 1.0f;
[Tooltip( "Random pitch variance each time a sound FX is played, default = 1.0 (none)")]
[MinMax ( 1.0f, 1.0f, 0.0f, 2.0f )]
public Vector2 pitchVariance = Vector2.one;
[Tooltip( "Falloff distance for the sound FX, default = 1m min to 25m max")]
[MinMax ( 1.0f, 25.0f, 0.0f, 250.0f )]
public Vector2 falloffDistance = new Vector2( 1.0f, 25.0f );
[Tooltip( "Volume falloff curve - sets how the sound FX attenuates over distance, default = Linear")]
public AudioRolloffMode falloffCurve = AudioRolloffMode.Linear;
[Tooltip( "Defines the custom volume falloff curve")]
public AnimationCurve volumeFalloffCurve = new AnimationCurve( new Keyframe[2] { new Keyframe( 0f, 1.0f ), new Keyframe( 1f, 1f ) } );
[Tooltip( "The amount by which the signal from the AudioSource will be mixed into the global reverb associated with the Reverb Zones | Valid range is 0.0 - 1.1, default = 1.0" )]
public AnimationCurve reverbZoneMix = new AnimationCurve( new Keyframe[2] { new Keyframe( 0f, 1.0f ), new Keyframe( 1f, 1f ) } );
[Tooltip( "Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space, default = 0")]
[Range (0.0f, 360.0f)]
public float spread = 0.0f;
[Tooltip( "The percentage chance that this sound FX will play | 0.0 = none, 1.0 = 100%, default = 1.0")]
[Range (0.0f, 1.0f)]
public float pctChanceToPlay = 1.0f;
[Tooltip( "Sets the priority for this sound to play and/or to override a currently playing sound FX, default = Default")]
public SoundPriority priority = SoundPriority.Default;
[Tooltip( "Specifies the default delay when this sound FX is played, default = 0.0 secs")]
[MinMax ( 0.0f, 0.0f, 0.0f, 2.0f )]
public Vector2 delay = Vector2.zero; // this overrides any delay passed into PlaySound() or PlaySoundAt()
[Tooltip( "Set to true for the sound to loop continuously, default = false")]
public bool looping = false;
public OSPProps ospProps = new OSPProps();
[Tooltip( "List of the audio clips assigned to this sound FX")]
public AudioClip[] soundClips = new AudioClip[1];
// editor only - unfortunately if we set it not to serialize, we can't query it from the editor
public bool visibilityToggle = false;
// runtime vars
[System.NonSerialized]
private SoundGroup soundGroup = null;
private int lastIdx = -1;
private int playingIdx = -1;
public int Length { get { return soundClips.Length; } }
public bool IsValid { get { return ( ( soundClips.Length != 0 ) && ( soundClips[0] != null ) ); } }
public SoundGroup Group { get { return soundGroup; } set { soundGroup = value; } }
public float MaxFalloffDistSquared { get { return falloffDistance.y * falloffDistance.y; } }
public float GroupVolumeOverride { get { return ( soundGroup != null ) ? soundGroup.volumeOverride : 1.0f; } }
/*
-----------------------
GetClip()
-----------------------
*/
public AudioClip GetClip() {
if ( soundClips.Length == 0 ) {
return null;
} else if ( soundClips.Length == 1 ) {
return soundClips[0];
}
if ( playback == SoundFXNext.Random ) {
// random, but don't pick the last one
int idx = Random.Range( 0, soundClips.Length );
while ( idx == lastIdx ) {
idx = Random.Range( 0, soundClips.Length );
}
lastIdx = idx;
return soundClips[idx];
} else {
// sequential
if ( ++lastIdx >= soundClips.Length ) {
lastIdx = 0;
}
return soundClips[lastIdx];
}
}
/*
-----------------------
GetMixerGroup()
-----------------------
*/
public AudioMixerGroup GetMixerGroup( AudioMixerGroup defaultMixerGroup ) {
if ( soundGroup != null ) {
return ( soundGroup.mixerGroup != null ) ? soundGroup.mixerGroup : defaultMixerGroup;
}
return defaultMixerGroup;
}
/*
-----------------------
ReachedGroupPlayLimit()
-----------------------
*/
public bool ReachedGroupPlayLimit() {
if ( soundGroup != null ) {
return !soundGroup.CanPlaySound();
}
return false;
}
/*
-----------------------
GetClipLength()
-----------------------
*/
public float GetClipLength( int idx ) {
if ( ( idx == -1 ) || ( soundClips.Length == 0 ) || ( idx >= soundClips.Length ) || ( soundClips[idx] == null ) ) {
return 0.0f;
} else {
return soundClips[idx].length;
}
}
/*
-----------------------
GetPitch()
-----------------------
*/
public float GetPitch() {
return Random.Range( pitchVariance.x, pitchVariance.y );
}
/*
-----------------------
PlaySound()
-----------------------
*/
public int PlaySound( float delaySecs = 0.0f ) {
playingIdx = -1;
if ( !IsValid ) {
return playingIdx;
}
// check the random chance to play here to save the function calls
if ( ( pctChanceToPlay > 0.99f ) || ( Random.value < pctChanceToPlay ) ) {
if ( delay.y > 0.0f ) {
delaySecs = Random.Range( delay.x, delay.y );
}
playingIdx = AudioManager.PlaySound( this, EmitterChannel.Any, delaySecs );
}
return playingIdx;
}
/*
-----------------------
PlaySoundAt()
-----------------------
*/
public int PlaySoundAt( Vector3 pos, float delaySecs = 0.0f, float volumeOverride = 1.0f, float pitchMultiplier = 1.0f ) {
playingIdx = -1;
if ( !IsValid ) {
return playingIdx;
}
// check the random chance to play here to save the function calls
if ( ( pctChanceToPlay > 0.99f ) || ( Random.value < pctChanceToPlay ) ) {
if ( delay.y > 0.0f ) {
delaySecs = Random.Range( delay.x, delay.y );
}
playingIdx = AudioManager.PlaySoundAt( pos, this, EmitterChannel.Any, delaySecs, volumeOverride, pitchMultiplier );
}
return playingIdx;
}
/*
-----------------------
SetOnFinished()
get a callback when the sound is finished playing
-----------------------
*/
public void SetOnFinished( System.Action onFinished ) {
if ( playingIdx > -1 ) {
AudioManager.SetOnFinished( playingIdx, onFinished );
}
}
/*
-----------------------
SetOnFinished()
get a callback with an object parameter when the sound is finished playing
-----------------------
*/
public void SetOnFinished( System.Action<object> onFinished, object obj ) {
if ( playingIdx > -1 ) {
AudioManager.SetOnFinished( playingIdx, onFinished, obj );
}
}
/*
-----------------------
StopSound()
-----------------------
*/
public bool StopSound() {
bool stopped = false;
if (playingIdx > -1){
stopped = AudioManager.StopSound(playingIdx);
playingIdx = -1;
}
return stopped;
}
/*
-----------------------
AttachToParent()
-----------------------
*/
public void AttachToParent( Transform parent) {
if (playingIdx > -1) {
AudioManager.AttachSoundToParent(playingIdx, parent);
}
}
/*
-----------------------
DetachFromParent()
-----------------------
*/
public void DetachFromParent() {
if (playingIdx > -1) {
AudioManager.DetachSoundFromParent(playingIdx);
}
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b0a1e5e7b5cff46a187b02100f0e4a3c
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,144 @@
using UnityEngine;
using System.Collections;
namespace OVR
{
/*
-----------------------
SoundFXRef
just a references to a SoundFX.. all the SoundFX methods are called indirectly from here
-----------------------
*/
[System.Serializable]
public class SoundFXRef {
public string soundFXName = string.Empty;
private bool initialized = false;
private SoundFX soundFXCached = null;
public SoundFX soundFX {
get {
if ( !initialized ) {
Init();
}
return soundFXCached;
}
}
public string name { get { return soundFXName; } set { soundFXName = value; Init(); } }
/*
-----------------------
Init()
-----------------------
*/
void Init() {
// look up the actual SoundFX object
soundFXCached = AudioManager.FindSoundFX( soundFXName );
if ( soundFXCached == null ) {
soundFXCached = AudioManager.FindSoundFX( string.Empty );
}
initialized = true;
}
/*
-----------------------
Length()
-----------------------
*/
public int Length { get { return soundFX.Length; } }
/*
-----------------------
IsValid()
-----------------------
*/
public bool IsValid { get { return soundFX.IsValid; } }
/*
-----------------------
GetClip()
-----------------------
*/
public AudioClip GetClip() {
return soundFX.GetClip();
}
/*
-----------------------
GetClipLength()
-----------------------
*/
public float GetClipLength( int idx ) {
return soundFX.GetClipLength( idx );
}
/*
-----------------------
PlaySound()
-----------------------
*/
public int PlaySound( float delaySecs = 0.0f ) {
return soundFX.PlaySound( delaySecs );
}
/*
-----------------------
PlaySoundAt()
-----------------------
*/
public int PlaySoundAt( Vector3 pos, float delaySecs = 0.0f, float volume = 1.0f, float pitchMultiplier = 1.0f ) {
return soundFX.PlaySoundAt( pos, delaySecs, volume, pitchMultiplier );
}
/*
-----------------------
SetOnFinished()
get a callback when the sound is finished playing
-----------------------
*/
public void SetOnFinished( System.Action onFinished ) {
soundFX.SetOnFinished( onFinished );
}
/*
-----------------------
SetOnFinished()
get a callback with an object parameter when the sound is finished playing
-----------------------
*/
public void SetOnFinished( System.Action<object> onFinished, object obj ) {
soundFX.SetOnFinished( onFinished, obj );
}
/*
-----------------------
StopSound()
-----------------------
*/
public bool StopSound() {
return soundFX.StopSound();
}
/*
-----------------------
AttachToParent()
-----------------------
*/
public void AttachToParent( Transform parent)
{
soundFX.AttachToParent( parent);
}
/*
-----------------------
DetachFromParent()
-----------------------
*/
public void DetachFromParent()
{
soundFX.DetachFromParent();
}
}
} // namespace OVR

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 48176edab546a48de9b146105d7c5f47
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 02268a883a27b9c4abac4ee978caec4d
folderAsset: yes
timeCreated: 1468506022
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: b43e7f73d4ffc2545a17b938f63e6bc0
folderAsset: yes
timeCreated: 1468507225
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,77 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
[CustomPropertyDrawer(typeof(InspectorNoteAttribute))]
public class DrawerInspectorNote : DecoratorDrawer
{
public override void OnGUI( Rect position )
{
InspectorNoteAttribute note = attribute as InspectorNoteAttribute;
// our header is always present
Rect posLabel = position;
posLabel.y += 13;
posLabel.x -= 2;
posLabel.height += 13;
EditorGUI.LabelField(posLabel, note.header, EditorStyles.whiteLargeLabel);
// do we have a message too?
if (!string.IsNullOrEmpty(note.message))
{
Color color = GUI.color;
Color faded = color;
faded.a = 0.6f;
Rect posExplain = posLabel;
posExplain.y += 15;
GUI.color = faded;
EditorGUI.LabelField(posExplain, note.message, EditorStyles.whiteMiniLabel);
GUI.color = color;
}
Rect posLine = position;
posLine.y += string.IsNullOrEmpty(note.message) ? 30 : 42;
posLine.height = 1f;
GUI.Box(posLine, "");
}
public override float GetHeight() {
InspectorNoteAttribute note = attribute as InspectorNoteAttribute;
return string.IsNullOrEmpty( note.message ) ? 38 : 50;
}
}
[CustomPropertyDrawer( typeof( InspectorCommentAttribute ) )]
public class DrawerInspectorComment : DecoratorDrawer {
public override void OnGUI( Rect position ) {
InspectorCommentAttribute comment = attribute as InspectorCommentAttribute;
// our header is always present
Rect posLabel = position;
//posLabel.y += 13;
//posLabel.x -= 2;
//posLabel.height += 13;
//EditorGUI.LabelField( posLabel, comment.header, EditorStyles.whiteLargeLabel );
// do we have a message too?
if ( !string.IsNullOrEmpty( comment.message ) ) {
Color color = GUI.color;
Color faded = color;
faded.a = 0.6f;
Rect posExplain = posLabel;
posExplain.y += 15;
GUI.color = faded;
EditorGUI.LabelField( posExplain, comment.message, EditorStyles.whiteMiniLabel );
GUI.color = color;
}
}
public override float GetHeight() {
InspectorNoteAttribute note = attribute as InspectorNoteAttribute;
return string.IsNullOrEmpty( note.message ) ? 38 : 50;
}
}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f244e745a5bf8412d9d81d43dff35cf5
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,18 @@
{
"name": "Oculus.AudioManager.Utils.Editor",
"rootNamespace": "",
"references": [
"Oculus.AudioManager"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4e79697c263b8554db87efff0e7046ba
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,283 @@
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class FastList<T> {
/// <summary>
/// Comparison function should return -1 if left is less than right, 1 if left is greater than right, and 0 if they match.
/// </summary>
public delegate int CompareFunc(T left, T right);
public T[] array = null;
public int size = 0;
public FastList () {
}
public FastList(int size) {
if (size > 0) {
this.size = 0;
array = new T[size];
}
else {
this.size = 0;
}
}
public int Count {
get { return size;}
set { }
}
public T this[int i] {
get { return array[i];}
set { array[i] = value;}
}
//Add item to end of list.
public void Add(T item) {
if (array == null || size == array.Length) {
Allocate();
}
array[size] = item;
size++;
}
//Add item to end of list if it is unique.
public void AddUnique( T item ) {
if ( array == null || size == array.Length ) {
Allocate();
}
if ( !Contains( item ) ) {
array[size] = item;
size++;
}
}
//Add items to the end of the list
public void AddRange( IEnumerable<T> items ) {
foreach ( T item in items ) {
Add( item );
}
}
//Insert item at specified index
public void Insert(int index, T item) {
if (array == null || size == array.Length) {
Allocate();
}
if (index < size) {
//move things back 1
for (int i = size; i > index; i--) {
array[i] = array[i-1];
}
array[index] = item;
size++;
}
else Add(item);
}
//Removes specified item and keeps everything else in order
public bool Remove(T item) {
if (array != null) {
for (int i = 0; i < size; i++) {
if (item.Equals(array[i])) { //found it, push everything up
size--;
for (int j = i; j < size; j++) {
array[j] = array[j+1];
}
array[size] = default(T);
return true;
}
}
}
return false;
}
//Removes item at specified index while keeping everything else in order
//O(n)
public void RemoveAt(int index) {
if (array != null && size > 0 && index < size) {
size--;
for (int i = index; i < size; i++) {
array[i] = array[i+1];
}
array[size] = default(T);
}
}
//Removes the specified item from the list and replaces with last item. Return true if removed, false if not found.
public bool RemoveFast(T item) {
if (array != null) {
for (int i = 0; i < size; i++) {
if ( item.Equals( array[i] )) { //found
//Move last item here
if (i < (size - 1)) {
T lastItem = array[size-1];
array[size-1] = default(T);
array[i] = lastItem;
} else {
array[i] = default(T);
}
size--;
return true;
}
}
}
return false;
}
//Removes item at specified index and replace with last item.
public void RemoveAtFast(int index) {
if (array != null && index < size && index >= 0) {
//last element
if (index == size - 1) {
array[index] = default(T);
}
else {
T lastItem = array[size - 1];
array[index] = lastItem;
array[size - 1] = default(T);
}
size--;
}
}
//Return whether an item is contained within the list
//O(n)
public bool Contains(T item) {
if (array == null || size <= 0 ) return false;
for (int i = 0; i < size; i++) {
if (array[i].Equals(item)) { return true;}
}
return false;
}
//Returns index of specified item, or -1 if not found.
//O(n)
public int IndexOf(T item) {
if (size <= 0 || array == null) { return -1;}
for (int i = 0; i < size; i++) {
if (item.Equals(array[i])) { return i;}
}
return -1;
}
public T Pop() {
if (array != null && size > 0) {
T lastItem = array[size-1];
array[size-1] = default(T);
size--;
return lastItem;
}
return default(T);
}
public T[] ToArray() {
Trim();
return array;
}
public void Sort (CompareFunc comparer) {
int start = 0;
int end = size - 1;
bool changed = true;
while (changed) {
changed = false;
for (int i = start; i < end; i++) {
if (comparer(array[i], array[i + 1]) > 0) {
T temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
changed = true;
}
else if (!changed) {
start = (i==0) ? 0 : i-1;
}
}
}
}
public void InsertionSort(CompareFunc comparer) {
for (int i = 1; i < size; i++) {
T curr = array[i];
int j = i;
while (j > 0 && comparer(array[j - 1], curr) > 0) {
array[j] = array[j-1];
j--;
}
array[j] = curr;
}
}
public IEnumerator<T> GetEnumerator() {
if (array != null) {
for (int i = 0; i < size; i++) {
yield return array[i];
}
}
}
public T Find(Predicate<T> match) {
if (match != null) {
if (array != null) {
for (int i = 0; i < size; i++) {
if (match(array[i])) { return array[i];}
}
}
}
return default(T);
}
//Allocate more space to internal array.
void Allocate() {
T[] newArray;
if (array == null) {
newArray = new T[32];
}
else {
newArray = new T[Mathf.Max(array.Length << 1, 32)];
}
if (array != null && size > 0) {
array.CopyTo(newArray, 0);
}
array = newArray;
}
void Trim() {
if (size > 0) {
T[] newArray = new T[size];
for (int i = 0; i < size; i++) {
newArray[i] = array[i];
}
array = newArray;
}
else {
array = null;
}
}
//Set size to 0, does not delete array from memory
public void Clear() {
size = 0;
}
//Delete array from memory
public void Release() {
Clear();
array = null;
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 5ad95fb7eea735748bd34c963525ea21
timeCreated: 1432749689
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,35 @@
using UnityEngine;
/*
-----------------------
InspectorNoteAttribute()
-----------------------
*/
public class InspectorNoteAttribute : PropertyAttribute
{
public readonly string header;
public readonly string message;
public InspectorNoteAttribute(string header, string message = "")
{
this.header = header;
this.message = message;
}
}
/*
-----------------------
InspectorCommentAttribute()
-----------------------
*/
public class InspectorCommentAttribute : PropertyAttribute {
public readonly string message;
public InspectorCommentAttribute( string message = "" ) {
this.message = message;
}
}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4616bbe65d311471f8d71174295f4986
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 926f2375bb30f1a468b2b21e8e3b279d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: b7b5af4818686f84f844c1ae9df0f700
folderAsset: yes
timeCreated: 1466716731
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

Some files were not shown because too many files have changed in this diff Show More