1
0
forked from cgvr/DeltaVR

Remove useless files, add hands

This commit is contained in:
Toomas Tamm
2021-01-23 17:52:42 +02:00
parent 925d7f3b8a
commit 39ef3951cd
1378 changed files with 12541 additions and 195278 deletions

View File

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

View File

@@ -1,22 +0,0 @@
fileFormatVersion: 2
guid: 98e759dfda69aa7468d95f5a2c88e366
AudioImporter:
externalObjects: {}
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 1
normalize: 0
preloadAudioData: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,22 +0,0 @@
fileFormatVersion: 2
guid: 523f822c1c7b699489c49fea2353c2de
AudioImporter:
externalObjects: {}
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 1
normalize: 0
preloadAudioData: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -1,83 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: DefaultHandMaterial
m_Shader: {fileID: 4800000, guid: 8aba22c2208aff640a2fdc9a5e45a9dd, type: 3}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 3001
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
- _FresnelPower: 0.215
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _HandAlpha: 1
- _Metallic: 0
- _MinVisibleAlpha: 0.164
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimFactor: 0.922
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorBottom: {r: 0.36154413, g: 0.560827, b: 0.8088235, a: 1}
- _ColorPrimary: {r: 0.75735295, g: 0.75735295, b: 0.75735295, a: 1}
- _ColorTop: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

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

View File

@@ -1,76 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: PokeMaterial
m_Shader: {fileID: 10755, 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.20392157, g: 0.59607846, b: 0.9529412, a: 0.85882354}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 4f7fe89ad7fd14a4a9a5ebc776621cef
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,80 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: RayMaterial
m_Shader: {fileID: 10721, 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}
- _ColorMask:
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.31132078, g: 0.31132078, b: 0.31132078, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

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

View File

@@ -1,87 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: SkeletonBoneMaterial
m_Shader: {fileID: 4800000, guid: 8aba22c2208aff640a2fdc9a5e45a9dd, type: 3}
m_ShaderKeywords: _ALPHATEST_ON
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 3000
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}
- _SpecGlossMap:
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
- _FresnelPower: 0.16
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _HandAlpha: 1
- _Metallic: 0
- _MinVisibleAlpha: 0.1
- _Mode: 1
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimFactor: 0.66
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorBottom: {r: 0.69411767, g: 0.7254902, b: 0.7529412, a: 1}
- _ColorPrimary: {r: 0.69419724, g: 0.727208, b: 0.754717, a: 1}
- _ColorTop: {r: 0.69411767, g: 0.7254902, b: 0.7529412, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

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

View File

@@ -1,83 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: SystemGestureHandMaterial
m_Shader: {fileID: 4800000, guid: 8aba22c2208aff640a2fdc9a5e45a9dd, type: 3}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 3001
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
- _FresnelPower: 0.215
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _HandAlpha: 1
- _Metallic: 0
- _MinVisibleAlpha: 0.164
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimFactor: 0.922
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorBottom: {r: 0.9852941, g: 0.97749966, b: 0.7027465, a: 1}
- _ColorPrimary: {r: 0.75735295, g: 0.75735295, b: 0.75735295, a: 1}
- _ColorTop: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

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

View File

@@ -1,87 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: SystemGestureSkeletonBoneMaterial
m_Shader: {fileID: 4800000, guid: 8aba22c2208aff640a2fdc9a5e45a9dd, type: 3}
m_ShaderKeywords: _ALPHATEST_ON
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 3000
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}
- _SpecGlossMap:
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
- _FresnelPower: 0.16
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _HandAlpha: 1
- _Metallic: 0
- _MinVisibleAlpha: 0.1
- _Mode: 1
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimFactor: 0.66
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorBottom: {r: 0.9843137, g: 0.9764706, b: 0.7019608, a: 1}
- _ColorPrimary: {r: 0.69419724, g: 0.727208, b: 0.754717, a: 1}
- _ColorTop: {r: 0.69411767, g: 0.7254902, b: 0.7529412, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

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

View File

@@ -1,77 +0,0 @@
%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: TargetMaterial
m_Shader: {fileID: 10755, 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.09433961, g: 0.09433961, b: 0.09433961, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 7c4fbc253f678a74f8135c524ac84bfe
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -1,169 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1442650750392254}
m_IsPrefabParent: 1
--- !u!1 &1111425375777918
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4219426481331184}
- component: {fileID: 23972330622521208}
- component: {fileID: 33525002520690944}
m_Layer: 0
m_Name: TargetTransform
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1442650750392254
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4663491353866464}
- component: {fileID: 114989427021710928}
m_Layer: 0
m_Name: FingerTipPokeToolIndex
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1571306303871116
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4234436049194514}
- component: {fileID: 114931914658985562}
m_Layer: 0
m_Name: FingeTipPokeToolView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4219426481331184
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_Children: []
m_Father: {fileID: 4234436049194514}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4234436049194514
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
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: 4219426481331184}
m_Father: {fileID: 4663491353866464}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4663491353866464
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
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: 4234436049194514}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &23972330622521208
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 4f7fe89ad7fd14a4a9a5ebc776621cef, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
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!33 &33525002520690944
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &114931914658985562
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f58463a8ddf862a45a7a5dbd85d11ffd, type: 3}
m_Name:
m_EditorClassIdentifier:
_sphereMeshRenderer: {fileID: 23972330622521208}
--- !u!114 &114989427021710928
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ded892ce0d9b4e043844fcfd27b63b7a, type: 3}
m_Name:
m_EditorClassIdentifier:
_fingerTipPokeToolView: {fileID: 114931914658985562}
_fingerToFollow: 1

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 54e898404b081ae438d0b5d097aae07a
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,169 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1442650750392254}
m_IsPrefabParent: 1
--- !u!1 &1111425375777918
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4219426481331184}
- component: {fileID: 23972330622521208}
- component: {fileID: 33525002520690944}
m_Layer: 0
m_Name: TargetTransform
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1442650750392254
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4663491353866464}
- component: {fileID: 114989427021710928}
m_Layer: 0
m_Name: FingerTipPokeToolMiddle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1571306303871116
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4234436049194514}
- component: {fileID: 114931914658985562}
m_Layer: 0
m_Name: FingeTipPokeToolView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4219426481331184
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_Children: []
m_Father: {fileID: 4234436049194514}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4234436049194514
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
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: 4219426481331184}
m_Father: {fileID: 4663491353866464}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4663491353866464
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
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: 4234436049194514}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &23972330622521208
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 4f7fe89ad7fd14a4a9a5ebc776621cef, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
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!33 &33525002520690944
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &114931914658985562
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f58463a8ddf862a45a7a5dbd85d11ffd, type: 3}
m_Name:
m_EditorClassIdentifier:
_sphereMeshRenderer: {fileID: 23972330622521208}
--- !u!114 &114989427021710928
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ded892ce0d9b4e043844fcfd27b63b7a, type: 3}
m_Name:
m_EditorClassIdentifier:
_fingerTipPokeToolView: {fileID: 114931914658985562}
_fingerToFollow: 2

View File

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

View File

@@ -1,169 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1442650750392254}
m_IsPrefabParent: 1
--- !u!1 &1111425375777918
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4219426481331184}
- component: {fileID: 23972330622521208}
- component: {fileID: 33525002520690944}
m_Layer: 0
m_Name: TargetTransform
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1442650750392254
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4663491353866464}
- component: {fileID: 114989427021710928}
m_Layer: 0
m_Name: FingerTipPokeToolPinky
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1571306303871116
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4234436049194514}
- component: {fileID: 114931914658985562}
m_Layer: 0
m_Name: FingeTipPokeToolView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4219426481331184
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_Children: []
m_Father: {fileID: 4234436049194514}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4234436049194514
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
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: 4219426481331184}
m_Father: {fileID: 4663491353866464}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4663491353866464
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
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: 4234436049194514}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &23972330622521208
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 4f7fe89ad7fd14a4a9a5ebc776621cef, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
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!33 &33525002520690944
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &114931914658985562
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f58463a8ddf862a45a7a5dbd85d11ffd, type: 3}
m_Name:
m_EditorClassIdentifier:
_sphereMeshRenderer: {fileID: 23972330622521208}
--- !u!114 &114989427021710928
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ded892ce0d9b4e043844fcfd27b63b7a, type: 3}
m_Name:
m_EditorClassIdentifier:
_fingerTipPokeToolView: {fileID: 114931914658985562}
_fingerToFollow: 4

View File

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

View File

@@ -1,169 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1442650750392254}
m_IsPrefabParent: 1
--- !u!1 &1111425375777918
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4219426481331184}
- component: {fileID: 23972330622521208}
- component: {fileID: 33525002520690944}
m_Layer: 0
m_Name: TargetTransform
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1442650750392254
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4663491353866464}
- component: {fileID: 114989427021710928}
m_Layer: 0
m_Name: FingerTipPokeToolRing
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1571306303871116
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4234436049194514}
- component: {fileID: 114931914658985562}
m_Layer: 0
m_Name: FingeTipPokeToolView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4219426481331184
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_Children: []
m_Father: {fileID: 4234436049194514}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4234436049194514
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
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: 4219426481331184}
m_Father: {fileID: 4663491353866464}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4663491353866464
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
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: 4234436049194514}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &23972330622521208
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 4f7fe89ad7fd14a4a9a5ebc776621cef, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
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!33 &33525002520690944
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1111425375777918}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &114931914658985562
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1571306303871116}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f58463a8ddf862a45a7a5dbd85d11ffd, type: 3}
m_Name:
m_EditorClassIdentifier:
_sphereMeshRenderer: {fileID: 23972330622521208}
--- !u!114 &114989427021710928
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1442650750392254}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ded892ce0d9b4e043844fcfd27b63b7a, type: 3}
m_Name:
m_EditorClassIdentifier:
_fingerTipPokeToolView: {fileID: 114931914658985562}
_fingerToFollow: 3

View File

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

View File

@@ -1,170 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1111425375777918
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4219426481331184}
- component: {fileID: 23972330622521208}
- component: {fileID: 33525002520690944}
m_Layer: 0
m_Name: TargetTransform
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4219426481331184
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1111425375777918}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_Children: []
m_Father: {fileID: 4234436049194514}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &23972330622521208
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1111425375777918}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 4f7fe89ad7fd14a4a9a5ebc776621cef, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
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!33 &33525002520690944
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1111425375777918}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1442650750392254
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4663491353866464}
- component: {fileID: 114989427021710928}
m_Layer: 0
m_Name: FingerTipPokeToolThumb
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4663491353866464
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1442650750392254}
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: 4234436049194514}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &114989427021710928
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1442650750392254}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ded892ce0d9b4e043844fcfd27b63b7a, type: 3}
m_Name:
m_EditorClassIdentifier:
_fingerTipPokeToolView: {fileID: 114931914658985562}
_fingerToFollow: 0
--- !u!1 &1571306303871116
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4234436049194514}
- component: {fileID: 114931914658985562}
m_Layer: 0
m_Name: FingeTipPokeToolView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4234436049194514
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1571306303871116}
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: 4219426481331184}
m_Father: {fileID: 4663491353866464}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &114931914658985562
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1571306303871116}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f58463a8ddf862a45a7a5dbd85d11ffd, type: 3}
m_Name:
m_EditorClassIdentifier:
_sphereMeshRenderer: {fileID: 23972330622521208}

View File

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

View File

@@ -1,56 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1216446904706918}
m_IsPrefabParent: 1
--- !u!1 &1216446904706918
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4065790629249044}
- component: {fileID: 114346469421508108}
m_Layer: 0
m_Name: HandsManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4065790629249044
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1216446904706918}
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: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &114346469421508108
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1216446904706918}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c9371de340bd2354abd621fadfb9f78d, type: 3}
m_Name:
m_EditorClassIdentifier:
_leftHand: {fileID: 0}
_rightHand: {fileID: 0}
VisualMode: 0

View File

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

View File

@@ -1,71 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1099536711198800}
m_IsPrefabParent: 1
--- !u!1 &1099536711198800
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4344865891687486}
- component: {fileID: 114894749535269414}
- component: {fileID: 114475763992432942}
m_Layer: 0
m_Name: InteractableToolsSDKDriver
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4344865891687486
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1099536711198800}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0.49675}
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}
--- !u!114 &114475763992432942
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1099536711198800}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 85fb71180be543b44a6c8c1e4253dce4, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &114894749535269414
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1099536711198800}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 83ffd5d8c717af84394416b29a9135e1, type: 3}
m_Name:
m_EditorClassIdentifier:
LeftHandTools:
- {fileID: 4663491353866464, guid: 54e898404b081ae438d0b5d097aae07a, type: 2}
- {fileID: 4212808563549492, guid: 50f797a2ff610ca4099b5cf42214abd5, type: 2}
RightHandTools:
- {fileID: 4212808563549492, guid: 50f797a2ff610ca4099b5cf42214abd5, type: 2}
- {fileID: 4663491353866464, guid: 54e898404b081ae438d0b5d097aae07a, type: 2}

View File

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

View File

@@ -1,259 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1415229620752600}
m_IsPrefabParent: 1
--- !u!1 &1347033447090706
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4018075546172828}
- component: {fileID: 114332492007034412}
- component: {fileID: 120032820719270462}
m_Layer: 0
m_Name: RayToolView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1415229620752600
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4212808563549492}
- component: {fileID: 114908037422303764}
m_Layer: 0
m_Name: RayTool
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1416015005936930
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4926998750941526}
- component: {fileID: 23299412607408642}
m_Layer: 0
m_Name: Target
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4018075546172828
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1347033447090706}
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: 4926998750941526}
m_Father: {fileID: 4212808563549492}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4212808563549492
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1415229620752600}
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: 4018075546172828}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4926998750941526
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1416015005936930}
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: 4018075546172828}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &23299412607408642
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1416015005936930}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 7c4fbc253f678a74f8135c524ac84bfe, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
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!114 &114332492007034412
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1347033447090706}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a4e71869e3ccfde47a7a16e2f483b328, type: 3}
m_Name:
m_EditorClassIdentifier:
_targetTransform: {fileID: 4926998750941526}
_lineRenderer: {fileID: 120032820719270462}
--- !u!114 &114908037422303764
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1415229620752600}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5a3ef75653a3e84281bf84f8b8575c5, type: 3}
m_Name:
m_EditorClassIdentifier:
_rayToolView: {fileID: 114332492007034412}
_coneAngleDegrees: 15
_boneToFollow: 0
_farFieldMaxDistance: 7
--- !u!120 &120032820719270462
LineRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1347033447090706}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 0
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 0
m_Materials:
- {fileID: 2100000, guid: 0b157fd34da92084a8cf68f92d515504, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Positions:
- {x: 0, y: 0, z: 0}
- {x: 0, y: 0, z: 1}
m_Parameters:
serializedVersion: 2
widthMultiplier: 0.007
widthCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 2
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
- serializedVersion: 2
time: 0.18962929
value: 0.9551013
inSlope: 0
outSlope: 0
tangentMode: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 0
colorGradient:
serializedVersion: 2
key0: {r: 0.36078432, g: 0.56078434, b: 0.80784315, a: 1}
key1: {r: 0.77205884, g: 0.77205884, b: 0.77205884, a: 1}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
key5: {r: 0, g: 0, b: 0, a: 0}
key6: {r: 0, g: 0, b: 0, a: 0}
key7: {r: 0, g: 0, b: 0, a: 0}
ctime0: 0
ctime1: 65535
ctime2: 0
ctime3: 0
ctime4: 0
ctime5: 0
ctime6: 0
ctime7: 0
atime0: 0
atime1: 65535
atime2: 0
atime3: 0
atime4: 0
atime5: 0
atime6: 0
atime7: 0
m_Mode: 0
m_NumColorKeys: 2
m_NumAlphaKeys: 2
numCornerVertices: 0
numCapVertices: 0
alignment: 0
textureMode: 0
generateLightingData: 0
m_UseWorldSpace: 1
m_Loop: 0

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 50f797a2ff610ca4099b5cf42214abd5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -1,80 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections.Generic;
using UnityEngine;
namespace OculusSampleFramework
{
/// <summary>
/// Allows a bone to keep track of interactables that it has touched. This information
/// can be used by a tool.
/// </summary>
public class BoneCapsuleTriggerLogic : MonoBehaviour
{
public InteractableToolTags ToolTags;
public HashSet<ColliderZone> CollidersTouchingUs = new HashSet<ColliderZone>();
private List<ColliderZone> _elementsToCleanUp = new List<ColliderZone>();
/// <summary>
/// If we get disabled, clear our colliders. Otherwise, on trigger exit may not get called.
/// </summary>
private void OnDisable()
{
CollidersTouchingUs.Clear();
}
private void Update()
{
CleanUpDeadColliders();
}
private void OnTriggerEnter(Collider other)
{
var triggerZone = other.GetComponent<ButtonTriggerZone>();
if (triggerZone != null && (triggerZone.ParentInteractable.ValidToolTagsMask & (int)ToolTags) != 0)
{
CollidersTouchingUs.Add(triggerZone);
}
}
private void OnTriggerExit(Collider other)
{
var triggerZone = other.GetComponent<ButtonTriggerZone>();
if (triggerZone != null && (triggerZone.ParentInteractable.ValidToolTagsMask & (int)ToolTags) != 0)
{
CollidersTouchingUs.Remove(triggerZone);
}
}
/// <summary>
/// Sometimes colliders get disabled and trigger exit doesn't get called.
/// Take care of that edge case.
/// </summary>
private void CleanUpDeadColliders()
{
_elementsToCleanUp.Clear();
foreach (ColliderZone colliderTouching in CollidersTouchingUs)
{
if (!colliderTouching.Collider.gameObject.activeInHierarchy)
{
_elementsToCleanUp.Add(colliderTouching);
}
}
foreach (ColliderZone colliderZone in _elementsToCleanUp)
{
CollidersTouchingUs.Remove(colliderZone);
}
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: c0c1eb2fe7f491a45b278fc224f71f17
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,353 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Assertions;
namespace OculusSampleFramework
{
/// <summary>
/// A button interactable used by the train scene.
/// </summary>
public class ButtonController : Interactable
{
private const float ENTRY_DOT_THRESHOLD = 0.8f;
private const float PERP_DOT_THRESHOLD = 0.5f;
[SerializeField] private GameObject _proximityZone = null;
[SerializeField] private GameObject _contactZone = null;
[SerializeField] private GameObject _actionZone = null;
[SerializeField] private ContactTest[] _contactTests = null;
// for positive side tests, the contact position must be on the positive side of the plane
// determined by this transform
[SerializeField] private Transform _buttonPlaneCenter = null;
// make sure press is coming from "positive" side of button, i.e. above it
[SerializeField] private bool _makeSureToolIsOnPositiveSide = true;
// depending on the geometry used, the direction might not always be downwards.
[SerializeField] private Vector3 _localButtonDirection = Vector3.down;
[SerializeField]
private InteractableToolTags[] _allValidToolsTags =
new InteractableToolTags[] { InteractableToolTags.All };
private int _toolTagsMask;
public override int ValidToolTagsMask
{
get
{
return _toolTagsMask;
}
}
public enum ContactTest
{
PerpenTest = 0, // is tool pointing along button normal?
BackwardsPress // filter out presses coming backwards?
}
public Vector3 LocalButtonDirection
{
get { return _localButtonDirection; }
}
private InteractableState _currentButtonState = InteractableState.Default;
private Dictionary<InteractableTool, InteractableState> _toolToState =
new Dictionary<InteractableTool, InteractableState>();
protected override void Awake()
{
base.Awake();
Assert.IsNotNull(_proximityZone);
Assert.IsNotNull(_contactZone);
Assert.IsNotNull(_actionZone);
Assert.IsNotNull(_buttonPlaneCenter);
foreach (var interactableToolTags in _allValidToolsTags)
{
_toolTagsMask |= (int)interactableToolTags;
}
_proximityZoneCollider = _proximityZone.GetComponent<ColliderZone>();
_contactZoneCollider = _contactZone.GetComponent<ColliderZone>();
_actionZoneCollider = _actionZone.GetComponent<ColliderZone>();
}
private void FireInteractionEventsOnDepth(InteractableCollisionDepth oldDepth,
InteractableTool collidingTool, InteractionType interactionType)
{
switch (oldDepth)
{
case InteractableCollisionDepth.Action:
OnActionZoneEvent(new ColliderZoneArgs(ActionCollider, Time.frameCount,
collidingTool, interactionType));
break;
case InteractableCollisionDepth.Contact:
OnContactZoneEvent(new ColliderZoneArgs(ContactCollider, Time.frameCount,
collidingTool, interactionType));
break;
case InteractableCollisionDepth.Proximity:
OnProximityZoneEvent(new ColliderZoneArgs(ProximityCollider, Time.frameCount,
collidingTool, interactionType));
break;
}
}
public override void UpdateCollisionDepth(InteractableTool interactableTool,
InteractableCollisionDepth oldCollisionDepth,
InteractableCollisionDepth newCollisionDepth)
{
bool isFarFieldTool = interactableTool.IsFarFieldTool;
// if this is a near field tool and another tool already controls it, bail.
if (!isFarFieldTool && _toolToState.Keys.Count > 0 && !_toolToState.ContainsKey(interactableTool))
{
return;
}
var oldState = _currentButtonState;
// ignore contact test if you are using the far field tool
var currButtonDirection = transform.TransformDirection(_localButtonDirection);
bool validContact = IsValidContact(interactableTool, currButtonDirection)
|| interactableTool.IsFarFieldTool;
// in case tool enters contact zone first, we are in proximity as well
bool toolIsInProximity = newCollisionDepth >= InteractableCollisionDepth.Proximity;
bool toolInContactZone = newCollisionDepth == InteractableCollisionDepth.Contact;
bool toolInActionZone = newCollisionDepth == InteractableCollisionDepth.Action;
bool switchingStates = oldCollisionDepth != newCollisionDepth;
if (switchingStates)
{
FireInteractionEventsOnDepth(oldCollisionDepth, interactableTool,
InteractionType.Exit);
FireInteractionEventsOnDepth(newCollisionDepth, interactableTool,
InteractionType.Enter);
}
else
{
FireInteractionEventsOnDepth(newCollisionDepth, interactableTool,
InteractionType.Stay);
}
var upcomingState = oldState;
if (interactableTool.IsFarFieldTool)
{
upcomingState = toolInContactZone ? InteractableState.ContactState :
toolInActionZone ? InteractableState.ActionState : InteractableState.Default;
}
else
{
// plane describing positive side of button
var buttonZonePlane = new Plane(-currButtonDirection, _buttonPlaneCenter.position);
// skip plane test if the boolean flag tells us not to test it
bool onPositiveSideOfButton = !_makeSureToolIsOnPositiveSide ||
buttonZonePlane.GetSide(interactableTool.InteractionPosition);
upcomingState = GetUpcomingStateNearField(oldState, newCollisionDepth,
toolInActionZone, toolInContactZone, toolIsInProximity,
validContact, onPositiveSideOfButton);
}
if (upcomingState != InteractableState.Default)
{
_toolToState[interactableTool] = upcomingState;
}
else
{
_toolToState.Remove(interactableTool);
}
// if using far field tool, the upcoming state is based
// on the far field tool that has the greatest max state so far
// (since there can be multiple far field tools interacting
// with button)
if (isFarFieldTool)
{
foreach (var toolState in _toolToState.Values)
{
if (upcomingState < toolState)
{
upcomingState = toolState;
}
}
}
if (oldState != upcomingState)
{
_currentButtonState = upcomingState;
var interactionType = !switchingStates ? InteractionType.Stay :
newCollisionDepth == InteractableCollisionDepth.None ? InteractionType.Exit :
InteractionType.Enter;
var CurrentCollider =
_currentButtonState == InteractableState.ProximityState ? ProximityCollider :
_currentButtonState == InteractableState.ContactState ? ContactCollider :
_currentButtonState == InteractableState.ActionState ? ActionCollider : null;
if (InteractableStateChanged != null)
{
InteractableStateChanged.Invoke(new InteractableStateArgs(this, interactableTool,
_currentButtonState, oldState, new ColliderZoneArgs(CurrentCollider, Time.frameCount,
interactableTool, interactionType)));
}
}
}
private InteractableState GetUpcomingStateNearField(InteractableState oldState,
InteractableCollisionDepth newCollisionDepth, bool toolIsInActionZone,
bool toolIsInContactZone, bool toolIsInProximity,
bool validContact, bool onPositiveSideOfInteractable)
{
InteractableState upcomingState = oldState;
switch (oldState)
{
case InteractableState.ActionState:
if (!toolIsInActionZone)
{
// if retreating from action, can go back into action state even if contact
// is not legal (i.e. tool/finger retracts)
if (toolIsInContactZone)
{
upcomingState = InteractableState.ContactState;
}
else if (toolIsInProximity)
{
upcomingState = InteractableState.ProximityState;
}
else
{
upcomingState = InteractableState.Default;
}
}
break;
case InteractableState.ContactState:
if (newCollisionDepth < InteractableCollisionDepth.Contact)
{
upcomingState = toolIsInProximity ? InteractableState.ProximityState :
InteractableState.Default;
}
// can only go to action state if contact is legal
// if tool goes into contact state due to proper movement, but does not maintain
// that movement throughout (i.e. a tool/finger presses downwards initially but
// moves in random directions afterwards), then don't go into action
else if (toolIsInActionZone && validContact && onPositiveSideOfInteractable)
{
upcomingState = InteractableState.ActionState;
}
break;
case InteractableState.ProximityState:
if (newCollisionDepth < InteractableCollisionDepth.Proximity)
{
upcomingState = InteractableState.Default;
}
else if (validContact && onPositiveSideOfInteractable &&
newCollisionDepth > InteractableCollisionDepth.Proximity)
{
upcomingState = newCollisionDepth == InteractableCollisionDepth.Action
? InteractableState.ActionState
: InteractableState.ContactState;
}
break;
case InteractableState.Default:
// test contact, action first then proximity (more important states
// take precedence)
if (validContact && onPositiveSideOfInteractable &&
newCollisionDepth > InteractableCollisionDepth.Proximity)
{
upcomingState = newCollisionDepth == InteractableCollisionDepth.Action
? InteractableState.ActionState
: InteractableState.ContactState;
}
else if (toolIsInProximity)
{
upcomingState = InteractableState.ProximityState;
}
break;
}
return upcomingState;
}
private bool IsValidContact(InteractableTool collidingTool, Vector3 buttonDirection)
{
if (_contactTests == null || collidingTool.IsFarFieldTool)
{
return true;
}
foreach (var contactTest in _contactTests)
{
switch (contactTest)
{
case ContactTest.BackwardsPress:
if (!PassEntryTest(collidingTool, buttonDirection))
{
return false;
}
break;
default:
if (!PassPerpTest(collidingTool, buttonDirection))
{
return false;
}
break;
}
}
return true;
}
/// <summary>
/// Is tool entering button correctly? Check velocity and make sure that
/// tool is not below action zone.
/// </summary>
private bool PassEntryTest(InteractableTool collidingTool, Vector3 buttonDirection)
{
var jointVelocityVector = collidingTool.Velocity.normalized;
var dotProduct = Vector3.Dot(jointVelocityVector, buttonDirection);
if (dotProduct < ENTRY_DOT_THRESHOLD)
{
return false;
}
return true;
}
/// <summary>
/// Is our tool pointing in opposite direction compared to button?
/// </summary>
private bool PassPerpTest(InteractableTool collidingTool, Vector3 buttonDirection)
{
// the "right" vector points along tool by default
// if it's right hand, then flip that direction
var toolDirection = collidingTool.ToolTransform.right;
if (collidingTool.IsRightHandedTool)
{
toolDirection = -toolDirection;
}
var dotProduct = Vector3.Dot(toolDirection, buttonDirection);
if (dotProduct < PERP_DOT_THRESHOLD)
{
return false;
}
return true;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 95090eefe50e77847b9b4f3eec29fea0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,48 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using UnityEngine;
using UnityEngine.Assertions;
namespace OculusSampleFramework
{
/// <summary>
/// Trigger zone of button, can be proximity, contact or action.
/// </summary>
public class ButtonTriggerZone : MonoBehaviour, ColliderZone
{
[SerializeField] private GameObject _parentInteractableObj = null;
public Collider Collider { get; private set; }
public Interactable ParentInteractable { get; private set; }
public InteractableCollisionDepth CollisionDepth
{
get
{
var myColliderZone = (ColliderZone)this;
var depth = ParentInteractable.ProximityCollider == myColliderZone ? InteractableCollisionDepth.Proximity :
ParentInteractable.ContactCollider == myColliderZone ? InteractableCollisionDepth.Contact :
ParentInteractable.ActionCollider == myColliderZone ? InteractableCollisionDepth.Action :
InteractableCollisionDepth.None;
return depth;
}
}
private void Awake()
{
Assert.IsNotNull(_parentInteractableObj);
Collider = GetComponent<Collider>();
ParentInteractable = _parentInteractableObj.GetComponent<Interactable>();
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 286a680ab908503489d2d5449f01c521
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,54 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System;
using UnityEngine;
namespace OculusSampleFramework
{
/// <summary>
/// Zone that can be collided with in example code.
/// </summary>
public interface ColliderZone
{
Collider Collider { get; }
// Which interactable do we belong to?
Interactable ParentInteractable { get; }
InteractableCollisionDepth CollisionDepth { get; }
}
/// <summary>
/// Arguments for object interacting with collider zone.
/// </summary>
public class ColliderZoneArgs : EventArgs
{
public readonly ColliderZone Collider;
public readonly float FrameTime;
public readonly InteractableTool CollidingTool;
public readonly InteractionType InteractionT;
public ColliderZoneArgs(ColliderZone collider, float frameTime,
InteractableTool collidingTool, InteractionType interactionType)
{
Collider = collider;
FrameTime = frameTime;
CollidingTool = collidingTool;
InteractionT = interactionType;
}
}
public enum InteractionType
{
Enter = 0,
Stay,
Exit
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 7430c31486e4539459813e743a41d02b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,305 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Assertions;
namespace OculusSampleFramework
{
public class HandsManager : MonoBehaviour
{
private const string SKELETON_VISUALIZER_NAME = "SkeletonRenderer";
[SerializeField] GameObject _leftHand = null;
[SerializeField] GameObject _rightHand = null;
public HandsVisualMode VisualMode = HandsVisualMode.Mesh;
private OVRHand[] _hand = new OVRHand[(int)OVRHand.Hand.HandRight + 1];
private OVRSkeleton[] _handSkeleton = new OVRSkeleton[(int)OVRHand.Hand.HandRight + 1];
private OVRSkeletonRenderer[] _handSkeletonRenderer = new OVRSkeletonRenderer[(int)OVRHand.Hand.HandRight + 1];
private OVRMesh[] _handMesh = new OVRMesh[(int)OVRHand.Hand.HandRight + 1];
private OVRMeshRenderer[] _handMeshRenderer = new OVRMeshRenderer[(int)OVRHand.Hand.HandRight + 1];
private SkinnedMeshRenderer _leftMeshRenderer = null;
private SkinnedMeshRenderer _rightMeshRenderer = null;
private GameObject _leftSkeletonVisual = null;
private GameObject _rightSkeletonVisual = null;
private float _currentHandAlpha = 1.0f;
private int HandAlphaId = Shader.PropertyToID("_HandAlpha");
public enum HandsVisualMode
{
Mesh = 0, Skeleton = 1, Both = 2
}
public OVRHand RightHand
{
get
{
return _hand[(int)OVRHand.Hand.HandRight];
}
private set
{
_hand[(int)OVRHand.Hand.HandRight] = value;
}
}
public OVRSkeleton RightHandSkeleton
{
get
{
return _handSkeleton[(int)OVRHand.Hand.HandRight];
}
private set
{
_handSkeleton[(int)OVRHand.Hand.HandRight] = value;
}
}
public OVRSkeletonRenderer RightHandSkeletonRenderer
{
get
{
return _handSkeletonRenderer[(int)OVRHand.Hand.HandRight];
}
private set
{
_handSkeletonRenderer[(int)OVRHand.Hand.HandRight] = value;
}
}
public OVRMesh RightHandMesh
{
get
{
return _handMesh[(int)OVRHand.Hand.HandRight];
}
private set
{
_handMesh[(int)OVRHand.Hand.HandRight] = value;
}
}
public OVRMeshRenderer RightHandMeshRenderer
{
get
{
return _handMeshRenderer[(int)OVRHand.Hand.HandRight];
}
private set
{
_handMeshRenderer[(int)OVRHand.Hand.HandRight] = value;
}
}
public OVRHand LeftHand
{
get
{
return _hand[(int)OVRHand.Hand.HandLeft];
}
private set
{
_hand[(int)OVRHand.Hand.HandLeft] = value;
}
}
public OVRSkeleton LeftHandSkeleton
{
get
{
return _handSkeleton[(int)OVRHand.Hand.HandLeft];
}
private set
{
_handSkeleton[(int)OVRHand.Hand.HandLeft] = value;
}
}
public OVRSkeletonRenderer LeftHandSkeletonRenderer
{
get
{
return _handSkeletonRenderer[(int)OVRHand.Hand.HandLeft];
}
private set
{
_handSkeletonRenderer[(int)OVRHand.Hand.HandLeft] = value;
}
}
public OVRMesh LeftHandMesh
{
get
{
return _handMesh[(int)OVRHand.Hand.HandLeft];
}
private set
{
_handMesh[(int)OVRHand.Hand.HandLeft] = value;
}
}
public OVRMeshRenderer LeftHandMeshRenderer
{
get
{
return _handMeshRenderer[(int)OVRHand.Hand.HandLeft];
}
private set
{
_handMeshRenderer[(int)OVRHand.Hand.HandLeft] = value;
}
}
public static HandsManager Instance { get; private set; }
private void Awake()
{
if (Instance && Instance != this)
{
Destroy(this);
return;
}
Instance = this;
Assert.IsNotNull(_leftHand);
Assert.IsNotNull(_rightHand);
LeftHand = _leftHand.GetComponent<OVRHand>();
LeftHandSkeleton = _leftHand.GetComponent<OVRSkeleton>();
LeftHandSkeletonRenderer = _leftHand.GetComponent<OVRSkeletonRenderer>();
LeftHandMesh = _leftHand.GetComponent<OVRMesh>();
LeftHandMeshRenderer = _leftHand.GetComponent<OVRMeshRenderer>();
RightHand = _rightHand.GetComponent<OVRHand>();
RightHandSkeleton = _rightHand.GetComponent<OVRSkeleton>();
RightHandSkeletonRenderer = _rightHand.GetComponent<OVRSkeletonRenderer>();
RightHandMesh = _rightHand.GetComponent<OVRMesh>();
RightHandMeshRenderer = _rightHand.GetComponent<OVRMeshRenderer>();
_leftMeshRenderer = LeftHand.GetComponent<SkinnedMeshRenderer>();
_rightMeshRenderer = RightHand.GetComponent<SkinnedMeshRenderer>();
StartCoroutine(FindSkeletonVisualGameObjects());
}
private void Update()
{
switch (VisualMode)
{
case HandsVisualMode.Mesh:
case HandsVisualMode.Skeleton:
_currentHandAlpha = 1.0f;
break;
case HandsVisualMode.Both:
_currentHandAlpha = 0.6f;
break;
default:
_currentHandAlpha = 1.0f;
break;
}
_rightMeshRenderer.sharedMaterial.SetFloat(HandAlphaId, _currentHandAlpha);
_leftMeshRenderer.sharedMaterial.SetFloat(HandAlphaId, _currentHandAlpha);
}
private IEnumerator FindSkeletonVisualGameObjects()
{
while (!_leftSkeletonVisual || !_rightSkeletonVisual)
{
if (!_leftSkeletonVisual)
{
Transform leftSkeletonVisualTransform = LeftHand.transform.Find(SKELETON_VISUALIZER_NAME);
if (leftSkeletonVisualTransform)
{
_leftSkeletonVisual = leftSkeletonVisualTransform.gameObject;
}
}
if (!_rightSkeletonVisual)
{
Transform rightSkeletonVisualTransform = RightHand.transform.Find(SKELETON_VISUALIZER_NAME);
if (rightSkeletonVisualTransform)
{
_rightSkeletonVisual = rightSkeletonVisualTransform.gameObject;
}
}
yield return null;
}
SetToCurrentVisualMode();
}
public void SwitchVisualization()
{
if (!_leftSkeletonVisual || !_rightSkeletonVisual)
{
return;
}
VisualMode = (HandsVisualMode)(((int)VisualMode + 1) % ((int)HandsVisualMode.Both + 1));
SetToCurrentVisualMode();
}
private void SetToCurrentVisualMode()
{
switch (VisualMode)
{
case HandsVisualMode.Mesh:
RightHandMeshRenderer.enabled = true;
_rightMeshRenderer.enabled = true;
_rightSkeletonVisual.gameObject.SetActive(false);
LeftHandMeshRenderer.enabled = true;
_leftMeshRenderer.enabled = true;
_leftSkeletonVisual.gameObject.SetActive(false);
break;
case HandsVisualMode.Skeleton:
RightHandMeshRenderer.enabled = false;
_rightMeshRenderer.enabled = false;
_rightSkeletonVisual.gameObject.SetActive(true);
LeftHandMeshRenderer.enabled = false;
_leftMeshRenderer.enabled = false;
_leftSkeletonVisual.gameObject.SetActive(true);
break;
case HandsVisualMode.Both:
RightHandMeshRenderer.enabled = true;
_rightMeshRenderer.enabled = true;
_rightSkeletonVisual.gameObject.SetActive(true);
LeftHandMeshRenderer.enabled = true;
_leftMeshRenderer.enabled = true;
_leftSkeletonVisual.gameObject.SetActive(true);
break;
default:
break;
}
}
public static List<OVRBoneCapsule> GetCapsulesPerBone(OVRSkeleton skeleton, OVRSkeleton.BoneId boneId)
{
List<OVRBoneCapsule> boneCapsules = new List<OVRBoneCapsule>();
var capsules = skeleton.Capsules;
for (int i = 0; i < capsules.Count; ++i)
{
if (capsules[i].BoneIndex == (short)boneId)
{
boneCapsules.Add(capsules[i]);
}
}
return boneCapsules;
}
public bool IsInitialized()
{
return LeftHandSkeleton && LeftHandSkeleton.IsInitialized &&
RightHandSkeleton && RightHandSkeleton.IsInitialized &&
LeftHandMesh && LeftHandMesh.IsInitialized &&
RightHandMesh && RightHandMesh.IsInitialized;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: c9371de340bd2354abd621fadfb9f78d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,160 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System;
using UnityEngine;
using UnityEngine.Events;
namespace OculusSampleFramework
{
/// <summary>
/// Interface for all objects interacted with in example code.
/// </summary>
public abstract class Interactable : MonoBehaviour
{
protected ColliderZone _proximityZoneCollider = null;
protected ColliderZone _contactZoneCollider = null;
protected ColliderZone _actionZoneCollider = null;
// Collider that indicates "am I close?"
public ColliderZone ProximityCollider
{
get
{
return _proximityZoneCollider;
}
}
// Collider that indicates that contact has been made.
public ColliderZone ContactCollider
{
get
{
return _contactZoneCollider;
}
}
// Indicates interactable has been activated. Like when
// a button goes "click" and something interesting happens.
public ColliderZone ActionCollider
{
get
{
return _actionZoneCollider;
}
}
// What kinds of tools works with this interactable?
public virtual int ValidToolTagsMask
{
get
{
return (int)InteractableToolTags.All;
}
}
// The following events tell you if a tool is in a zone, which
// might *not* mean the button is in the related zone state. This can happen
// if a tool is in the contact zone but the interactable won't go into
// the contact state if bad interactions (i.e. incorrect button presses)
// are filtered out.
public event Action<ColliderZoneArgs> ProximityZoneEvent;
protected virtual void OnProximityZoneEvent(ColliderZoneArgs args)
{
if (ProximityZoneEvent != null)
{
ProximityZoneEvent.Invoke(args);
}
}
public event Action<ColliderZoneArgs> ContactZoneEvent;
protected virtual void OnContactZoneEvent(ColliderZoneArgs args)
{
if (ContactZoneEvent != null)
{
ContactZoneEvent.Invoke(args);
}
}
public event Action<ColliderZoneArgs> ActionZoneEvent;
protected virtual void OnActionZoneEvent(ColliderZoneArgs args)
{
if (ActionZoneEvent != null)
{
ActionZoneEvent.Invoke(args);
}
}
public abstract void UpdateCollisionDepth(InteractableTool interactableTool,
InteractableCollisionDepth oldCollisionDepth, InteractableCollisionDepth newCollisionDepth);
[Serializable]
public class InteractableStateArgsEvent : UnityEvent<InteractableStateArgs>
{
}
public InteractableStateArgsEvent InteractableStateChanged;
protected virtual void Awake()
{
InteractableRegistry.RegisterInteractable(this);
}
protected virtual void OnDestroy()
{
InteractableRegistry.UnregisterInteractable(this);
}
}
/// <summary>
/// Depth of collision, in order of "furthest" to "closest"
/// </summary>
public enum InteractableCollisionDepth
{
None = 0,
Proximity,
Contact,
Action,
}
public enum InteractableState
{
Default = 0,
ProximityState, // in proximity -- close enough
ContactState, // contact has been made
ActionState, // interactable activates
}
public class InteractableStateArgs : EventArgs
{
public readonly Interactable Interactable;
public readonly InteractableTool Tool;
public readonly InteractableState OldInteractableState;
public readonly InteractableState NewInteractableState;
public readonly ColliderZoneArgs ColliderArgs;
public InteractableStateArgs(Interactable interactable, InteractableTool tool,
InteractableState newInteractableState, InteractableState oldState,
ColliderZoneArgs colliderArgs)
{
Interactable = interactable;
Tool = tool;
NewInteractableState = newInteractableState;
OldInteractableState = oldState;
ColliderArgs = colliderArgs;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: eed225a47adda90439d3e20862fff091
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,43 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections.Generic;
using UnityEngine;
namespace OculusSampleFramework
{
/// <summary>
/// In case someone wants to know about all interactables in a scene,
/// this registry is the easiest way to access that information.
/// </summary>
public class InteractableRegistry : MonoBehaviour
{
public static HashSet<Interactable> _interactables = new HashSet<Interactable>();
public static HashSet<Interactable> Interactables
{
get
{
return _interactables;
}
}
public static void RegisterInteractable(Interactable interactable)
{
Interactables.Add(interactable);
}
public static void UnregisterInteractable(Interactable interactable)
{
Interactables.Remove(interactable);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: db53c89543f6f6b488b925fc8e25b00d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,77 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace OculusSampleFramework
{
/// <summary>
/// Spawns all interactable tools that are specified for a scene.
/// </summary>
public class InteractableToolsCreator : MonoBehaviour
{
[SerializeField] private Transform[] LeftHandTools = null;
[SerializeField] private Transform[] RightHandTools = null;
private void Awake()
{
if (LeftHandTools != null && LeftHandTools.Length > 0)
{
StartCoroutine(AttachToolsToHands(LeftHandTools, false));
}
if (RightHandTools != null && RightHandTools.Length > 0)
{
StartCoroutine(AttachToolsToHands(RightHandTools, true));
}
}
private IEnumerator AttachToolsToHands(Transform[] toolObjects, bool isRightHand)
{
HandsManager handsManagerObj = null;
while ((handsManagerObj = HandsManager.Instance) == null || !handsManagerObj.IsInitialized())
{
yield return null;
}
// create set of tools per hand to be safe
HashSet<Transform> toolObjectSet = new HashSet<Transform>();
foreach (Transform toolTransform in toolObjects)
{
toolObjectSet.Add(toolTransform.transform);
}
foreach (Transform toolObject in toolObjectSet)
{
OVRSkeleton handSkeletonToAttachTo =
isRightHand ? handsManagerObj.RightHandSkeleton : handsManagerObj.LeftHandSkeleton;
while (handSkeletonToAttachTo == null || handSkeletonToAttachTo.Bones == null)
{
yield return null;
}
AttachToolToHandTransform(toolObject, isRightHand);
}
}
private void AttachToolToHandTransform(Transform tool, bool isRightHanded)
{
var newTool = Instantiate(tool).transform;
newTool.localPosition = Vector3.zero;
var toolComp = newTool.GetComponent<InteractableTool>();
toolComp.IsRightHandedTool = isRightHanded;
// Initialize only AFTER settings have been applied!
toolComp.Initialize();
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 83ffd5d8c717af84394416b29a9135e1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,207 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections.Generic;
using UnityEngine;
namespace OculusSampleFramework
{
/// <summary>
/// Routes all collisions from interactable tools to the interactables themselves.
/// We want to do this in a top-down fashion, because we might want to disable
/// far-field interactions if near-field interactions take precendence (for instance).
/// </summary>
public class InteractableToolsInputRouter : MonoBehaviour
{
private static InteractableToolsInputRouter _instance;
private bool _leftPinch, _rightPinch;
public static InteractableToolsInputRouter Instance
{
get
{
if (_instance == null)
{
var instances = FindObjectsOfType<InteractableToolsInputRouter>();
if (instances.Length > 0)
{
_instance = instances[0];
// remove extras, if any
for (int i = 1; i < instances.Length; i++)
{
GameObject.Destroy(instances[i].gameObject);
}
}
}
return _instance;
}
}
private HashSet<InteractableTool> _leftHandNearTools = new HashSet<InteractableTool>();
private HashSet<InteractableTool> _leftHandFarTools = new HashSet<InteractableTool>();
private HashSet<InteractableTool> _rightHandNearTools = new HashSet<InteractableTool>();
private HashSet<InteractableTool> _rightHandFarTools = new HashSet<InteractableTool>();
public void RegisterInteractableTool(InteractableTool interactableTool)
{
if (interactableTool.IsRightHandedTool)
{
if (interactableTool.IsFarFieldTool)
{
_rightHandFarTools.Add(interactableTool);
}
else
{
_rightHandNearTools.Add(interactableTool);
}
}
else
{
if (interactableTool.IsFarFieldTool)
{
_leftHandFarTools.Add(interactableTool);
}
else
{
_leftHandNearTools.Add(interactableTool);
}
}
}
public void UnregisterInteractableTool(InteractableTool interactableTool)
{
if (interactableTool.IsRightHandedTool)
{
if (interactableTool.IsFarFieldTool)
{
_rightHandFarTools.Remove(interactableTool);
}
else
{
_rightHandNearTools.Remove(interactableTool);
}
}
else
{
if (interactableTool.IsFarFieldTool)
{
_leftHandFarTools.Remove(interactableTool);
}
else
{
_leftHandNearTools.Remove(interactableTool);
}
}
}
private void Update()
{
if (!HandsManager.Instance.IsInitialized())
{
return;
}
bool leftHandIsReliable = HandsManager.Instance.LeftHand.IsTracked &&
HandsManager.Instance.LeftHand.HandConfidence == OVRHand.TrackingConfidence.High;
bool rightHandIsReliable = HandsManager.Instance.RightHand.IsTracked &&
HandsManager.Instance.RightHand.HandConfidence == OVRHand.TrackingConfidence.High;
bool leftHandProperlyTracked = HandsManager.Instance.LeftHand.IsPointerPoseValid;
bool rightHandProperlyTracked = HandsManager.Instance.RightHand.IsPointerPoseValid;
bool encounteredNearObjectsLeftHand = UpdateToolsAndEnableState(_leftHandNearTools, leftHandIsReliable);
// don't interact with far field if near field is touching something
UpdateToolsAndEnableState(_leftHandFarTools, !encounteredNearObjectsLeftHand && leftHandIsReliable &&
leftHandProperlyTracked);
bool encounteredNearObjectsRightHand = UpdateToolsAndEnableState(_rightHandNearTools, rightHandIsReliable);
// don't interact with far field if near field is touching something
UpdateToolsAndEnableState(_rightHandFarTools, !encounteredNearObjectsRightHand && rightHandIsReliable &&
rightHandProperlyTracked);
}
private bool UpdateToolsAndEnableState(HashSet<InteractableTool> tools, bool toolsAreEnabledThisFrame)
{
bool encounteredObjects = UpdateTools(tools, resetCollisionData: !toolsAreEnabledThisFrame);
ToggleToolsEnableState(tools, toolsAreEnabledThisFrame);
return encounteredObjects;
}
/// <summary>
/// Update tools specified based on new collisions.
/// </summary>
/// <param name="tools">Tools to update.</param>
/// <param name="resetCollisionData">True if we want the tool to be disabled. This can happen
/// if near field tools take precedence over far-field tools, for instance.</param>
/// <returns></returns>
private bool UpdateTools(HashSet<InteractableTool> tools, bool resetCollisionData = false)
{
bool toolsEncounteredObjects = false;
foreach (InteractableTool currentInteractableTool in tools)
{
List<InteractableCollisionInfo> intersectingObjectsFound =
currentInteractableTool.GetNextIntersectingObjects();
if (intersectingObjectsFound.Count > 0 && !resetCollisionData)
{
if (!toolsEncounteredObjects)
{
toolsEncounteredObjects = intersectingObjectsFound.Count > 0;
}
// create map that indicates the furthest collider encountered per interactable element
currentInteractableTool.UpdateCurrentCollisionsBasedOnDepth();
if (currentInteractableTool.IsFarFieldTool)
{
var firstInteractable = currentInteractableTool.GetFirstCurrentCollisionInfo();
// if our tool is activated, make sure depth is set to "action"
if (currentInteractableTool.ToolInputState == ToolInputState.PrimaryInputUp)
{
firstInteractable.Value.InteractableCollider = firstInteractable.Key.ActionCollider;
firstInteractable.Value.CollisionDepth = InteractableCollisionDepth.Action;
}
else
{
firstInteractable.Value.InteractableCollider = firstInteractable.Key.ContactCollider;
firstInteractable.Value.CollisionDepth = InteractableCollisionDepth.Contact;
}
// far field tools only can focus elements -- pick first (for now)
currentInteractableTool.FocusOnInteractable(firstInteractable.Key,
firstInteractable.Value.InteractableCollider);
}
}
else
{
currentInteractableTool.DeFocus();
currentInteractableTool.ClearAllCurrentCollisionInfos();
}
currentInteractableTool.UpdateLatestCollisionData();
}
return toolsEncounteredObjects;
}
private void ToggleToolsEnableState(HashSet<InteractableTool> tools, bool enableState)
{
foreach (InteractableTool tool in tools)
{
if (tool.EnableState != enableState)
{
tool.EnableState = enableState;
}
}
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 85fb71180be543b44a6c8c1e4253dce4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -1,233 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Assertions;
namespace OculusSampleFramework
{
/// <summary>
/// Poke tool used for near-field (touching) interactions. Assumes that it will be placed on
/// finger tips.
/// </summary>
public class FingerTipPokeTool : InteractableTool
{
private const int NUM_VELOCITY_FRAMES = 10;
[SerializeField] private FingerTipPokeToolView _fingerTipPokeToolView = null;
[SerializeField] private OVRPlugin.HandFinger _fingerToFollow = OVRPlugin.HandFinger.Index;
public override InteractableToolTags ToolTags
{
get
{
return InteractableToolTags.Poke;
}
}
public override ToolInputState ToolInputState
{
get
{
return ToolInputState.Inactive;
}
}
public override bool IsFarFieldTool
{
get
{
return false;
}
}
public override bool EnableState
{
get
{
return _fingerTipPokeToolView.gameObject.activeSelf;
}
set
{
_fingerTipPokeToolView.gameObject.SetActive(value);
}
}
private Vector3[] _velocityFrames;
private int _currVelocityFrame = 0;
private bool _sampledMaxFramesAlready;
private Vector3 _position;
private BoneCapsuleTriggerLogic[] _boneCapsuleTriggerLogic;
private float _lastScale = 1.0f;
private bool _isInitialized = false;
private OVRBoneCapsule _capsuleToTrack;
public override void Initialize()
{
Assert.IsNotNull(_fingerTipPokeToolView);
InteractableToolsInputRouter.Instance.RegisterInteractableTool(this);
_fingerTipPokeToolView.InteractableTool = this;
_velocityFrames = new Vector3[NUM_VELOCITY_FRAMES];
Array.Clear(_velocityFrames, 0, NUM_VELOCITY_FRAMES);
StartCoroutine(AttachTriggerLogic());
}
private IEnumerator AttachTriggerLogic()
{
while (!HandsManager.Instance || !HandsManager.Instance.IsInitialized())
{
yield return null;
}
OVRSkeleton handSkeleton = IsRightHandedTool ? HandsManager.Instance.RightHandSkeleton : HandsManager.Instance.LeftHandSkeleton;
OVRSkeleton.BoneId boneToTestCollisions = OVRSkeleton.BoneId.Hand_Pinky3;
switch (_fingerToFollow)
{
case OVRPlugin.HandFinger.Thumb:
boneToTestCollisions = OVRSkeleton.BoneId.Hand_Thumb3;
break;
case OVRPlugin.HandFinger.Index:
boneToTestCollisions = OVRSkeleton.BoneId.Hand_Index3;
break;
case OVRPlugin.HandFinger.Middle:
boneToTestCollisions = OVRSkeleton.BoneId.Hand_Middle3;
break;
case OVRPlugin.HandFinger.Ring:
boneToTestCollisions = OVRSkeleton.BoneId.Hand_Ring3;
break;
default:
boneToTestCollisions = OVRSkeleton.BoneId.Hand_Pinky3;
break;
}
List<BoneCapsuleTriggerLogic> boneCapsuleTriggerLogic = new List<BoneCapsuleTriggerLogic>();
List<OVRBoneCapsule> boneCapsules = HandsManager.GetCapsulesPerBone(handSkeleton, boneToTestCollisions);
foreach (var ovrCapsuleInfo in boneCapsules)
{
var boneCapsuleTrigger = ovrCapsuleInfo.CapsuleRigidbody.gameObject.AddComponent<BoneCapsuleTriggerLogic>();
ovrCapsuleInfo.CapsuleCollider.isTrigger = true;
boneCapsuleTrigger.ToolTags = ToolTags;
boneCapsuleTriggerLogic.Add(boneCapsuleTrigger);
}
_boneCapsuleTriggerLogic = boneCapsuleTriggerLogic.ToArray();
// finger tip should have only one capsule
if (boneCapsules.Count > 0)
{
_capsuleToTrack = boneCapsules[0];
}
_isInitialized = true;
}
private void Update()
{
if (!HandsManager.Instance || !HandsManager.Instance.IsInitialized() || !_isInitialized || _capsuleToTrack == null)
{
return;
}
OVRHand hand = IsRightHandedTool ? HandsManager.Instance.RightHand : HandsManager.Instance.LeftHand;
float currentScale = hand.HandScale;
// push tool into the tip based on how wide it is. so negate the direction
Transform capsuleTransform = _capsuleToTrack.CapsuleCollider.transform;
// NOTE: use time settings 0.0111111/0.02 to make collisions work correctly!
Vector3 capsuleDirection = capsuleTransform.right;
Vector3 capsuleTipPosition = capsuleTransform.position + _capsuleToTrack.CapsuleCollider.height * 0.5f
* capsuleDirection;
Vector3 toolSphereRadiusOffsetFromTip = currentScale * _fingerTipPokeToolView.SphereRadius *
capsuleDirection;
// push tool back so that it's centered on transform/bone
Vector3 toolPosition = capsuleTipPosition + toolSphereRadiusOffsetFromTip;
transform.position = toolPosition;
transform.rotation = capsuleTransform.rotation;
InteractionPosition = capsuleTipPosition;
UpdateAverageVelocity();
CheckAndUpdateScale();
}
private void UpdateAverageVelocity()
{
var prevPosition = _position;
var currPosition = transform.position;
var currentVelocity = (currPosition - prevPosition) / Time.deltaTime;
_position = currPosition;
_velocityFrames[_currVelocityFrame] = currentVelocity;
// if sampled more than allowed, loop back toward the beginning
_currVelocityFrame = (_currVelocityFrame + 1) % NUM_VELOCITY_FRAMES;
Velocity = Vector3.zero;
// edge case; when we first start up, we will have only sampled less than the
// max frames. so only compute the average over that subset. After that, the
// frame samples will act like an array that loops back toward to the beginning
if (!_sampledMaxFramesAlready && _currVelocityFrame == NUM_VELOCITY_FRAMES - 1)
{
_sampledMaxFramesAlready = true;
}
int numFramesToSamples = _sampledMaxFramesAlready ? NUM_VELOCITY_FRAMES : _currVelocityFrame + 1;
for (int frameIndex = 0; frameIndex < numFramesToSamples; frameIndex++)
{
Velocity += _velocityFrames[frameIndex];
}
Velocity /= numFramesToSamples;
}
private void CheckAndUpdateScale()
{
float currentScale = IsRightHandedTool ? HandsManager.Instance.RightHand.HandScale
: HandsManager.Instance.LeftHand.HandScale;
if (Mathf.Abs(currentScale - _lastScale) > Mathf.Epsilon)
{
transform.localScale = new Vector3(currentScale, currentScale, currentScale);
_lastScale = currentScale;
}
}
public override List<InteractableCollisionInfo> GetNextIntersectingObjects()
{
_currentIntersectingObjects.Clear();
foreach (var boneCapsuleTriggerLogic in _boneCapsuleTriggerLogic)
{
var collidersTouching = boneCapsuleTriggerLogic.CollidersTouchingUs;
foreach (ColliderZone colliderTouching in collidersTouching)
{
_currentIntersectingObjects.Add(new InteractableCollisionInfo(colliderTouching,
colliderTouching.CollisionDepth, this));
}
}
return _currentIntersectingObjects;
}
public override void FocusOnInteractable(Interactable focusedInteractable,
ColliderZone colliderZone)
{
// no need for focus
}
public override void DeFocus()
{
// no need for focus
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: ded892ce0d9b4e043844fcfd27b63b7a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,53 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using UnityEngine;
using UnityEngine.Assertions;
/// <summary>
/// Visual of finger tip poke tool.
/// </summary>
namespace OculusSampleFramework
{
public class FingerTipPokeToolView : MonoBehaviour, InteractableToolView
{
[SerializeField] private MeshRenderer _sphereMeshRenderer = null;
public InteractableTool InteractableTool { get; set; }
public bool EnableState
{
get
{
return _sphereMeshRenderer.enabled;
}
set
{
_sphereMeshRenderer.enabled = value;
}
}
public bool ToolActivateState { get; set; }
public float SphereRadius { get; private set; }
private void Awake()
{
Assert.IsNotNull(_sphereMeshRenderer);
SphereRadius = _sphereMeshRenderer.transform.localScale.z * 0.5f;
}
public void SetFocusedInteractable(Interactable interactable)
{
// nothing to see here
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: f58463a8ddf862a45a7a5dbd85d11ffd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,210 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace OculusSampleFramework
{
/// <summary>
/// Describes how the tool will work with interactables. An interactable,
/// in turn, can tell us which tools they support via their flag bit mask.
/// </summary>
[System.Flags]
public enum InteractableToolTags
{
None = 0,
Ray = 1 << 0,
Poke = 1 << 2,
All = ~0
}
/// <summary>
/// Indicates if tool has been activated via some gesture, press, etc.
/// </summary>
public enum ToolInputState
{
Inactive = 0,
PrimaryInputDown,
PrimaryInputDownStay,
PrimaryInputUp
}
/// <summary>
/// Describes tool-to-collision information.
/// </summary>
public class InteractableCollisionInfo
{
public InteractableCollisionInfo(ColliderZone collider, InteractableCollisionDepth collisionDepth,
InteractableTool collidingTool)
{
InteractableCollider = collider;
CollisionDepth = collisionDepth;
CollidingTool = collidingTool;
}
public ColliderZone InteractableCollider;
public InteractableCollisionDepth CollisionDepth;
public InteractableTool CollidingTool;
}
/// <summary>
/// A tool that can engage interactables.
/// </summary>
public abstract class InteractableTool : MonoBehaviour
{
public Transform ToolTransform { get { return this.transform; } }
public bool IsRightHandedTool { get; set; }
public abstract InteractableToolTags ToolTags { get; }
public abstract ToolInputState ToolInputState { get; }
public abstract bool IsFarFieldTool { get; }
public Vector3 Velocity { get; protected set; }
/// <summary>
/// Sometimes we want the position of a tool for stuff like pokes.
/// </summary>
public Vector3 InteractionPosition { get; protected set; }
/// <summary>
/// List of objects that intersect tool.
/// </summary>
protected List<InteractableCollisionInfo> _currentIntersectingObjects =
new List<InteractableCollisionInfo>();
public List<InteractableCollisionInfo> GetCurrentIntersectingObjects()
{
return _currentIntersectingObjects;
}
public abstract List<InteractableCollisionInfo> GetNextIntersectingObjects();
/// <summary>
/// Used to tell the tool to "focus" on a specific object, if
/// focusing is indeed possible given the tool type.
/// </summary>
/// <param name="focusedInteractable">Interactable to focus.</param>
/// <param name="colliderZone">Collider zone of interactable.</param>
public abstract void FocusOnInteractable(Interactable focusedInteractable,
ColliderZone colliderZone);
public abstract void DeFocus();
public abstract bool EnableState { get; set; }
// lists created once so that they don't need to be created per frame
private List<Interactable> _addedInteractables = new List<Interactable>();
private List<Interactable> _removedInteractables = new List<Interactable>();
private List<Interactable> _remainingInteractables = new List<Interactable>();
private Dictionary<Interactable, InteractableCollisionInfo> _currInteractableToCollisionInfos
= new Dictionary<Interactable, InteractableCollisionInfo>();
private Dictionary<Interactable, InteractableCollisionInfo> _prevInteractableToCollisionInfos
= new Dictionary<Interactable, InteractableCollisionInfo>();
public abstract void Initialize();
public KeyValuePair<Interactable, InteractableCollisionInfo> GetFirstCurrentCollisionInfo()
{
return _currInteractableToCollisionInfos.First();
}
public void ClearAllCurrentCollisionInfos()
{
_currInteractableToCollisionInfos.Clear();
}
/// <summary>
/// For each intersecting interactable, update meta data to indicate deepest collision only.
/// </summary>
public virtual void UpdateCurrentCollisionsBasedOnDepth()
{
_currInteractableToCollisionInfos.Clear();
foreach (InteractableCollisionInfo interactableCollisionInfo in _currentIntersectingObjects)
{
var interactable = interactableCollisionInfo.InteractableCollider.ParentInteractable;
var depth = interactableCollisionInfo.CollisionDepth;
InteractableCollisionInfo collisionInfoFromMap = null;
if (!_currInteractableToCollisionInfos.TryGetValue(interactable, out collisionInfoFromMap))
{
_currInteractableToCollisionInfos[interactable] = interactableCollisionInfo;
}
else if (collisionInfoFromMap.CollisionDepth < depth)
{
collisionInfoFromMap.InteractableCollider = interactableCollisionInfo.InteractableCollider;
collisionInfoFromMap.CollisionDepth = depth;
}
}
}
/// <summary>
/// If our collision information changed per frame, make note of it.
/// Removed, added and remaining objects must get their proper events.
/// </summary>
public virtual void UpdateLatestCollisionData()
{
_addedInteractables.Clear();
_removedInteractables.Clear();
_remainingInteractables.Clear();
foreach (Interactable key in _currInteractableToCollisionInfos.Keys)
{
if (!_prevInteractableToCollisionInfos.ContainsKey(key))
{
_addedInteractables.Add(key);
}
else
{
_remainingInteractables.Add(key);
}
}
foreach (Interactable key in _prevInteractableToCollisionInfos.Keys)
{
if (!_currInteractableToCollisionInfos.ContainsKey(key))
{
_removedInteractables.Add(key);
}
}
// tell removed interactables that we are gone
foreach (Interactable removedInteractable in _removedInteractables)
{
removedInteractable.UpdateCollisionDepth(this,
_prevInteractableToCollisionInfos[removedInteractable].CollisionDepth,
InteractableCollisionDepth.None);
}
// tell added interactable what state we are now in
foreach (Interactable addedInteractableKey in _addedInteractables)
{
var addedInteractable = _currInteractableToCollisionInfos[addedInteractableKey];
var collisionDepth = addedInteractable.CollisionDepth;
addedInteractableKey.UpdateCollisionDepth(this, InteractableCollisionDepth.None,
collisionDepth);
}
// remaining interactables must be updated
foreach (Interactable remainingInteractableKey in _remainingInteractables)
{
var newDepth = _currInteractableToCollisionInfos[remainingInteractableKey].CollisionDepth;
var oldDepth = _prevInteractableToCollisionInfos[remainingInteractableKey].CollisionDepth;
remainingInteractableKey.UpdateCollisionDepth(this, oldDepth, newDepth);
}
_prevInteractableToCollisionInfos = new Dictionary<Interactable, InteractableCollisionInfo>(
_currInteractableToCollisionInfos);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 315c35e87495799449c01ea6abb8fda6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,26 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
namespace OculusSampleFramework
{
/// <summary>
/// The visual abstraction of an interactable tool.
/// </summary>
public interface InteractableToolView
{
InteractableTool InteractableTool { get; }
void SetFocusedInteractable(Interactable interactable);
bool EnableState { get; set; }
// Useful if you want to tool to glow in case it interacts with an object.
bool ToolActivateState { get; set; }
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4527e0b0689eb704d84933513d5b5dd3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,120 +0,0 @@
// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
using UnityEngine;
namespace OculusSampleFramework
{
/// <summary>
/// Manages pinch state, including if an object is being focused via something
/// like a ray (or not).
/// </summary>
public class PinchStateModule
{
private const float PINCH_STRENGTH_THRESHOLD = 1.0f;
private enum PinchState
{
None = 0,
PinchDown,
PinchStay,
PinchUp
}
private PinchState _currPinchState;
private Interactable _firstFocusedInteractable;
/// <summary>
/// We want a pinch up and down gesture to be done **while** an object is focused.
/// We don't want someone to pinch, unfocus an object, then refocus before doing
/// pinch up. We also want to avoid focusing a different interactable during this process.
/// While the latter is difficult to do since a person might focus nothing before
/// focusing on another interactable, it's theoretically possible.
/// </summary>
public bool PinchUpAndDownOnFocusedObject
{
get
{
return _currPinchState == PinchState.PinchUp && _firstFocusedInteractable != null;
}
}
public bool PinchSteadyOnFocusedObject
{
get
{
return _currPinchState == PinchState.PinchStay && _firstFocusedInteractable != null;
}
}
public bool PinchDownOnFocusedObject
{
get
{
return _currPinchState == PinchState.PinchDown && _firstFocusedInteractable != null;
}
}
public PinchStateModule()
{
_currPinchState = PinchState.None;
_firstFocusedInteractable = null;
}
public void UpdateState(OVRHand hand, Interactable currFocusedInteractable)
{
float pinchStrength = hand.GetFingerPinchStrength(OVRHand.HandFinger.Index);
bool isPinching = Mathf.Abs(PINCH_STRENGTH_THRESHOLD - pinchStrength) < Mathf.Epsilon;
var oldPinchState = _currPinchState;
switch (oldPinchState)
{
case PinchState.PinchUp:
// can only be in pinch up for a single frame, so consider
// next frame carefully
if (isPinching)
{
_currPinchState = PinchState.PinchDown;
if (currFocusedInteractable != _firstFocusedInteractable)
{
_firstFocusedInteractable = null;
}
}
else
{
_currPinchState = PinchState.None;
_firstFocusedInteractable = null;
}
break;
case PinchState.PinchStay:
if (!isPinching)
{
_currPinchState = PinchState.PinchUp;
}
// if object is not focused anymore, then forget it
if (currFocusedInteractable != _firstFocusedInteractable)
{
_firstFocusedInteractable = null;
}
break;
// pinch down lasts for a max of 1 frame. either go to pinch stay or up
case PinchState.PinchDown:
_currPinchState = isPinching ? PinchState.PinchStay : PinchState.PinchUp;
// if the focused interactable changes, then the original one is now invalid
if (_firstFocusedInteractable != currFocusedInteractable)
{
_firstFocusedInteractable = null;
}
break;
default:
if (isPinching)
{
_currPinchState = PinchState.PinchDown;
// this is the interactable that must be focused through out the pinch up and down
// gesture.
_firstFocusedInteractable = currFocusedInteractable;
}
break;
}
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4a90623ee41311f42a1193b508156429
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,348 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Assertions;
namespace OculusSampleFramework
{
/// <summary>
/// Ray tool used for far-field interactions.
/// </summary>
public class RayTool : InteractableTool
{
private const float MINIMUM_RAY_CAST_DISTANCE = 0.8f;
private const float COLLIDER_RADIUS = 0.01f;
private const int NUM_MAX_PRIMARY_HITS = 10;
private const int NUM_MAX_SECONDARY_HITS = 25;
private const int NUM_COLLIDERS_TO_TEST = 20;
[SerializeField] private RayToolView _rayToolView = null;
[Range(0.0f, 45.0f)] [SerializeField] private float _coneAngleDegrees = 20.0f;
[SerializeField] private float _farFieldMaxDistance = 5f;
public override InteractableToolTags ToolTags
{
get
{
return InteractableToolTags.Ray;
}
}
private PinchStateModule _pinchStateModule = new PinchStateModule();
private Interactable _focusedInteractable;
public override ToolInputState ToolInputState
{
get
{
if (_pinchStateModule.PinchDownOnFocusedObject)
{
return ToolInputState.PrimaryInputDown;
}
if (_pinchStateModule.PinchSteadyOnFocusedObject)
{
return ToolInputState.PrimaryInputDownStay;
}
if (_pinchStateModule.PinchUpAndDownOnFocusedObject)
{
return ToolInputState.PrimaryInputUp;
}
return ToolInputState.Inactive;
}
}
public override bool IsFarFieldTool
{
get { return true; }
}
public override bool EnableState
{
get
{
return _rayToolView.EnableState;
}
set
{
_rayToolView.EnableState = value;
}
}
private Collider[] _collidersOverlapped = new Collider[NUM_COLLIDERS_TO_TEST];
private Interactable _currInteractableCastedAgainst = null;
private float _coneAngleReleaseDegrees;
private RaycastHit[] _primaryHits = new RaycastHit[NUM_MAX_PRIMARY_HITS];
private Collider[] _secondaryOverlapResults = new Collider[NUM_MAX_SECONDARY_HITS];
private bool _initialized = false;
public override void Initialize()
{
Assert.IsNotNull(_rayToolView);
InteractableToolsInputRouter.Instance.RegisterInteractableTool(this);
_rayToolView.InteractableTool = this;
_coneAngleReleaseDegrees = _coneAngleDegrees * 1.2f;
_initialized = true;
}
private void OnDestroy()
{
if (InteractableToolsInputRouter.Instance != null)
{
InteractableToolsInputRouter.Instance.UnregisterInteractableTool(this);
}
}
private void Update()
{
if (!HandsManager.Instance || !HandsManager.Instance.IsInitialized() || !_initialized)
{
return;
}
var hand = IsRightHandedTool ? HandsManager.Instance.RightHand : HandsManager.Instance.LeftHand;
var pointer = hand.PointerPose;
transform.position = pointer.position;
transform.rotation = pointer.rotation;
var prevPosition = InteractionPosition;
var currPosition = transform.position;
Velocity = (currPosition - prevPosition) / Time.deltaTime;
InteractionPosition = currPosition;
_pinchStateModule.UpdateState(hand, _focusedInteractable);
_rayToolView.ToolActivateState = _pinchStateModule.PinchSteadyOnFocusedObject ||
_pinchStateModule.PinchDownOnFocusedObject;
}
/// <summary>
/// Avoid hand collider during raycasts so move origin some distance away from where tool is.
/// </summary>
/// <returns>Proper raycast origin.</returns>
private Vector3 GetRayCastOrigin()
{
return transform.position + MINIMUM_RAY_CAST_DISTANCE * transform.forward;
}
public override List<InteractableCollisionInfo> GetNextIntersectingObjects()
{
if (!_initialized)
{
return _currentIntersectingObjects;
}
// if we already have focused on something, keep it until the angle between
// our forward direction and object vector becomes too large
if (_currInteractableCastedAgainst != null &&
HasRayReleasedInteractable(_currInteractableCastedAgainst))
{
// reset state
_currInteractableCastedAgainst = null;
}
// Find target interactable if we haven't found one before.
if (_currInteractableCastedAgainst == null)
{
_currentIntersectingObjects.Clear();
_currInteractableCastedAgainst = FindTargetInteractable();
// If we have found one, query collision zones.
if (_currInteractableCastedAgainst != null)
{
var targetHitPoint = _currInteractableCastedAgainst.transform.position;
int numHits = Physics.OverlapSphereNonAlloc(targetHitPoint, COLLIDER_RADIUS, _collidersOverlapped);
// find all colliders encountered; focus only on ones belonging to target element
for (int i = 0; i < numHits; i++)
{
Collider colliderHit = _collidersOverlapped[i];
var colliderZone = colliderHit.GetComponent<ColliderZone>();
if (colliderZone == null)
{
continue;
}
Interactable interactableComponent = colliderZone.ParentInteractable;
if (interactableComponent == null || interactableComponent
!= _currInteractableCastedAgainst)
{
continue;
}
InteractableCollisionInfo collisionInfo = new InteractableCollisionInfo(colliderZone,
colliderZone.CollisionDepth, this);
_currentIntersectingObjects.Add(collisionInfo);
}
// clear intersecting object if no collisions were found
if (_currentIntersectingObjects.Count == 0)
{
_currInteractableCastedAgainst = null;
}
}
}
return _currentIntersectingObjects;
}
private bool HasRayReleasedInteractable(Interactable focusedInteractable)
{
var ourPosition = transform.position;
var forwardDirection = transform.forward;
var hysteresisDotThreshold = Mathf.Cos(_coneAngleReleaseDegrees * Mathf.Deg2Rad);
var vectorToFocusedObject = focusedInteractable.transform.position - ourPosition;
vectorToFocusedObject.Normalize();
var hysteresisDotProduct = Vector3.Dot(vectorToFocusedObject, forwardDirection);
return hysteresisDotProduct < hysteresisDotThreshold;
}
/// <summary>
/// Find all objects from primary ray cast or if that fails, all objects in a
/// cone around main ray direction via a "secondary" cast.
/// </summary>
private Interactable FindTargetInteractable()
{
var rayOrigin = GetRayCastOrigin();
var rayDirection = transform.forward;
Interactable targetInteractable = null;
// attempt primary ray cast
targetInteractable = FindPrimaryRaycastHit(rayOrigin, rayDirection);
// if primary cast fails, try secondary cone test
if (targetInteractable == null)
{
targetInteractable = FindInteractableViaConeTest(rayOrigin, rayDirection);
}
return targetInteractable;
}
/// <summary>
/// Find first hit that is supports our tool's method of interaction.
/// </summary>
private Interactable FindPrimaryRaycastHit(Vector3 rayOrigin, Vector3 rayDirection)
{
Interactable interactableCastedAgainst = null;
// hit order not guaranteed, so find closest
int numHits = Physics.RaycastNonAlloc(new Ray(rayOrigin, rayDirection), _primaryHits, Mathf.Infinity);
float minDistance = 0.0f;
for (int hitIndex = 0; hitIndex < numHits; hitIndex++)
{
RaycastHit raycastHit = _primaryHits[hitIndex];
// continue if something occludes it and that object is not an interactable
var currentHitColliderZone = raycastHit.transform.GetComponent<ColliderZone>();
if (currentHitColliderZone == null)
{
continue;
}
// at this point we have encountered an interactable. Only consider it if
// it allows interaction with our tool. Otherwise ignore it.
Interactable currentInteractable = currentHitColliderZone.ParentInteractable;
if (currentInteractable == null || (currentInteractable.ValidToolTagsMask & (int)ToolTags) == 0)
{
continue;
}
var vectorToInteractable = currentInteractable.transform.position - rayOrigin;
var distanceToInteractable = vectorToInteractable.magnitude;
if (interactableCastedAgainst == null || distanceToInteractable < minDistance)
{
interactableCastedAgainst = currentInteractable;
minDistance = distanceToInteractable;
}
}
return interactableCastedAgainst;
}
/// <summary>
/// If primary cast fails, try secondary test to see if we can target an interactable.
/// This target has to be far enough and support our tool via appropriate
/// tags, and must be within a certain angle from our primary ray direction.
/// </summary>
/// <param name="rayOrigin">Primary ray origin.</param>
/// <param name="rayDirection">Primary ray direction.</param>
/// <returns>Interactable found, if any.</returns>
private Interactable FindInteractableViaConeTest(Vector3 rayOrigin, Vector3 rayDirection)
{
Interactable targetInteractable = null;
float minDistance = 0.0f;
float minDotProductThreshold = Mathf.Cos(_coneAngleDegrees * Mathf.Deg2Rad);
// cone extends from center line, where angle is split between top and bottom half
float halfAngle = Mathf.Deg2Rad * _coneAngleDegrees * 0.5f;
float coneRadius = Mathf.Tan(halfAngle) * _farFieldMaxDistance;
int numColliders = Physics.OverlapBoxNonAlloc(
rayOrigin + rayDirection * _farFieldMaxDistance * 0.5f, // center
new Vector3(coneRadius, coneRadius, _farFieldMaxDistance * 0.5f), //half extents
_secondaryOverlapResults, transform.rotation);
for (int i = 0; i < numColliders; i++)
{
Collider colliderHit = _secondaryOverlapResults[i];
// skip invalid colliders
var colliderZone = colliderHit.GetComponent<ColliderZone>();
if (colliderZone == null)
{
continue;
}
// skip invalid components
Interactable interactableComponent = colliderZone.ParentInteractable;
if (interactableComponent == null ||
(interactableComponent.ValidToolTagsMask & (int)ToolTags) == 0)
{
continue;
}
var vectorToInteractable = interactableComponent.transform.position - rayOrigin;
var distanceToInteractable = vectorToInteractable.magnitude;
vectorToInteractable /= distanceToInteractable;
var dotProduct = Vector3.Dot(vectorToInteractable, rayDirection);
// must be inside cone!
if (dotProduct < minDotProductThreshold)
{
continue;
}
if (targetInteractable == null || distanceToInteractable < minDistance)
{
targetInteractable = interactableComponent;
minDistance = distanceToInteractable;
}
}
return targetInteractable;
}
public override void FocusOnInteractable(Interactable focusedInteractable,
ColliderZone colliderZone)
{
_rayToolView.SetFocusedInteractable(focusedInteractable);
_focusedInteractable = focusedInteractable;
}
public override void DeFocus()
{
_rayToolView.SetFocusedInteractable(null);
_focusedInteractable = null;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: e5a3ef75653a3e84281bf84f8b8575c5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,131 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
using UnityEngine;
using UnityEngine.Assertions;
namespace OculusSampleFramework
{
/// <summary>
/// Visual portion of ray tool.
/// </summary>
public class RayToolView : MonoBehaviour, InteractableToolView
{
private const int NUM_RAY_LINE_POSITIONS = 25;
private const float DEFAULT_RAY_CAST_DISTANCE = 3.0f;
[SerializeField] private Transform _targetTransform = null;
[SerializeField] private LineRenderer _lineRenderer = null;
public bool EnableState
{
get
{
return _lineRenderer.enabled;
}
set
{
_targetTransform.gameObject.SetActive(value);
_lineRenderer.enabled = value;
}
}
private bool _toolActivateState = false;
public bool ToolActivateState
{
get { return _toolActivateState; }
set
{
_toolActivateState = value;
_lineRenderer.colorGradient = _toolActivateState ? _highLightColorGradient : _oldColorGradient;
}
}
private Transform _focusedTransform = null;
private Vector3[] linePositions = new Vector3[NUM_RAY_LINE_POSITIONS];
private Gradient _oldColorGradient, _highLightColorGradient;
private void Awake()
{
Assert.IsNotNull(_targetTransform);
Assert.IsNotNull(_lineRenderer);
_lineRenderer.positionCount = NUM_RAY_LINE_POSITIONS;
_oldColorGradient = _lineRenderer.colorGradient;
_highLightColorGradient = new Gradient();
_highLightColorGradient.SetKeys(
new GradientColorKey[] { new GradientColorKey(new Color(0.90f, 0.90f, 0.90f), 0.0f),
new GradientColorKey(new Color(0.90f, 0.90f, 0.90f), 1.0f) },
new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(1.0f, 1.0f) }
);
}
public InteractableTool InteractableTool { get; set; }
public void SetFocusedInteractable(Interactable interactable)
{
if (interactable == null)
{
_focusedTransform = null;
}
else
{
_focusedTransform = interactable.transform;
}
}
private void Update()
{
var myPosition = InteractableTool.ToolTransform.position;
var myForward = InteractableTool.ToolTransform.forward;
var targetPosition = _focusedTransform != null
? _focusedTransform.position
: myPosition + myForward * DEFAULT_RAY_CAST_DISTANCE;
var targetVector = targetPosition - myPosition;
var targetDistance = targetVector.magnitude;
var p0 = myPosition;
// make points in between based on my forward as opposed to targetvector
// this way the curve "bends" toward to target
var p1 = myPosition + myForward * targetDistance * 0.3333333f;
var p2 = myPosition + myForward * targetDistance * 0.6666667f;
var p3 = targetPosition;
for (int i = 0; i < NUM_RAY_LINE_POSITIONS; i++)
{
linePositions[i] = GetPointOnBezierCurve(p0, p1, p2, p3, i / 25.0f);
}
_lineRenderer.SetPositions(linePositions);
_targetTransform.position = targetPosition;
}
/// <summary>
/// Returns point on four-point Bezier curve.
/// </summary>
/// <param name="p0">Beginning point.</param>
/// <param name="p1">t=1/3 point.</param>
/// <param name="p2">t=2/3 point.</param>
/// <param name="p3">End point.</param>
/// <param name="t">Interpolation parameter.</param>
/// <returns>Point along Bezier curve.</returns>
public static Vector3 GetPointOnBezierCurve(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t)
{
t = Mathf.Clamp01(t);
var oneMinusT = 1f - t;
var oneMinusTSqr = oneMinusT * oneMinusT;
var tSqr = t * t;
return oneMinusT * oneMinusTSqr * p0 + 3f * oneMinusTSqr * t * p1 + 3f * oneMinusT * tSqr * p2 +
t * tSqr * p3;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a4e71869e3ccfde47a7a16e2f483b328
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -1,118 +0,0 @@
/************************************************************************************
Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
See SampleFramework license.txt for license terms. Unless required by applicable law
or agreed to in writing, the sample code is provided <20>AS IS<49> WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the license for specific
language governing permissions and limitations under the license.
************************************************************************************/
Shader "Oculus Sample/Alpha Hand Outline"
{
Properties
{
_ColorPrimary ("Color Primary", Color) = (0.396078, 0.725490, 1)
_ColorTop ("Color Top", Color) = (0.031896, 0.0343398, 0.0368894)
_ColorBottom ("Color Bottom", Color) = (0.0137021, 0.0144438, 0.0152085)
_RimFactor ("Rim Factor", Range(0.01, 1.0)) = 0.65
_FresnelPower ("Fresnel Power", Range(0.01,1.0)) = 0.16
_HandAlpha ("Hand Alpha", Range(0, 1)) = 1.0
_MinVisibleAlpha ("Minimum Visible Alpha", Range(0,1)) = 0.15
}
SubShader
{
Tags {"Queue" = "Transparent" "Render" = "Transparent" "IgnoreProjector" = "True"}
LOD 100
// Write depth values so that you see topmost layer.
Pass
{
ZWrite On
ColorMask 0
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float4 vert(float4 vertex : POSITION) : SV_POSITION
{
return UnityObjectToClipPos(vertex);
}
fixed4 frag() : SV_Target
{
return 0;
}
ENDCG
}
CGPROGRAM
#include "UnityCG.cginc"
// no deferred. support lightmaps and one light. use half vector instead of
// view vector (less accurate but faster)
#pragma surface surf BlinnPhong alpha:fade exclude_path:prepass noforwardadd halfasview nolightmap
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
float3 worldRefl;
float3 viewDir;
INTERNAL_DATA
};
#define ColorBlack half3(0, 0, 0)
#define EmissionFactor (0.95)
fixed3 _ColorPrimary;
fixed3 _ColorTop;
fixed3 _ColorBottom;
float _RimFactor;
float _FresnelPower;
float _HandAlpha;
float _MinVisibleAlpha;
float3 SafeNormalize(float3 normal) {
float magSq = dot(normal, normal);
if (magSq == 0) {
return 0;
}
return normalize(normal);
}
void surf(Input IN, inout SurfaceOutput o) {
float3 normalDirection = SafeNormalize(o.Normal);
float3 viewDir = SafeNormalize(IN.viewDir);
half viewDotNormal = saturate(dot(viewDir, normalDirection));
// the higher the rim factor, the greater the effect overall. by default,
// it's strongest near edges
half rim = pow(1.0 - viewDotNormal, 0.5) * (1.0 - _RimFactor) + _RimFactor;
rim = saturate(rim);
half3 emission = lerp(ColorBlack, _ColorPrimary, rim);
// brighten emission a bit, multiply by factor to reign it in
emission += rim * 0.5;
emission *= EmissionFactor;
// effect gets stronger toward edges. note that lerp can extrapolate! saturate first
// potentially could schlick approx, like specColor + (1-specColor)*nDotLight^5
// except here we woulduse nDotView instead of nDotLight
float fresnel = saturate(pow(1.0 - viewDotNormal, _FresnelPower));
fixed3 color = lerp(_ColorTop, _ColorBottom, fresnel);
fixed alphaValue = step(_MinVisibleAlpha, _HandAlpha) * _HandAlpha;
o.Albedo = 0;
o.Gloss = 0;
o.Specular = 0;
o.Alpha = alphaValue;
o.Emission = color * emission;
}
ENDCG
}
}

View File

@@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 8aba22c2208aff640a2fdc9a5e45a9dd
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant: