add package files
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e3b50201243972949bd077c1e0aff72c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,54 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.XR.OpenXR.Features;
|
||||
using UnityEngine;
|
||||
using UnityEngine.XR.OpenXR;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.IO;
|
||||
using VIVE.HandTracking;
|
||||
using UnityEngine.XR.OpenXR.Features;
|
||||
namespace UnityEditor.XR.OpenXR.Samples.HandTracking
|
||||
{
|
||||
[InitializeOnLoad]
|
||||
public class HandTrackingFeauterInstaller : Editor
|
||||
{
|
||||
#if !UNITY_SAMPLE_DEV
|
||||
private const string k_ScriptPath = "HandTracking Example/Editor/HandTrackingFeauterInstaller.cs";
|
||||
static HandTrackingFeauterInstaller()
|
||||
{
|
||||
FeatureHelpers.RefreshFeatures(BuildTargetGroup.Standalone);
|
||||
var feature = OpenXRSettings.Instance.GetFeature<HandTracking_OpenXR_API>();
|
||||
var HandInteractionfeature = OpenXRSettings.Instance.GetFeature<HtcViveHandInteractionInputFeature>();
|
||||
if (feature != null)
|
||||
{
|
||||
if (feature.enabled != true)
|
||||
{
|
||||
feature.enabled = true;
|
||||
}
|
||||
}
|
||||
if (HandInteractionfeature != null)
|
||||
{
|
||||
if (HandInteractionfeature.enabled != true)
|
||||
{
|
||||
HandInteractionfeature.enabled = true;
|
||||
}
|
||||
}
|
||||
Debug.Log(AssetDatabase.FindAssets(Path.GetFileNameWithoutExtension(k_ScriptPath)).Select(AssetDatabase.GUIDToAssetPath));
|
||||
var source = AssetDatabase.FindAssets(Path.GetFileNameWithoutExtension(k_ScriptPath))
|
||||
.Select(AssetDatabase.GUIDToAssetPath)
|
||||
.FirstOrDefault(r => r.Contains(k_ScriptPath));
|
||||
|
||||
if (string.IsNullOrEmpty(source))
|
||||
{
|
||||
Debug.LogError("File Not Exist");
|
||||
return;
|
||||
}
|
||||
|
||||
source = Path.GetDirectoryName(source);
|
||||
Debug.Log(source);
|
||||
AssetDatabase.DeleteAsset(Path.Combine(Path.GetDirectoryName(source), "Editor"));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 25c6b0688a353874791039a7510e9003
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"name": "HandInteractions",
|
||||
"maps": [
|
||||
{
|
||||
"name": "LeftHand",
|
||||
"id": "9ef2cbaf-c5ca-4f94-afd3-c13e92ae39b0",
|
||||
"actions": [
|
||||
{
|
||||
"name": "select",
|
||||
"type": "Value",
|
||||
"id": "9f7476ef-5e86-4fbd-be2a-d191fcd6bd90",
|
||||
"expectedControlType": "Axis",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
},
|
||||
{
|
||||
"name": "grip",
|
||||
"type": "Value",
|
||||
"id": "58e87055-a7f7-49e5-874c-ed1531b2fc73",
|
||||
"expectedControlType": "Axis",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
},
|
||||
{
|
||||
"name": "selectPose",
|
||||
"type": "Value",
|
||||
"id": "2427c326-992b-4b5e-8b32-65766a69b9f6",
|
||||
"expectedControlType": "Pose",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
},
|
||||
{
|
||||
"name": "devicePose",
|
||||
"type": "Value",
|
||||
"id": "14167057-a039-4b71-b169-ae012bc4f26b",
|
||||
"expectedControlType": "Pose",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
}
|
||||
],
|
||||
"bindings": [
|
||||
{
|
||||
"name": "",
|
||||
"id": "b403b14a-c930-45f9-9a3e-2710e4721344",
|
||||
"path": "<ViveHandInteraction>{LeftHand}/select",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "select",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"id": "ae0a8fd0-79a3-4996-8334-0c00727c214a",
|
||||
"path": "<ViveHandInteraction>{LeftHand}/grip",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "grip",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"id": "86a6d936-0c97-411d-81bd-f07526f0fd2d",
|
||||
"path": "<ViveHandInteraction>{LeftHand}/pointer",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "selectPose",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"id": "fc0059b7-df77-4d61-9aff-2ca9cd129ca0",
|
||||
"path": "<ViveHandInteraction>{LeftHand}/devicePose",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "devicePose",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RightHand",
|
||||
"id": "052ff2d7-a697-4084-a818-72ef080c524d",
|
||||
"actions": [
|
||||
{
|
||||
"name": "select",
|
||||
"type": "Value",
|
||||
"id": "9939050e-1af5-43fd-815b-92041d19b3fa",
|
||||
"expectedControlType": "Axis",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
},
|
||||
{
|
||||
"name": "grip",
|
||||
"type": "Value",
|
||||
"id": "de49cd41-9a9a-429c-9130-f794cb429550",
|
||||
"expectedControlType": "Axis",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
},
|
||||
{
|
||||
"name": "selectPose",
|
||||
"type": "Value",
|
||||
"id": "60fe8382-aa5a-4fd9-80cf-6ecc68f90863",
|
||||
"expectedControlType": "Pose",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
},
|
||||
{
|
||||
"name": "devicePose",
|
||||
"type": "Value",
|
||||
"id": "192485c2-2d24-495b-8deb-14f2e327a887",
|
||||
"expectedControlType": "Pose",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": true
|
||||
}
|
||||
],
|
||||
"bindings": [
|
||||
{
|
||||
"name": "",
|
||||
"id": "9ff68142-4e5e-4d24-aed3-a377c8b74534",
|
||||
"path": "<ViveHandInteraction>{RightHand}/select",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "select",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"id": "23ee2cda-2db6-4e45-b13a-259aabd637f1",
|
||||
"path": "<ViveHandInteraction>{RightHand}/grip",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "grip",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"id": "34315523-7e62-43c9-84fc-35cea4259fe5",
|
||||
"path": "<ViveHandInteraction>{RightHand}/pointer",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "selectPose",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"id": "4070b955-5c40-46fa-98c5-4c71f99cb6c6",
|
||||
"path": "<ViveHandInteraction>{RightHand}/devicePose",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "devicePose",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"controlSchemes": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 080a38524d6ab064e91f8ff9cd45bb9b
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
|
||||
generateWrapperCode: 0
|
||||
wrapperCodePath:
|
||||
wrapperClassName:
|
||||
wrapperCodeNamespace:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1b77d0ecc04d7584bb867772441f7c25
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,77 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Blue
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0, g: 0, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3293c07c46938149bd6b68f6f5ab4d1
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,87 @@
|
||||
%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: Default
|
||||
m_Shader: {fileID: 10760, 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_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _ColorMask: 15
|
||||
- _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
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _UVSec: 0
|
||||
- _UseUIAlphaClip: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0.098039195, g: 0.50673795, b: 0.65882355, a: 0.3137255}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _Specular: {r: 1, g: 0.4481132, b: 0.4481132, a: 0}
|
||||
m_BuildTextureStacks: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9513f1085c3b8d84ab17245d74043608
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,77 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Green
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0, g: 1, b: 0, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: be5bedb9f42770549af7600305d316fd
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,86 @@
|
||||
%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: Hand
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _ColorMask: 15
|
||||
- _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
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _UVSec: 0
|
||||
- _UseUIAlphaClip: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4637b99291c9e1d4b82124a21a34acbc
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,102 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a01667fc6435cb479a0445610133fcc
|
||||
ModelImporter:
|
||||
serializedVersion: 21100
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
motionNodeName:
|
||||
rigImportErrors:
|
||||
rigImportWarnings:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,102 @@
|
||||
fileFormatVersion: 2
|
||||
guid: afa96e79b5b79984ab74e9e1ef200d57
|
||||
ModelImporter:
|
||||
serializedVersion: 21100
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
motionNodeName:
|
||||
rigImportErrors:
|
||||
rigImportWarnings:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,77 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Red
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 0, b: 0, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 130cd327cb69f5c4ab2bcdb608fbd58c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,77 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: White
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5daffd924f4d0494c83ce461ca913878
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9ae1b41407a2d734c96ed160efbc06d2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx
LFS
Normal file
BIN
com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx
LFS
Normal file
Binary file not shown.
@@ -0,0 +1,101 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa14a214e9ffb1a42850851e0ad9db52
|
||||
ModelImporter:
|
||||
serializedVersion: 20101
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 1
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
motionNodeName:
|
||||
rigImportErrors:
|
||||
rigImportWarnings:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 3
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 0
|
||||
importLights: 0
|
||||
fileIdsGeneration: 1
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 061f4195e1dc74e4e8cf7f657203e2cd
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,541 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &7423157989283898626
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7423157989283898627}
|
||||
m_Layer: 0
|
||||
m_Name: 3DHand
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7423157989283898627
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7423157989283898626}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.015607998, y: -0.013282664, z: -0.07335153}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6957748758881164380}
|
||||
- {fileID: 6957748757999106292}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1001 &7423157989289999287
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 7423157989283898627}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0.015607998
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0.013282664
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0.07335153
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -1107956732406458091, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_Materials.Array.data[0]
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 9513f1085c3b8d84ab17245d74043608, type: 2}
|
||||
- target: {fileID: 919132149155446097, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ObjModelHandLeft_26
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
--- !u!4 &1023837832511550131 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -1643464455024064252, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &1517851468531354918 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 8220238113505965713, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &1587043492754875532 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 8143094687746776891, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &1822319482427487084 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 9101342973431810267, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2129234081217865112 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 8829542094526668335, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2402645123296224636 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 5067591772060704459, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2591330329871673071 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 4968064022332693848, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2877863616158530621 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 4680475222046787466, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &3886056980242657624 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -3248688629254337809, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &3923137174990642617 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 5869758926971069966, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4176209744140450023 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6841172885717877584, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4227981583638641158 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -2474565242041466447, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4315334464559039638 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6694459045059854113, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4518116779036985979 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6464857450473386444, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4655153904485345964 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -6368592266354454245, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &5633725182928596562 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 2966563632883308005, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &5751558732041407126 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 2942538225671237921, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &5847509038455621992 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 3900922814075712223, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &6366441487635361211 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -4657146349703457268, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &6673696290973803778 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 4294711893310725813, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &6957748758881164380 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7007883643249497524 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8771503716632908285, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7113238653529847310 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 410696192037670329, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7125949936140118471 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 423390500807168624, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7402668014366828115 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -9097317933092135452, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &7765669265330833126 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &7423157989402685039
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7765669265330833126}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c19189c6a6028a74ab475048ebd154c8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
nodes:
|
||||
- {fileID: 5847509038455621992}
|
||||
- {fileID: 1517851468531354918}
|
||||
- {fileID: 4227981583638641158}
|
||||
- {fileID: 2591330329871673071}
|
||||
- {fileID: 7007883643249497524}
|
||||
- {fileID: 2129234081217865112}
|
||||
- {fileID: 9190276837785830995}
|
||||
- {fileID: 4518116779036985979}
|
||||
- {fileID: 8951308887720329310}
|
||||
- {fileID: 7113238653529847310}
|
||||
- {fileID: 7402668014366828115}
|
||||
- {fileID: 4655153904485345964}
|
||||
- {fileID: 7929466683079983724}
|
||||
- {fileID: 4176209744140450023}
|
||||
- {fileID: 5751558732041407126}
|
||||
- {fileID: 1822319482427487084}
|
||||
- {fileID: 6366441487635361211}
|
||||
- {fileID: 2877863616158530621}
|
||||
- {fileID: 3886056980242657624}
|
||||
- {fileID: 1023837832511550131}
|
||||
- {fileID: 4315334464559039638}
|
||||
- {fileID: 3923137174990642617}
|
||||
- {fileID: 7125949936140118471}
|
||||
- {fileID: 5633725182928596562}
|
||||
- {fileID: 2402645123296224636}
|
||||
- {fileID: 1587043492754875532}
|
||||
isLeft: 1
|
||||
allowUntrackedPose: 1
|
||||
Hand: {fileID: 6673696290973803778}
|
||||
MotionType: 2147483647
|
||||
--- !u!4 &7929466683079983724 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8570555479703635493, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &8951308887720329310 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -7260599894360605719, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &9190276837785830995 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -7453960083844481564, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157989289999287}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1001 &7423157990146891551
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 7423157989283898627}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0.015607998
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0.013282664
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0.07335153
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ObjModelHandRight_26
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7227333814368855109, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
propertyPath: m_Materials.Array.data[0]
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 9513f1085c3b8d84ab17245d74043608, type: 2}
|
||||
m_RemovedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
--- !u!4 &1023837833795835419 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -1643464455024064252, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &1517851467915504014 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 8220238113505965713, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &1587043491765714980 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 8143094687746776891, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &1822319483682314180 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 9101342973431810267, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2129234081841414448 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 8829542094526668335, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2402645124683137492 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 5067591772060704459, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2591330330460226119 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 4968064022332693848, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &2877863616882874517 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 4680475222046787466, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &3886056978715186672 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -3248688629254337809, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &3923137175738595601 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 5869758926971069966, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4176209743526845519 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6841172885717877584, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4227981582215536302 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -2474565242041466447, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4315334463274852414 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6694459045059854113, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4518116778316803795 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6464857450473386444, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &4655153903869513220 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -6368592266354454245, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &5402561904108644855 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 3313976086554670824, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &5633725184492227322 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 2966563632883308005, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &5751558732801289790 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 2942538225671237921, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &5847509039486725568 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 3900922814075712223, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &6366441486206486803 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -4657146349703457268, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &6957748757999106292 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7007883642229584156 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8771503716632908285, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7113238654822912678 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 410696192037670329, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7125949935415725423 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 423390500807168624, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7402668015651537659 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -9097317933092135452, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &7765669264174080590 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &7423157990786583661
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7765669264174080590}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c19189c6a6028a74ab475048ebd154c8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
nodes:
|
||||
- {fileID: 5847509039486725568}
|
||||
- {fileID: 1517851467915504014}
|
||||
- {fileID: 4227981582215536302}
|
||||
- {fileID: 2591330330460226119}
|
||||
- {fileID: 7007883642229584156}
|
||||
- {fileID: 2129234081841414448}
|
||||
- {fileID: 9190276836226818811}
|
||||
- {fileID: 4518116778316803795}
|
||||
- {fileID: 8951308886156731638}
|
||||
- {fileID: 7113238654822912678}
|
||||
- {fileID: 7402668015651537659}
|
||||
- {fileID: 4655153903869513220}
|
||||
- {fileID: 7929466684471142084}
|
||||
- {fileID: 4176209743526845519}
|
||||
- {fileID: 5751558732801289790}
|
||||
- {fileID: 1822319483682314180}
|
||||
- {fileID: 6366441486206486803}
|
||||
- {fileID: 2877863616882874517}
|
||||
- {fileID: 3886056978715186672}
|
||||
- {fileID: 1023837833795835419}
|
||||
- {fileID: 4315334463274852414}
|
||||
- {fileID: 3923137175738595601}
|
||||
- {fileID: 7125949935415725423}
|
||||
- {fileID: 5633725184492227322}
|
||||
- {fileID: 2402645124683137492}
|
||||
- {fileID: 1587043491765714980}
|
||||
isLeft: 0
|
||||
allowUntrackedPose: 1
|
||||
Hand: {fileID: 5402561904108644855}
|
||||
MotionType: 2147483647
|
||||
--- !u!4 &7929466684471142084 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8570555479703635493, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &8951308886156731638 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -7260599894360605719, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &9190276836226818811 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -7453960083844481564, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
|
||||
m_PrefabInstance: {fileID: 7423157990146891551}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9717c3a8fd1feb14a866c93d1d5cecc0
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,665 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2910298151769479246
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8964967576903015174}
|
||||
- component: {fileID: 8595007410106638205}
|
||||
- component: {fileID: 3652344773145504640}
|
||||
m_Layer: 0
|
||||
m_Name: Z-Positive
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8964967576903015174
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2910298151769479246}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0.11}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4346727374823547005}
|
||||
m_RootOrder: 6
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &8595007410106638205
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2910298151769479246}
|
||||
m_Mesh: {fileID: 3613567641014311022, guid: fa14a214e9ffb1a42850851e0ad9db52, type: 3}
|
||||
--- !u!23 &3652344773145504640
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2910298151769479246}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: d3293c07c46938149bd6b68f6f5ab4d1, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &4346727372943234171
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4346727372943234170}
|
||||
- component: {fileID: 4346727372943234167}
|
||||
- component: {fileID: 4346727372943234164}
|
||||
- component: {fileID: 4346727372943234165}
|
||||
m_Layer: 0
|
||||
m_Name: XAxis
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4346727372943234170
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372943234171}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.005, y: 0.1, z: 0.005}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4346727374823547005}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
|
||||
--- !u!33 &4346727372943234167
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372943234171}
|
||||
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &4346727372943234164
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372943234171}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 130cd327cb69f5c4ab2bcdb608fbd58c, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!136 &4346727372943234165
|
||||
CapsuleCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372943234171}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
m_Radius: 0.5000001
|
||||
m_Height: 2
|
||||
m_Direction: 1
|
||||
m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
|
||||
--- !u!1 &4346727372952809594
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4346727372952809589}
|
||||
- component: {fileID: 4346727372952809590}
|
||||
- component: {fileID: 4346727372952809591}
|
||||
- component: {fileID: 4346727372952809588}
|
||||
m_Layer: 0
|
||||
m_Name: YAxis
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4346727372952809589
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372952809594}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.005, y: 0.1, z: 0.005}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4346727374823547005}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &4346727372952809590
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372952809594}
|
||||
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &4346727372952809591
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372952809594}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: be5bedb9f42770549af7600305d316fd, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!136 &4346727372952809588
|
||||
CapsuleCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727372952809594}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
m_Radius: 0.5000001
|
||||
m_Height: 2
|
||||
m_Direction: 1
|
||||
m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
|
||||
--- !u!1 &4346727373368105286
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4346727373368105281}
|
||||
- component: {fileID: 4346727373368105282}
|
||||
- component: {fileID: 4346727373368105283}
|
||||
- component: {fileID: 4346727373368105280}
|
||||
m_Layer: 0
|
||||
m_Name: Cube
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4346727373368105281
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373368105286}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.02, y: 0.02, z: 0.02}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4346727374823547005}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &4346727373368105282
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373368105286}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &4346727373368105283
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373368105286}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!65 &4346727373368105280
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373368105286}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &4346727373925079743
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4346727373925079742}
|
||||
- component: {fileID: 4346727373925079739}
|
||||
- component: {fileID: 4346727373925079736}
|
||||
- component: {fileID: 4346727373925079737}
|
||||
m_Layer: 0
|
||||
m_Name: ZAxis
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4346727373925079742
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373925079743}
|
||||
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.005, y: 0.1, z: 0.005}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4346727374823547005}
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
|
||||
--- !u!33 &4346727373925079739
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373925079743}
|
||||
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &4346727373925079736
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373925079743}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: d3293c07c46938149bd6b68f6f5ab4d1, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!136 &4346727373925079737
|
||||
CapsuleCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727373925079743}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
m_Radius: 0.5000001
|
||||
m_Height: 2
|
||||
m_Direction: 1
|
||||
m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
|
||||
--- !u!1 &4346727374823546882
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4346727374823547005}
|
||||
m_Layer: 0
|
||||
m_Name: PoseMarker
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4346727374823547005
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4346727374823546882}
|
||||
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: 4346727373368105281}
|
||||
- {fileID: 4346727372943234170}
|
||||
- {fileID: 4346727372952809589}
|
||||
- {fileID: 4346727373925079742}
|
||||
- {fileID: 602845843975818768}
|
||||
- {fileID: 5641498033562402263}
|
||||
- {fileID: 8964967576903015174}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &4640940940180935358
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5641498033562402263}
|
||||
- component: {fileID: 3201029004716767610}
|
||||
- component: {fileID: 2164005335530074864}
|
||||
m_Layer: 0
|
||||
m_Name: Y-Positive
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5641498033562402263
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4640940940180935358}
|
||||
m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068}
|
||||
m_LocalPosition: {x: 0, y: 0.11, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4346727374823547005}
|
||||
m_RootOrder: 5
|
||||
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
|
||||
--- !u!33 &3201029004716767610
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4640940940180935358}
|
||||
m_Mesh: {fileID: 3613567641014311022, guid: fa14a214e9ffb1a42850851e0ad9db52, type: 3}
|
||||
--- !u!23 &2164005335530074864
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4640940940180935358}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: be5bedb9f42770549af7600305d316fd, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &6813102403969732157
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 602845843975818768}
|
||||
- component: {fileID: 6251018130860582685}
|
||||
- component: {fileID: 227567837646502533}
|
||||
m_Layer: 0
|
||||
m_Name: X-Positive
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &602845843975818768
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6813102403969732157}
|
||||
m_LocalRotation: {x: -0.5, y: 0.5, z: -0.5, w: 0.5}
|
||||
m_LocalPosition: {x: 0.11, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4346727374823547005}
|
||||
m_RootOrder: 4
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 90, z: -90}
|
||||
--- !u!33 &6251018130860582685
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6813102403969732157}
|
||||
m_Mesh: {fileID: 3613567641014311022, guid: fa14a214e9ffb1a42850851e0ad9db52, type: 3}
|
||||
--- !u!23 &227567837646502533
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6813102403969732157}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 130cd327cb69f5c4ab2bcdb608fbd58c, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 71d5e99cf346f174db130c7585b6a3f8
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,135 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1139942279006104812
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1139942279006104815}
|
||||
- component: {fileID: 1139942279006104814}
|
||||
m_Layer: 0
|
||||
m_Name: left
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1139942279006104815
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1139942279006104812}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1139942279644765727}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1139942279006104814
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1139942279006104812}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8c57cc3ae07bcce42ba395c288cba794, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
isLeft: 1
|
||||
allowUntrackedPose: 1
|
||||
pointColor: {r: 0, g: 1, b: 0, a: 1}
|
||||
linkColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
material: {fileID: 2100000, guid: 4637b99291c9e1d4b82124a21a34acbc, type: 2}
|
||||
MotionType: 2
|
||||
--- !u!1 &1139942279644765724
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1139942279644765727}
|
||||
m_Layer: 0
|
||||
m_Name: SkeletonHand
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!4 &1139942279644765727
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1139942279644765724}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.015607998, y: -0.013282664, z: -0.07335153}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1139942279006104815}
|
||||
- {fileID: 1139942279895550675}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1139942279895550672
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1139942279895550675}
|
||||
- component: {fileID: 1139942279895550674}
|
||||
m_Layer: 0
|
||||
m_Name: right
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1139942279895550675
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1139942279895550672}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1139942279644765727}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1139942279895550674
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1139942279895550672}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8c57cc3ae07bcce42ba395c288cba794, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
isLeft: 0
|
||||
allowUntrackedPose: 1
|
||||
pointColor: {r: 0, g: 1, b: 0, a: 1}
|
||||
linkColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
material: {fileID: 2100000, guid: 4637b99291c9e1d4b82124a21a34acbc, type: 2}
|
||||
MotionType: 2
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 26eb62328811e3b41bb1c5e4046cf8bc
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,26 @@
|
||||
# VIVE OpenXR Hand Tracking Unity Feature
|
||||
|
||||
To help software developers create an application for locating hand joints with the OpenXR hand tracking extension [XR_EXT_hand_tracking](https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_hand_tracking).
|
||||
|
||||
## Load sample code
|
||||
**Window** > **Package Manager** > **VIVE OpenXR Plugin - Windows** > **Samples** > Click to import **HandTracking Example**
|
||||
|
||||
## Play the sample scene
|
||||
1. **Edit** > **Project Settings** > **XR Plug-in Management** > Select **OpenXR** , click Exclamation mark next to it then choose **Fix All**.
|
||||
2. **Edit** > **Project Settings** > **XR Plug-in Management** > **OpenXR** > Add Interaction profiles for your device.
|
||||
3. **Edit** > **Project Settings** > **XR Plug-in Management** > **OpenXR** > Select **Hand Tracking** under **VIVE OpenXR** Feature Groups.
|
||||
4. In the Unity Project window, select the sample scene file in **Assets** > **Samples** > **VIVE OpenXR Plugin - Windows** > **1.0.12** > **HandTracking Example** > **Scenes** > **HandTrackingScene.unity** then click Play.
|
||||
|
||||
## Use VIVE OpenXR Hand Tracking Unity Feature to draw skeleton hand.
|
||||
1. Import VIVE OpenXR Plugin - Windows
|
||||
2. Add Hand gameobject to the Unity scene
|
||||
- Refer to functions **StartFrameWork** and **StopFrameWork** in **HandManager.cs** for creating and releasing handle for hand.
|
||||
- Refer to the function **GetJointLocation** in **HandManager.cs** for getting the information to locate hand joints.
|
||||
- Drag "SkeletonHand" prefab into scene hierarchy or Create an empty object and attach **RenderHand.cs**.
|
||||
|
||||
## Use VIVE OpenXR Hand Tracking Unity Feature to draw 3D hand.
|
||||
1. Import VIVE OpenXR Plugin - Windows
|
||||
2. Add Hand gameobject to the Unity scene
|
||||
- Refer to functions **StartFrameWork** and **StopFrameWork** in **HandManager.cs** for creating and releasing handle for hand.
|
||||
- Refer to the function **GetJointLocation** in **HandManager.cs** for getting the information to locate hand joints.
|
||||
- Drag "3DHand" prefab into scene hierarchy or attach **RenderModel.cs** to "ObjModelHandLeft_26.fbx" and "ObjModelHandRight_26.fbx".
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d56a6be4ede9fe40b2e62763d7a1b52
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ea6bc8c74d1f7f1479b372c0c13537ca
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d77374400df33e4396eb7e610d731d7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 686c57b9d62a14c47b8353ea34d46bb3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,24 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace UnityEngine.XR.OpenXR.Samples.ControllerSample
|
||||
{
|
||||
public class ActionAssetEnabler : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
InputActionAsset m_ActionAsset;
|
||||
public InputActionAsset actionAsset
|
||||
{
|
||||
get => m_ActionAsset;
|
||||
set => m_ActionAsset = value;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if(m_ActionAsset != null)
|
||||
{
|
||||
m_ActionAsset.Enable();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3e6db3fe75b0e5d48ba6decfa5d009fc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,83 @@
|
||||
using System;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine;
|
||||
|
||||
public class Controller : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private InputActionReference m_ActionReferenceTrigger;
|
||||
public InputActionReference actionReferenceTrigger { get => m_ActionReferenceTrigger ; set => m_ActionReferenceTrigger=value; }
|
||||
|
||||
public TextMesh pinchValue;
|
||||
//[SerializeField]
|
||||
//private InputActionReference m_ActionReferenceGrip;
|
||||
//public InputActionReference actionReferenceGrip { get => m_ActionReferenceGrip ; set => m_ActionReferenceGrip=value; }
|
||||
|
||||
Type lastActiveType_Trigger = null;
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
pinchValue.text = "0";
|
||||
if ( actionReferenceTrigger != null && actionReferenceTrigger.action != null
|
||||
&& actionReferenceTrigger.action.enabled && actionReferenceTrigger.action.controls.Count > 0
|
||||
/*&& actionReferenceGrip != null && actionReferenceGrip.action != null
|
||||
&& actionReferenceGrip.action.enabled && actionReferenceGrip.action.controls.Count > 0*/)
|
||||
{
|
||||
// Grip
|
||||
//Type typeToUse_Grip = null;
|
||||
//if(actionReferenceGrip.action.activeControl != null)
|
||||
//{
|
||||
// typeToUse_Grip = actionReferenceGrip.action.activeControl.valueType;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// typeToUse_Grip = lastActiveType_Grip;
|
||||
//}
|
||||
|
||||
//if(typeToUse_Grip == typeof(float))
|
||||
//{
|
||||
// lastActiveType_Grip = typeof(float);
|
||||
// float value = actionReferenceGrip.action.ReadValue<float>();
|
||||
// if(value > 0.5)
|
||||
// {
|
||||
// if(!isSwitchedMeshPrefab)
|
||||
// {
|
||||
// isSwitchedMeshPrefab = true;
|
||||
// Debug.Log("Press Button B.");
|
||||
// //if(MeshSubSystem != null)
|
||||
// //{
|
||||
// // MeshSubSystem.GetComponent<UnityEngine.XR.OpenXR.Samples.MeshingFeature.MeshingBehaviour>().SwitchMeshPrefab();
|
||||
// //}
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// isSwitchedMeshPrefab = false;
|
||||
// }
|
||||
//}
|
||||
|
||||
// Trigger
|
||||
Type typeToUse_Trigger = null;
|
||||
if(actionReferenceTrigger.action.activeControl != null)
|
||||
{
|
||||
typeToUse_Trigger = actionReferenceTrigger.action.activeControl.valueType;
|
||||
}
|
||||
else
|
||||
{
|
||||
typeToUse_Trigger = lastActiveType_Trigger;
|
||||
}
|
||||
|
||||
if(typeToUse_Trigger == typeof(float))
|
||||
{
|
||||
lastActiveType_Trigger = typeof(float);
|
||||
float value = actionReferenceTrigger.action.ReadValue<float>();
|
||||
pinchValue.text = value.ToString();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 393fd0a40b85a9a4b981076df200a2f7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,290 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.XR.OpenXR;
|
||||
using VIVE.HandTracking;
|
||||
[Obsolete("Use HandManager instead")]
|
||||
public static class FrameWork
|
||||
{
|
||||
private class HandData
|
||||
{
|
||||
public bool isStarted;
|
||||
public XrHandEXT hand;
|
||||
public ulong trackerHandle;
|
||||
public bool isActive;
|
||||
public int jointUpdatedFrame = -1;
|
||||
public XrHandJointLocationEXT[] joints = new XrHandJointLocationEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
|
||||
public XrHandJointVelocityEXT[] velocities = new XrHandJointVelocityEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
|
||||
|
||||
public bool isCreated { get { return trackerHandle != default; } }
|
||||
|
||||
public void ClearJoints()
|
||||
{
|
||||
Array.Clear(joints, 0, joints.Length);
|
||||
Array.Clear(velocities, 0, velocities.Length);
|
||||
}
|
||||
}
|
||||
|
||||
private static HandTracking_OpenXR_API feature;
|
||||
private static bool isInitialized;
|
||||
private static bool isSystemSupported;
|
||||
private static ulong refSpace;
|
||||
private static HandData leftHandData = new HandData() { hand = XrHandEXT.XR_HAND_LEFT_EXT };
|
||||
private static HandData rightHandData = new HandData() { hand = XrHandEXT.XR_HAND_RIGHT_EXT };
|
||||
|
||||
private static bool isRefSpaceCreated { get { return refSpace != default; } }
|
||||
|
||||
private static HandData GetHandData(bool isLeft)
|
||||
{
|
||||
return isLeft ? leftHandData : rightHandData;
|
||||
}
|
||||
|
||||
public static bool Initialize()
|
||||
{
|
||||
if (!isInitialized)
|
||||
{
|
||||
if (feature == null)
|
||||
{
|
||||
feature = OpenXRSettings.Instance.GetFeature<HandTracking_OpenXR_API>();
|
||||
|
||||
if (feature != null)
|
||||
{
|
||||
// FIXME: Assume featuer instance won't be destroied and created to a new one
|
||||
feature.onSessionCreate += OnFeatureSessionCreate;
|
||||
feature.onSessionDestroy += OnFeatureSessionDestroy;
|
||||
feature.onSystemChange += OnFeatureSystemChange;
|
||||
}
|
||||
}
|
||||
|
||||
if (feature != null && feature.IsEnabledAndInitialized)
|
||||
{
|
||||
UpdateSystemSupported();
|
||||
isInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
return isInitialized;
|
||||
}
|
||||
|
||||
private static void OnFeatureSessionCreate(ulong xrSession)
|
||||
{
|
||||
TryCreateHandTracker(leftHandData);
|
||||
TryCreateHandTracker(rightHandData);
|
||||
}
|
||||
|
||||
private static void OnFeatureSessionDestroy(ulong xrSession)
|
||||
{
|
||||
DestroyHandTracker(leftHandData);
|
||||
DestroyHandTracker(rightHandData);
|
||||
DestroyRefSpace();
|
||||
}
|
||||
|
||||
private static void OnFeatureSystemChange(ulong systemId)
|
||||
{
|
||||
UpdateSystemSupported();
|
||||
}
|
||||
|
||||
private static void UpdateSystemSupported()
|
||||
{
|
||||
if (feature == null || !feature.IsEnabledAndInitialized)
|
||||
{
|
||||
isSystemSupported = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
isSystemSupported = feature.SystemSupportsHandTracking(out var result);
|
||||
|
||||
if (!isSystemSupported)
|
||||
{
|
||||
if (result != XrResult.XR_SUCCESS)
|
||||
{
|
||||
Debug.LogWarning("Fail SystemSupportsHandTracking: " + result);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("Hand tracking not supported by the system");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TryCreateHandTracker(HandData handData)
|
||||
{
|
||||
if (!handData.isStarted) { return false; }
|
||||
if (!Initialize()) { return false; }
|
||||
if (!isSystemSupported) { return false; }
|
||||
if (!feature.IsSessionCreated) { return false; }
|
||||
|
||||
if (!handData.isCreated)
|
||||
{
|
||||
if (!feature.TryCreateHandTracker(handData.hand, out handData.trackerHandle, out var result))
|
||||
{
|
||||
handData.trackerHandle = default;
|
||||
Debug.LogWarning("Fail CreateHandTracker: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
return handData.isCreated;
|
||||
}
|
||||
|
||||
private static void DestroyHandTracker(HandData handData)
|
||||
{
|
||||
if (!handData.isCreated) { return; }
|
||||
if (!Initialize()) { return; }
|
||||
|
||||
feature.TryDestroyHandTracker(handData.trackerHandle, out _);
|
||||
handData.trackerHandle = default;
|
||||
handData.ClearJoints();
|
||||
}
|
||||
|
||||
private static bool InitializeRefSpace()
|
||||
{
|
||||
if (!Initialize()) { return false; }
|
||||
if (!isSystemSupported) { return false; }
|
||||
if (!feature.IsSessionCreated) { return false; }
|
||||
|
||||
if (!isRefSpaceCreated)
|
||||
{
|
||||
const XrReferenceSpaceType preferSpaceType = XrReferenceSpaceType.XR_REFERENCE_SPACE_TYPE_STAGE;
|
||||
XrReferenceSpaceType spaceType;
|
||||
if (!feature.TryGetSupportedReferenceSpaceType(preferSpaceType, out spaceType, out var result))
|
||||
{
|
||||
Debug.LogWarning("Fail GetSupportedReferenceSpaceType: " + result);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!feature.TryCreateReferenceSpace(
|
||||
spaceType,
|
||||
new XrVector3f(0f, 0f, 0f),
|
||||
new XrQuaternionf(0f, 0f, 0f, 1f),
|
||||
out refSpace,
|
||||
out result))
|
||||
{
|
||||
refSpace = default;
|
||||
Debug.LogWarning("Fail CreateReferenceSpace: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isRefSpaceCreated;
|
||||
}
|
||||
|
||||
private static void DestroyRefSpace()
|
||||
{
|
||||
if (!isRefSpaceCreated) { return; }
|
||||
|
||||
if (Initialize())
|
||||
{
|
||||
if (!feature.TryDestroyReferenceSpace(refSpace, out var result))
|
||||
{
|
||||
Debug.LogWarning("Fail DestroyReferenceSpace: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
refSpace = default;
|
||||
}
|
||||
|
||||
public static void StartFrameWork(bool isLeft)
|
||||
{
|
||||
var handData = GetHandData(isLeft);
|
||||
handData.isStarted = true;
|
||||
|
||||
TryCreateHandTracker(handData);
|
||||
}
|
||||
|
||||
public static void StopFrameWork(bool isLeft)
|
||||
{
|
||||
var handData = GetHandData(isLeft);
|
||||
handData.isStarted = false;
|
||||
|
||||
DestroyHandTracker(handData);
|
||||
}
|
||||
|
||||
public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, bool forceUpdate = false)
|
||||
{
|
||||
var handData = GetHandData(isleft);
|
||||
if (handData.isCreated)
|
||||
{
|
||||
if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
|
||||
{
|
||||
handData.jointUpdatedFrame = Time.frameCount;
|
||||
|
||||
if (InitializeRefSpace())
|
||||
{
|
||||
if (!feature.TryLocateHandJoints(
|
||||
handData.trackerHandle,
|
||||
refSpace,
|
||||
out handData.isActive,
|
||||
handData.joints,
|
||||
out var result))
|
||||
{
|
||||
handData.isActive = false;
|
||||
Debug.LogWarning("Fail LocateHandJoints: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
joints = handData.joints;
|
||||
return handData.isActive;
|
||||
}
|
||||
|
||||
public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints,ref XrHandJointsMotionRangeEXT type, bool forceUpdate = false)
|
||||
{
|
||||
var handData = GetHandData(isleft);
|
||||
if (handData.isCreated)
|
||||
{
|
||||
if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
|
||||
{
|
||||
handData.jointUpdatedFrame = Time.frameCount;
|
||||
|
||||
if (InitializeRefSpace())
|
||||
{
|
||||
if (!feature.TryLocateHandJoints(
|
||||
handData.trackerHandle,
|
||||
refSpace,
|
||||
ref type,
|
||||
out handData.isActive,
|
||||
handData.joints,
|
||||
out var result))
|
||||
{
|
||||
handData.isActive = false;
|
||||
Debug.LogWarning("Fail LocateHandJoints: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
joints = handData.joints;
|
||||
return handData.isActive;
|
||||
}
|
||||
|
||||
public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, out XrHandJointVelocityEXT[] velocities, bool forceUpdate = false)
|
||||
{
|
||||
var handData = GetHandData(isleft);
|
||||
if (handData.isCreated)
|
||||
{
|
||||
if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
|
||||
{
|
||||
handData.jointUpdatedFrame = Time.frameCount;
|
||||
|
||||
if (InitializeRefSpace())
|
||||
{
|
||||
if (!feature.TryLocateHandJoints(
|
||||
handData.trackerHandle,
|
||||
refSpace,
|
||||
out handData.isActive,
|
||||
handData.joints,
|
||||
handData.velocities,
|
||||
out var result))
|
||||
{
|
||||
handData.isActive = false;
|
||||
Debug.LogWarning("Fail LocateHandJoints: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
joints = handData.joints;
|
||||
velocities = handData.velocities;
|
||||
return handData.isActive;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89e4cae3bc180f14c906224f93d20210
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,152 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
|
||||
// version 1.4.1
|
||||
// from Assets/Samples/VIVE OpenXR Plugin - Windows/1.0.12/HandTracking Example/Scripts/InputMaster.inputactions
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.InputSystem.Utilities;
|
||||
|
||||
public partial class @InputMaster : IInputActionCollection2, IDisposable
|
||||
{
|
||||
public InputActionAsset asset { get; }
|
||||
public @InputMaster()
|
||||
{
|
||||
asset = InputActionAsset.FromJson(@"{
|
||||
""name"": ""InputMaster"",
|
||||
""maps"": [
|
||||
{
|
||||
""name"": ""Keyboard"",
|
||||
""id"": ""94ee31f8-c9ac-4138-b5b9-ad5ecec1870d"",
|
||||
""actions"": [
|
||||
{
|
||||
""name"": ""SpacePress"",
|
||||
""type"": ""Button"",
|
||||
""id"": ""2a246a3d-969f-4d95-8e12-9e0000e5b19c"",
|
||||
""expectedControlType"": ""Button"",
|
||||
""processors"": """",
|
||||
""interactions"": """",
|
||||
""initialStateCheck"": false
|
||||
}
|
||||
],
|
||||
""bindings"": [
|
||||
{
|
||||
""name"": """",
|
||||
""id"": ""d6ea233e-905c-4913-a644-8a84098fea9f"",
|
||||
""path"": ""<Keyboard>/space"",
|
||||
""interactions"": """",
|
||||
""processors"": """",
|
||||
""groups"": """",
|
||||
""action"": ""SpacePress"",
|
||||
""isComposite"": false,
|
||||
""isPartOfComposite"": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
""controlSchemes"": []
|
||||
}");
|
||||
// Keyboard
|
||||
m_Keyboard = asset.FindActionMap("Keyboard", throwIfNotFound: true);
|
||||
m_Keyboard_SpacePress = m_Keyboard.FindAction("SpacePress", throwIfNotFound: true);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
UnityEngine.Object.Destroy(asset);
|
||||
}
|
||||
|
||||
public InputBinding? bindingMask
|
||||
{
|
||||
get => asset.bindingMask;
|
||||
set => asset.bindingMask = value;
|
||||
}
|
||||
|
||||
public ReadOnlyArray<InputDevice>? devices
|
||||
{
|
||||
get => asset.devices;
|
||||
set => asset.devices = value;
|
||||
}
|
||||
|
||||
public ReadOnlyArray<InputControlScheme> controlSchemes => asset.controlSchemes;
|
||||
|
||||
public bool Contains(InputAction action)
|
||||
{
|
||||
return asset.Contains(action);
|
||||
}
|
||||
|
||||
public IEnumerator<InputAction> GetEnumerator()
|
||||
{
|
||||
return asset.GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
asset.Enable();
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
asset.Disable();
|
||||
}
|
||||
public IEnumerable<InputBinding> bindings => asset.bindings;
|
||||
|
||||
public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false)
|
||||
{
|
||||
return asset.FindAction(actionNameOrId, throwIfNotFound);
|
||||
}
|
||||
public int FindBinding(InputBinding bindingMask, out InputAction action)
|
||||
{
|
||||
return asset.FindBinding(bindingMask, out action);
|
||||
}
|
||||
|
||||
// Keyboard
|
||||
private readonly InputActionMap m_Keyboard;
|
||||
private IKeyboardActions m_KeyboardActionsCallbackInterface;
|
||||
private readonly InputAction m_Keyboard_SpacePress;
|
||||
public struct KeyboardActions
|
||||
{
|
||||
private @InputMaster m_Wrapper;
|
||||
public KeyboardActions(@InputMaster wrapper) { m_Wrapper = wrapper; }
|
||||
public InputAction @SpacePress => m_Wrapper.m_Keyboard_SpacePress;
|
||||
public InputActionMap Get() { return m_Wrapper.m_Keyboard; }
|
||||
public void Enable() { Get().Enable(); }
|
||||
public void Disable() { Get().Disable(); }
|
||||
public bool enabled => Get().enabled;
|
||||
public static implicit operator InputActionMap(KeyboardActions set) { return set.Get(); }
|
||||
public void SetCallbacks(IKeyboardActions instance)
|
||||
{
|
||||
if (m_Wrapper.m_KeyboardActionsCallbackInterface != null)
|
||||
{
|
||||
@SpacePress.started -= m_Wrapper.m_KeyboardActionsCallbackInterface.OnSpacePress;
|
||||
@SpacePress.performed -= m_Wrapper.m_KeyboardActionsCallbackInterface.OnSpacePress;
|
||||
@SpacePress.canceled -= m_Wrapper.m_KeyboardActionsCallbackInterface.OnSpacePress;
|
||||
}
|
||||
m_Wrapper.m_KeyboardActionsCallbackInterface = instance;
|
||||
if (instance != null)
|
||||
{
|
||||
@SpacePress.started += instance.OnSpacePress;
|
||||
@SpacePress.performed += instance.OnSpacePress;
|
||||
@SpacePress.canceled += instance.OnSpacePress;
|
||||
}
|
||||
}
|
||||
}
|
||||
public KeyboardActions @Keyboard => new KeyboardActions(this);
|
||||
public interface IKeyboardActions
|
||||
{
|
||||
void OnSpacePress(InputAction.CallbackContext context);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00c2bfc723925654087046942f18ab09
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "InputMaster",
|
||||
"maps": [
|
||||
{
|
||||
"name": "Keyboard",
|
||||
"id": "94ee31f8-c9ac-4138-b5b9-ad5ecec1870d",
|
||||
"actions": [
|
||||
{
|
||||
"name": "SpacePress",
|
||||
"type": "Button",
|
||||
"id": "2a246a3d-969f-4d95-8e12-9e0000e5b19c",
|
||||
"expectedControlType": "Button",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": false
|
||||
}
|
||||
],
|
||||
"bindings": [
|
||||
{
|
||||
"name": "",
|
||||
"id": "d6ea233e-905c-4913-a644-8a84098fea9f",
|
||||
"path": "<Keyboard>/space",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "SpacePress",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"controlSchemes": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d8c42cba5f401b94db94490595c0f4df
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
|
||||
generateWrapperCode: 1
|
||||
wrapperCodePath:
|
||||
wrapperClassName:
|
||||
wrapperCodeNamespace:
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
public class LineRender : MonoBehaviour
|
||||
{
|
||||
[Tooltip("Root object of Line mesh")]
|
||||
public GameObject Line = null;
|
||||
[SerializeField] private LineRenderer GazeRayRenderer;
|
||||
|
||||
[SerializeField]
|
||||
private InputActionReference m_ActionReferencePose;
|
||||
public InputActionReference actionReferencePose { get => m_ActionReferencePose; set => m_ActionReferencePose = value; }
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
Vector3 DirectionCombinedLocal;
|
||||
if (actionReferencePose != null && actionReferencePose.action != null
|
||||
&& actionReferencePose.action.enabled && actionReferencePose.action.controls.Count > 0)
|
||||
{
|
||||
//GazeRayRenderer.SetActive(true);
|
||||
UnityEngine.XR.OpenXR.Input.Pose poseval = actionReferencePose.action.ReadValue<UnityEngine.XR.OpenXR.Input.Pose>();
|
||||
Quaternion gazeRotation = poseval.rotation;
|
||||
Quaternion orientation = new Quaternion(
|
||||
1 * (gazeRotation.x),
|
||||
1 * (gazeRotation.y),
|
||||
1 * gazeRotation.z,
|
||||
1 * gazeRotation.w);
|
||||
DirectionCombinedLocal = orientation * Vector3.forward;
|
||||
Vector3 DirectionCombined = Camera.main.transform.TransformDirection(DirectionCombinedLocal);
|
||||
GazeRayRenderer.SetPosition(0, poseval.position);
|
||||
GazeRayRenderer.SetPosition(1, poseval.position + DirectionCombinedLocal * 4);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1f20223b10be10d478250a03bb7ae27f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,28 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace VIVE.HandTracking.Sample
|
||||
{
|
||||
public class ReadOnlyAttribute : PropertyAttribute
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
|
||||
public class ReadOnlyDrawer : PropertyDrawer
|
||||
{
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
return EditorGUI.GetPropertyHeight(property, label, true);
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
GUI.enabled = false;
|
||||
EditorGUI.PropertyField(position, property, label, true);
|
||||
GUI.enabled = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a85838490cd239847a9f06ea17789601
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,190 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using VIVE.HandTracking;
|
||||
|
||||
namespace VIVE.HandTracking.Sample
|
||||
{
|
||||
public class RenderHand : MonoBehaviour
|
||||
{
|
||||
// Links between keypoints, 2*i & 2*i+1 forms a link.
|
||||
// keypoint index: 1: palm, 2-5: thumb, 6-10: index, 11-15: middle, 16-20: ring, 21-25: pinky
|
||||
// fingers are counted from bottom to top
|
||||
private static int[] Connections = new int[] {
|
||||
1, 2, 1, 6, 1, 11, 1, 16, 1, 21, // palm and finger starts
|
||||
2, 6, 6, 11, 11, 16, 16, 21, // finger starts
|
||||
2, 3, 3, 4, 4, 5, // thumb
|
||||
6, 7, 7, 8, 8, 9, 9, 10, // index
|
||||
11, 12, 12, 13, 13, 14, 14, 15, // middle
|
||||
16, 17, 17, 18, 18, 19, 19, 20, // ring
|
||||
21, 22, 22, 23, 23, 24, 24, 25 // pinky
|
||||
};
|
||||
[Tooltip("Draw left hand if true, right hand otherwise")]
|
||||
public bool isLeft = false;
|
||||
[Tooltip("Use inferred or last-known posed when hand loses tracking if true.")]
|
||||
public bool allowUntrackedPose = false;
|
||||
[Tooltip("Default color of hand points")]
|
||||
public Color pointColor = Color.green;
|
||||
[Tooltip("Default color of links between keypoints in skeleton mode")]
|
||||
public Color linkColor = Color.white;
|
||||
[Tooltip("Material for hand points and links")]
|
||||
[SerializeField]
|
||||
private Material material = null;
|
||||
private XrHandJointsMotionRangeEXT MotionType = XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT;
|
||||
[Tooltip("Type of hand joints range of motion")]
|
||||
[ReadOnly] public string HandJointsMotionRange;
|
||||
|
||||
private List<GameObject> points = new List<GameObject>();
|
||||
// list of links created (only for skeleton)
|
||||
private List<GameObject> links = new List<GameObject>();
|
||||
// Start is called before the first frame update
|
||||
private XrHandJointLocationEXT[] HandjointLocations = new
|
||||
XrHandJointLocationEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
|
||||
// shared material for all point objects
|
||||
private Material pointMat = null;
|
||||
// shared material for all link objects
|
||||
private Material linkMat = null;
|
||||
private void Start()
|
||||
{
|
||||
HandManager.StartFrameWork(isLeft);
|
||||
pointMat = new Material(material);
|
||||
if (isLeft)
|
||||
{
|
||||
pointColor = Color.blue;
|
||||
}
|
||||
else
|
||||
{
|
||||
pointColor = Color.red;
|
||||
}
|
||||
pointMat.color = pointColor;
|
||||
linkMat = new Material(material);
|
||||
linkMat.color = linkColor;
|
||||
|
||||
for (int i = 0; i < (int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT; i++)
|
||||
{
|
||||
var go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
||||
go.name = ((XrHandJointEXT)i).ToString();
|
||||
go.transform.parent = transform;
|
||||
go.transform.localScale = Vector3.one * 0.012f;
|
||||
go.SetActive(false);
|
||||
points.Add(go);
|
||||
go.transform.position = new Vector3((float)i * 0.1f, 0, 0);
|
||||
// handle layer
|
||||
go.layer = gameObject.layer;
|
||||
// handle material
|
||||
go.GetComponent<Renderer>().sharedMaterial = pointMat;
|
||||
}
|
||||
|
||||
// create game objects for links between keypoints, only used in skeleton mode
|
||||
for (int i = 0; i < Connections.Length; i += 2)
|
||||
{
|
||||
var go = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
|
||||
go.name = "link" + i;
|
||||
go.transform.parent = transform;
|
||||
go.transform.localScale = Vector3.one * 0.005f;
|
||||
go.SetActive(false);
|
||||
links.Add(go);
|
||||
// handle layer
|
||||
go.layer = gameObject.layer;
|
||||
// handle material
|
||||
go.GetComponent<Renderer>().sharedMaterial = linkMat;
|
||||
}
|
||||
}
|
||||
// Update is called once per frame
|
||||
private void Update()
|
||||
{
|
||||
if (HandManager.GetJointLocation(isLeft, out HandjointLocations, ref MotionType))
|
||||
{
|
||||
UpdateJointLocation();
|
||||
switch (MotionType)
|
||||
{
|
||||
case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT:
|
||||
HandJointsMotionRange = "UNOBSTRUCTED";
|
||||
break;
|
||||
case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT:
|
||||
HandJointsMotionRange = "CONTROLLER";
|
||||
break;
|
||||
default:
|
||||
HandJointsMotionRange = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < points.Count; i++)
|
||||
{
|
||||
var go = points[i];
|
||||
go.SetActive(false);
|
||||
}
|
||||
|
||||
for (int i = 0; i < links.Count; i++)
|
||||
{
|
||||
var link = links[i];
|
||||
link.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateJointLocation()
|
||||
{
|
||||
for (int i = 0; i < points.Count; i++)
|
||||
{
|
||||
var go = points[i];
|
||||
XrQuaternionf orientation;
|
||||
XrVector3f position;
|
||||
float radius = HandjointLocations[i].radius;
|
||||
if (allowUntrackedPose) //Use inferred or last-known pose when lost tracking
|
||||
{
|
||||
orientation = HandjointLocations[i].pose.orientation;
|
||||
position = HandjointLocations[i].pose.position;
|
||||
go.transform.localPosition = new Vector3(position.x, position.y, -position.z);
|
||||
go.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((HandjointLocations[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT) != 0)
|
||||
{
|
||||
orientation = HandjointLocations[i].pose.orientation;
|
||||
}
|
||||
if ((HandjointLocations[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_POSITION_TRACKED_BIT) != 0)
|
||||
{
|
||||
position = HandjointLocations[i].pose.position;
|
||||
go.transform.localPosition = new Vector3(position.x, position.y, -position.z);
|
||||
go.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
UnityEngine.Debug.Log("Lost tracking");
|
||||
go.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < links.Count; i++)
|
||||
{
|
||||
var link = links[i];
|
||||
var pose1 = points[Connections[i * 2]].transform.position;
|
||||
var pose2 = points[Connections[i * 2 + 1]].transform.position;
|
||||
|
||||
// calculate link position and rotation based on points on both end
|
||||
link.SetActive(true);
|
||||
link.transform.position = (pose1 + pose2) / 2;
|
||||
var direction = pose2 - pose1;
|
||||
link.transform.rotation = Quaternion.FromToRotation(Vector3.up, direction);
|
||||
link.transform.localScale = new Vector3(0.006f, direction.magnitude / 2f - 0.0051f, 0.006f);
|
||||
}
|
||||
|
||||
}
|
||||
private void OnDestroy()
|
||||
{
|
||||
HandManager.StopFrameWork(isLeft);
|
||||
UnityEngine.Debug.Log("OnDestroy");
|
||||
}
|
||||
|
||||
//public void setHandVisible(bool isVisible)
|
||||
//{
|
||||
// Hand.SetActive(isVisible);
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8c57cc3ae07bcce42ba395c288cba794
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,78 @@
|
||||
using UnityEngine;
|
||||
using VIVE.HandTracking;
|
||||
|
||||
namespace VIVE.HandTracking.Sample
|
||||
{
|
||||
public class RenderModel : MonoBehaviour
|
||||
{
|
||||
private readonly Quaternion zBackModelRotFix = Quaternion.AngleAxis(180f, Vector3.up);
|
||||
|
||||
public Transform[] nodes = new Transform[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
|
||||
[Tooltip("Draw left hand if true, right hand otherwise")]
|
||||
public bool isLeft = false;
|
||||
[Tooltip("Use inferred or last-known posed when hand loses tracking if true.")]
|
||||
public bool allowUntrackedPose = false;
|
||||
[Tooltip("Root object of skinned mesh")]
|
||||
public GameObject Hand = null;
|
||||
private XrHandJointsMotionRangeEXT MotionType = XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT;
|
||||
[Tooltip("Type of hand joints range of motion")]
|
||||
[ReadOnly]public string HandJointsMotionRange;
|
||||
|
||||
|
||||
// Start is called before the first frame update
|
||||
private void Start()
|
||||
{
|
||||
HandManager.StartFrameWork(isLeft);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
private void Update()
|
||||
{
|
||||
if (HandManager.GetJointLocation(isLeft, out var joints, ref MotionType))
|
||||
{
|
||||
setHandVisible(true);
|
||||
|
||||
for (int i = (int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT; i < (int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT; i++)
|
||||
{
|
||||
var posValid = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_POSITION_VALID_BIT) != 0;
|
||||
var posTracked = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_POSITION_TRACKED_BIT) != 0;
|
||||
var rotValid = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) != 0;
|
||||
var rotTracked = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT) != 0;
|
||||
|
||||
var pos = new Vector3(joints[i].pose.position.x, joints[i].pose.position.y, -joints[i].pose.position.z);
|
||||
var rot = new Quaternion(-joints[i].pose.orientation.x, -joints[i].pose.orientation.y, joints[i].pose.orientation.z, joints[i].pose.orientation.w) * zBackModelRotFix;
|
||||
|
||||
if (posValid && (allowUntrackedPose || posTracked)) { nodes[i].position = transform.TransformPoint(pos); }
|
||||
if (rotValid && (allowUntrackedPose || rotTracked)) { nodes[i].rotation = transform.rotation * rot; }
|
||||
}
|
||||
switch (MotionType)
|
||||
{
|
||||
case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT:
|
||||
HandJointsMotionRange = "UNOBSTRUCTED";
|
||||
break;
|
||||
case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT:
|
||||
HandJointsMotionRange = "CONTROLLER";
|
||||
break;
|
||||
default:
|
||||
HandJointsMotionRange = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setHandVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
HandManager.StopFrameWork(isLeft);
|
||||
}
|
||||
|
||||
public void setHandVisible(bool isVisible)
|
||||
{
|
||||
Hand.SetActive(isVisible);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c19189c6a6028a74ab475048ebd154c8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,46 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace VIVE.HandTracking.Sample
|
||||
{
|
||||
public class SwitchHand : MonoBehaviour
|
||||
{
|
||||
public InputMaster inputMaster;
|
||||
public GameObject hand3D;
|
||||
public GameObject handSkeleton;
|
||||
private bool isSwitch = false;
|
||||
private void Awake()
|
||||
{
|
||||
inputMaster = new InputMaster();
|
||||
inputMaster.Enable();
|
||||
}
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
float ispressed = inputMaster.Keyboard.SpacePress.ReadValue<float>();
|
||||
if (ispressed > 0.5)
|
||||
{
|
||||
if(!isSwitch)
|
||||
{
|
||||
UnityEngine.Debug.Log("press space");
|
||||
hand3D.SetActive(!hand3D.activeSelf);
|
||||
handSkeleton.SetActive(!handSkeleton.activeSelf);
|
||||
isSwitch = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
isSwitch = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2642121393e03fd46ba257307ca9cb51
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
com.htc.upm.vive.openxr/OpenXRHandTracking/Script.meta
Normal file
8
com.htc.upm.vive.openxr/OpenXRHandTracking/Script.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 98067af793989634da2aed490cf3f25b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
293
com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs
Normal file
293
com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs
Normal file
@@ -0,0 +1,293 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.XR.OpenXR;
|
||||
|
||||
namespace VIVE.HandTracking
|
||||
{
|
||||
public static class HandManager
|
||||
{
|
||||
private class HandData
|
||||
{
|
||||
public bool isStarted;
|
||||
public XrHandEXT hand;
|
||||
public ulong trackerHandle;
|
||||
public bool isActive;
|
||||
public int jointUpdatedFrame = -1;
|
||||
public XrHandJointLocationEXT[] joints = new XrHandJointLocationEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
|
||||
public XrHandJointVelocityEXT[] velocities = new XrHandJointVelocityEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
|
||||
|
||||
public bool isCreated { get { return trackerHandle != default; } }
|
||||
|
||||
public void ClearJoints()
|
||||
{
|
||||
Array.Clear(joints, 0, joints.Length);
|
||||
Array.Clear(velocities, 0, velocities.Length);
|
||||
}
|
||||
}
|
||||
|
||||
private static HandTracking_OpenXR_API feature;
|
||||
private static bool isInitialized;
|
||||
private static bool isSystemSupported;
|
||||
private static ulong refSpace;
|
||||
private static HandData leftHandData = new HandData() { hand = XrHandEXT.XR_HAND_LEFT_EXT };
|
||||
private static HandData rightHandData = new HandData() { hand = XrHandEXT.XR_HAND_RIGHT_EXT };
|
||||
|
||||
private static bool isRefSpaceCreated { get { return refSpace != default; } }
|
||||
|
||||
private static HandData GetHandData(bool isLeft)
|
||||
{
|
||||
return isLeft ? leftHandData : rightHandData;
|
||||
}
|
||||
|
||||
public static bool Initialize()
|
||||
{
|
||||
if (!isInitialized)
|
||||
{
|
||||
if (feature == null)
|
||||
{
|
||||
feature = OpenXRSettings.Instance.GetFeature<HandTracking_OpenXR_API>();
|
||||
|
||||
if (feature != null)
|
||||
{
|
||||
// FIXME: Assume featuer instance won't be destroied and created to a new one
|
||||
feature.onSessionCreate += OnFeatureSessionCreate;
|
||||
feature.onSessionDestroy += OnFeatureSessionDestroy;
|
||||
feature.onSystemChange += OnFeatureSystemChange;
|
||||
}
|
||||
}
|
||||
|
||||
if (feature != null && feature.IsEnabledAndInitialized)
|
||||
{
|
||||
UpdateSystemSupported();
|
||||
isInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
return isInitialized;
|
||||
}
|
||||
|
||||
private static void OnFeatureSessionCreate(ulong xrSession)
|
||||
{
|
||||
TryCreateHandTracker(leftHandData);
|
||||
TryCreateHandTracker(rightHandData);
|
||||
}
|
||||
|
||||
private static void OnFeatureSessionDestroy(ulong xrSession)
|
||||
{
|
||||
DestroyHandTracker(leftHandData);
|
||||
DestroyHandTracker(rightHandData);
|
||||
DestroyRefSpace();
|
||||
}
|
||||
|
||||
private static void OnFeatureSystemChange(ulong systemId)
|
||||
{
|
||||
UpdateSystemSupported();
|
||||
}
|
||||
|
||||
private static void UpdateSystemSupported()
|
||||
{
|
||||
if (feature == null || !feature.IsEnabledAndInitialized)
|
||||
{
|
||||
isSystemSupported = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
isSystemSupported = feature.SystemSupportsHandTracking(out var result);
|
||||
|
||||
if (!isSystemSupported)
|
||||
{
|
||||
if (result != XrResult.XR_SUCCESS)
|
||||
{
|
||||
Debug.LogWarning("Fail SystemSupportsHandTracking: " + result);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("Hand tracking not supported by the system");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TryCreateHandTracker(HandData handData)
|
||||
{
|
||||
if (!handData.isStarted) { return false; }
|
||||
if (!Initialize()) { return false; }
|
||||
if (!isSystemSupported) { return false; }
|
||||
if (!feature.IsSessionCreated) { return false; }
|
||||
|
||||
if (!handData.isCreated)
|
||||
{
|
||||
if (!feature.TryCreateHandTracker(handData.hand, out handData.trackerHandle, out var result))
|
||||
{
|
||||
handData.trackerHandle = default;
|
||||
Debug.LogWarning("Fail CreateHandTracker: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
return handData.isCreated;
|
||||
}
|
||||
|
||||
private static void DestroyHandTracker(HandData handData)
|
||||
{
|
||||
if (!handData.isCreated) { return; }
|
||||
if (!Initialize()) { return; }
|
||||
|
||||
feature.TryDestroyHandTracker(handData.trackerHandle, out _);
|
||||
handData.trackerHandle = default;
|
||||
handData.ClearJoints();
|
||||
}
|
||||
|
||||
private static bool InitializeRefSpace()
|
||||
{
|
||||
if (!Initialize()) { return false; }
|
||||
if (!isSystemSupported) { return false; }
|
||||
if (!feature.IsSessionCreated) { return false; }
|
||||
|
||||
if (!isRefSpaceCreated)
|
||||
{
|
||||
const XrReferenceSpaceType preferSpaceType = XrReferenceSpaceType.XR_REFERENCE_SPACE_TYPE_STAGE;
|
||||
XrReferenceSpaceType spaceType;
|
||||
if (!feature.TryGetSupportedReferenceSpaceType(preferSpaceType, out spaceType, out var result))
|
||||
{
|
||||
Debug.LogWarning("Fail GetSupportedReferenceSpaceType: " + result);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!feature.TryCreateReferenceSpace(
|
||||
spaceType,
|
||||
new XrVector3f(0f, 0f, 0f),
|
||||
new XrQuaternionf(0f, 0f, 0f, 1f),
|
||||
out refSpace,
|
||||
out result))
|
||||
{
|
||||
refSpace = default;
|
||||
Debug.LogWarning("Fail CreateReferenceSpace: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isRefSpaceCreated;
|
||||
}
|
||||
|
||||
private static void DestroyRefSpace()
|
||||
{
|
||||
if (!isRefSpaceCreated) { return; }
|
||||
|
||||
if (Initialize())
|
||||
{
|
||||
if (!feature.TryDestroyReferenceSpace(refSpace, out var result))
|
||||
{
|
||||
Debug.LogWarning("Fail DestroyReferenceSpace: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
refSpace = default;
|
||||
}
|
||||
|
||||
public static void StartFrameWork(bool isLeft)
|
||||
{
|
||||
var handData = GetHandData(isLeft);
|
||||
handData.isStarted = true;
|
||||
|
||||
TryCreateHandTracker(handData);
|
||||
}
|
||||
|
||||
public static void StopFrameWork(bool isLeft)
|
||||
{
|
||||
var handData = GetHandData(isLeft);
|
||||
handData.isStarted = false;
|
||||
|
||||
DestroyHandTracker(handData);
|
||||
}
|
||||
|
||||
public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, bool forceUpdate = false)
|
||||
{
|
||||
var handData = GetHandData(isleft);
|
||||
if (handData.isCreated)
|
||||
{
|
||||
if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
|
||||
{
|
||||
handData.jointUpdatedFrame = Time.frameCount;
|
||||
|
||||
if (InitializeRefSpace())
|
||||
{
|
||||
if (!feature.TryLocateHandJoints(
|
||||
handData.trackerHandle,
|
||||
refSpace,
|
||||
out handData.isActive,
|
||||
handData.joints,
|
||||
out var result))
|
||||
{
|
||||
handData.isActive = false;
|
||||
Debug.LogWarning("Fail LocateHandJoints: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
joints = handData.joints;
|
||||
return handData.isActive;
|
||||
}
|
||||
|
||||
public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, ref XrHandJointsMotionRangeEXT type, bool forceUpdate = false)
|
||||
{
|
||||
var handData = GetHandData(isleft);
|
||||
if (handData.isCreated)
|
||||
{
|
||||
if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
|
||||
{
|
||||
handData.jointUpdatedFrame = Time.frameCount;
|
||||
|
||||
if (InitializeRefSpace())
|
||||
{
|
||||
if (!feature.TryLocateHandJoints(
|
||||
handData.trackerHandle,
|
||||
refSpace,
|
||||
ref type,
|
||||
out handData.isActive,
|
||||
handData.joints,
|
||||
out var result))
|
||||
{
|
||||
handData.isActive = false;
|
||||
Debug.LogWarning("Fail LocateHandJoints: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
joints = handData.joints;
|
||||
return handData.isActive;
|
||||
}
|
||||
|
||||
public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, out XrHandJointVelocityEXT[] velocities, bool forceUpdate = false)
|
||||
{
|
||||
var handData = GetHandData(isleft);
|
||||
if (handData.isCreated)
|
||||
{
|
||||
if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
|
||||
{
|
||||
handData.jointUpdatedFrame = Time.frameCount;
|
||||
|
||||
if (InitializeRefSpace())
|
||||
{
|
||||
if (!feature.TryLocateHandJoints(
|
||||
handData.trackerHandle,
|
||||
refSpace,
|
||||
out handData.isActive,
|
||||
handData.joints,
|
||||
handData.velocities,
|
||||
out var result))
|
||||
{
|
||||
handData.isActive = false;
|
||||
Debug.LogWarning("Fail LocateHandJoints: " + result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
joints = handData.joints;
|
||||
velocities = handData.velocities;
|
||||
return handData.isActive;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ffbd7154b240117469bbc995d51d58a1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,429 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEditor;
|
||||
using UnityEngine.XR.OpenXR.Features;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor.XR.OpenXR.Features;
|
||||
#endif
|
||||
|
||||
namespace VIVE
|
||||
{
|
||||
namespace HandTracking
|
||||
{
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[OpenXRFeature(UiName = "Hand Tracking",
|
||||
BuildTargetGroups = new[] { BuildTargetGroup.Standalone },
|
||||
Company = "HTC",
|
||||
Desc = "Hand Tracking OpenXR Feature",
|
||||
DocumentationLink = "https://developer.vive.com/resources/openxr/openxr-pcvr/tutorials/unity/how-integrate-hand-tracking-data-your-hand-model/",
|
||||
OpenxrExtensionStrings = "XR_EXT_hand_tracking",
|
||||
Version = "0.0.1",
|
||||
FeatureId = featureId)]
|
||||
#endif
|
||||
public class HandTracking_OpenXR_API : OpenXRFeature
|
||||
{
|
||||
/// <summary>
|
||||
/// The feature id string. This is used to give the feature a well known id for reference.
|
||||
/// </summary>
|
||||
public const string featureId = "com.company.openxr.handtracking.feature";
|
||||
private IntPtr oldxrGetInstanceProcAddr;
|
||||
private IntPtr oldWaitFrame;
|
||||
private ulong m_xrInstance;
|
||||
private ulong m_xrSession;
|
||||
private ulong m_systemId;
|
||||
private XrFrameWaitInfo m_frameWaitInfo;
|
||||
private XrFrameState m_frameState;
|
||||
|
||||
[Obsolete] public ulong m_space;
|
||||
[Obsolete] public XrSystemProperties systemProperties;
|
||||
[Obsolete] public ulong m_leftHandle;
|
||||
[Obsolete] public ulong m_rightHandle;
|
||||
|
||||
public bool IsInitialized { get { return m_xrGetSystemProperties != null; } }
|
||||
public bool IsEnabledAndInitialized { get { return enabled && IsInitialized; } }
|
||||
public bool IsSessionCreated { get { return XrSession != default; } }
|
||||
public ulong XrInstance { get { return m_xrInstance; } }
|
||||
public ulong XrSession { get { return m_xrSession; } }
|
||||
public ulong SystemId { get { return m_systemId; } }
|
||||
|
||||
public event Action<ulong> onSessionCreate;
|
||||
public event Action<ulong> onSessionDestroy;
|
||||
public event Action<ulong> onSystemChange;
|
||||
protected override IntPtr HookGetInstanceProcAddr(IntPtr func)
|
||||
{
|
||||
UnityEngine.Debug.Log("EXT: registering our own xrGetInstanceProcAddr");
|
||||
oldxrGetInstanceProcAddr = func;
|
||||
m_intercept_xrWaitFrame_xrGetInstanceProcAddr = intercept_xrWaitFrame_xrGetInstanceProcAddr;
|
||||
return Marshal.GetFunctionPointerForDelegate(m_intercept_xrWaitFrame_xrGetInstanceProcAddr);
|
||||
}
|
||||
|
||||
|
||||
private int intercept_xrWaitFrame_xrGetInstanceProcAddr(ulong instance, string name, out IntPtr function)
|
||||
{
|
||||
if (oldxrGetInstanceProcAddr == null || oldxrGetInstanceProcAddr == IntPtr.Zero)
|
||||
{
|
||||
UnityEngine.Debug.LogError("oldxrGetInstanceProcAddr is null");
|
||||
function = IntPtr.Zero;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get delegate of old xrGetInstanceProcAddr.
|
||||
var xrGetProc = Marshal.GetDelegateForFunctionPointer<xrGetInstanceProcDelegate>(oldxrGetInstanceProcAddr);
|
||||
|
||||
int result = xrGetProc(instance, name,out function);
|
||||
if(name == "xrWaitFrame")
|
||||
{
|
||||
oldWaitFrame = function;
|
||||
m_intercept_xrWaitFrame = intercepted_xrWaitFrame;
|
||||
function = Marshal.GetFunctionPointerForDelegate(m_intercept_xrWaitFrame); ;
|
||||
UnityEngine.Debug.Log("Getting xrWaitFrame func");
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
private int intercepted_xrWaitFrame(ulong session,ref XrFrameWaitInfo frameWaitInfo, ref XrFrameState frameState)
|
||||
{
|
||||
// Get delegate of old xrWaitFrame.
|
||||
var xrWaitFrame = Marshal.GetDelegateForFunctionPointer<xrWaitFrameDelegate>(oldWaitFrame);
|
||||
int res = xrWaitFrame(session, ref frameWaitInfo, ref frameState);
|
||||
m_frameWaitInfo = frameWaitInfo;
|
||||
m_frameState = frameState;
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnInstanceCreate(ulong xrInstance)
|
||||
{
|
||||
UnityEngine.Debug.Log($"OnInstanceCreate({xrInstance:X})");
|
||||
m_xrInstance = xrInstance;
|
||||
return GetXrFunctionDelegates(xrInstance);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnInstanceDestroy(ulong xrInstance)
|
||||
{
|
||||
UnityEngine.Debug.Log($"OnInstanceDestroy({xrInstance:X})");
|
||||
m_xrInstance = default;
|
||||
//ClearXrFunctionDelegates();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnSessionCreate(ulong xrSession)
|
||||
{
|
||||
UnityEngine.Debug.Log($"OnSessionCreate({xrSession:X})");
|
||||
m_xrSession = xrSession;
|
||||
|
||||
try { onSessionCreate?.Invoke(xrSession); }
|
||||
catch (Exception e) { UnityEngine.Debug.LogError(e); }
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnSystemChange(ulong xrSystem)
|
||||
{
|
||||
UnityEngine.Debug.Log($"OnSystemChange({xrSystem:X})");
|
||||
m_systemId = xrSystem;
|
||||
|
||||
try { onSystemChange?.Invoke(xrSystem); }
|
||||
catch (Exception e) { UnityEngine.Debug.LogError(e); }
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnSessionDestroy(ulong xrSession)
|
||||
{
|
||||
UnityEngine.Debug.Log($"OnSessionDestroy({xrSession:X})");
|
||||
m_xrSession = default;
|
||||
|
||||
try { onSessionDestroy?.Invoke(xrSession); }
|
||||
catch (Exception e) { UnityEngine.Debug.LogError(e); }
|
||||
}
|
||||
|
||||
/// <summary>Return true if the result equals zero. </summary>
|
||||
private bool GetXrFunctionDelegates(ulong xrInstance)
|
||||
{
|
||||
if (xrGetInstanceProcAddr == null || xrGetInstanceProcAddr == IntPtr.Zero)
|
||||
{
|
||||
UnityEngine.Debug.LogError("xrGetInstanceProcAddr is null");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get delegate of xrGetInstanceProcAddr.
|
||||
var xrGetProc = Marshal.GetDelegateForFunctionPointer<xrGetInstanceProcDelegate>(xrGetInstanceProcAddr);
|
||||
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrGetSystemProperties", ref m_xrGetSystemProperties)) { return false; }
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrEnumerateReferenceSpaces", ref m_xrEnumerateReferenceSpaces)) { return false; }
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrEnumerateReferenceSpaces", ref m_xrEnumerateReferenceSpaces2)) { return false; }
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrCreateReferenceSpace", ref m_xrCreateReferenceSpace)) { return false; }
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrDestroySpace", ref m_xrDestroySpace)) { return false; }
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrCreateHandTrackerEXT", ref m_xrCreateHandTrackerEXT)) { return false; }
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrDestroyHandTrackerEXT", ref m_xrDestroyHandTrackerEXT)) { return false; }
|
||||
if (!MarshelFunc(xrInstance, xrGetProc, "xrLocateHandJointsEXT", ref m_xrLocateHandJointsEXT)) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
private void ClearXrFunctionDelegates()
|
||||
{
|
||||
m_xrGetSystemProperties = null;
|
||||
m_xrEnumerateReferenceSpaces = null;
|
||||
m_xrEnumerateReferenceSpaces2 = null;
|
||||
m_xrCreateReferenceSpace = null;
|
||||
m_xrDestroySpace = null;
|
||||
m_xrCreateHandTrackerEXT = null;
|
||||
m_xrDestroyHandTrackerEXT = null;
|
||||
m_xrLocateHandJointsEXT = null;
|
||||
}
|
||||
|
||||
private static bool MarshelFunc<T>(ulong instance, xrGetInstanceProcDelegate instanceProc, string funcName, ref T func, bool verbose = true)
|
||||
where T : Delegate
|
||||
{
|
||||
if (instanceProc(instance, funcName, out var fp) != 0)
|
||||
{
|
||||
if (verbose)
|
||||
{
|
||||
UnityEngine.Debug.LogError("Fail getting function " + funcName);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
func = Marshal.GetDelegateForFunctionPointer<T>(fp);
|
||||
return true;
|
||||
}
|
||||
|
||||
private xrGetInstanceProcDelegate m_intercept_xrWaitFrame_xrGetInstanceProcAddr;
|
||||
|
||||
private delegate int xrGetSystemPropertiesDelegate(ulong instance, ulong systemId, ref XrSystemProperties properties);
|
||||
private xrGetSystemPropertiesDelegate m_xrGetSystemProperties;
|
||||
public int xrGetSystemProperties(ref XrSystemProperties properties) =>
|
||||
m_xrGetSystemProperties(XrInstance, SystemId, ref properties);
|
||||
public int xrGetSystemProperties(ulong instance, ulong systemId, ref XrSystemProperties properties) =>
|
||||
m_xrGetSystemProperties(instance, systemId, ref properties);
|
||||
|
||||
private delegate int xrWaitFrameDelegate(ulong session,ref XrFrameWaitInfo frameWaitInfo, ref XrFrameState frameState);
|
||||
private xrWaitFrameDelegate m_intercept_xrWaitFrame;
|
||||
#region space
|
||||
private delegate int xrEnumerateReferenceSpacesDelegate(ulong session, int spaceCapacityInput, out int spaceCountOutput, out XrReferenceSpaceType spaces);
|
||||
private xrEnumerateReferenceSpacesDelegate m_xrEnumerateReferenceSpaces;
|
||||
public int xrEnumerateReferenceSpaces(int spaceCapacityInput, out int spaceCountOutput, out XrReferenceSpaceType spaces) =>
|
||||
m_xrEnumerateReferenceSpaces(XrSession, spaceCapacityInput, out spaceCountOutput, out spaces);
|
||||
|
||||
private delegate int xrEnumerateReferenceSpacesDelegate2(ulong session, int spaceCapacityInput, out int spaceCountOutput, IntPtr spaces);
|
||||
private xrEnumerateReferenceSpacesDelegate2 m_xrEnumerateReferenceSpaces2;
|
||||
public int xrEnumerateReferenceSpaces(ulong session, int spaceCapacityInput, out int spaceCountOutput, IntPtr spaces) =>
|
||||
m_xrEnumerateReferenceSpaces2(session, spaceCapacityInput, out spaceCountOutput, spaces);
|
||||
|
||||
private delegate int xrCreateReferenceSpaceDelegate(ulong session, ref XrReferenceSpaceCreateInfo createInfo, out ulong space);
|
||||
private xrCreateReferenceSpaceDelegate m_xrCreateReferenceSpace;
|
||||
public int xrCreateReferenceSpace(ref XrReferenceSpaceCreateInfo createInfo, out ulong space) =>
|
||||
m_xrCreateReferenceSpace(XrSession, ref createInfo, out space);
|
||||
public int xrCreateReferenceSpace(ulong session, ref XrReferenceSpaceCreateInfo createInfo, out ulong space) =>
|
||||
m_xrCreateReferenceSpace(session, ref createInfo, out space);
|
||||
|
||||
private delegate int xrDestroySpaceDelegate(ulong space);
|
||||
private xrDestroySpaceDelegate m_xrDestroySpace;
|
||||
public int xrDestroySpace(ulong space) =>
|
||||
m_xrDestroySpace(space);
|
||||
#endregion
|
||||
|
||||
private delegate int xrCreateHandTrackerEXTDelegate(ulong session, XrHandTrackerCreateInfoEXT createInfo, out ulong handTracker);
|
||||
private xrCreateHandTrackerEXTDelegate m_xrCreateHandTrackerEXT;
|
||||
public int xrCreateHandTrackerEXT(XrHandTrackerCreateInfoEXT createInfo, out ulong handle) =>
|
||||
m_xrCreateHandTrackerEXT(XrSession, createInfo, out handle);
|
||||
public int xrCreateHandTrackerEXT(ulong session, XrHandTrackerCreateInfoEXT createInfo, out ulong handle) =>
|
||||
m_xrCreateHandTrackerEXT(session, createInfo, out handle);
|
||||
|
||||
private delegate int xrDestroyHandTrackerEXTDelegate(ulong handTracker);
|
||||
private xrDestroyHandTrackerEXTDelegate m_xrDestroyHandTrackerEXT;
|
||||
public int xrDestroyHandTrackerEXT(ulong handle) =>
|
||||
m_xrDestroyHandTrackerEXT(handle);
|
||||
|
||||
private delegate int xrLocateHandJointsEXTDelegate(ulong handTracker,ref XrHandJointsLocateInfoEXT locateInfo, ref XrHandJointLocationsEXT locations);
|
||||
private xrLocateHandJointsEXTDelegate m_xrLocateHandJointsEXT;
|
||||
public int xrLocateHandJointsEXT(ulong handTracker,ref XrHandJointsLocateInfoEXT locateInfo, ref XrHandJointLocationsEXT locations) =>
|
||||
m_xrLocateHandJointsEXT(handTracker,ref locateInfo, ref locations);
|
||||
|
||||
public unsafe bool SystemSupportsHandTracking(out XrResult result)
|
||||
{
|
||||
var handTrackingSystemProp = new XrSystemHandTrackingPropertiesEXT()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT,
|
||||
next = IntPtr.Zero,
|
||||
};
|
||||
|
||||
var systemProp = new XrSystemProperties()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_SYSTEM_PROPERTIES,
|
||||
next = (IntPtr)(&handTrackingSystemProp),
|
||||
};
|
||||
|
||||
result = (XrResult)xrGetSystemProperties(XrInstance, SystemId, ref systemProp);
|
||||
return result == XrResult.XR_SUCCESS && handTrackingSystemProp.supportsHandTracking != 0u;
|
||||
}
|
||||
|
||||
public bool TryGetSupportedReferenceSpaceTypeCount(out int count, out XrResult result)
|
||||
{
|
||||
result = (XrResult)m_xrEnumerateReferenceSpaces2(XrSession, 0, out count, IntPtr.Zero);
|
||||
return result == XrResult.XR_SUCCESS;
|
||||
}
|
||||
|
||||
public bool TryGetSupportedReferenceSpaceTypes(XrReferenceSpaceType[] spaces, out XrResult result)
|
||||
{
|
||||
if (spaces == null || spaces.Length == 0)
|
||||
{
|
||||
result = default;
|
||||
return true;
|
||||
}
|
||||
|
||||
result = (XrResult)m_xrEnumerateReferenceSpaces2(XrSession, spaces.Length, out _, ArrayPtr(spaces));
|
||||
return result == XrResult.XR_SUCCESS;
|
||||
}
|
||||
|
||||
public bool TryGetSupportedReferenceSpaceType(XrReferenceSpaceType preferType, out XrReferenceSpaceType supportedType, out XrResult result)
|
||||
{
|
||||
supportedType = default;
|
||||
if (!TryGetSupportedReferenceSpaceTypeCount(out var count, out result)) { return false; }
|
||||
if (count == 0) { return false; } // FIXME: error code?
|
||||
|
||||
var spaces = new XrReferenceSpaceType[count];
|
||||
if (!TryGetSupportedReferenceSpaceTypes(spaces, out result)) { return false; }
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
supportedType = spaces[i];
|
||||
if (supportedType == preferType) { break; }
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryCreateReferenceSpace(XrReferenceSpaceType refSpaceType, XrVector3f position, XrQuaternionf orientation, out ulong handle, out XrResult result)
|
||||
{
|
||||
var createInfo = new XrReferenceSpaceCreateInfo()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_REFERENCE_SPACE_CREATE_INFO,
|
||||
next = IntPtr.Zero,
|
||||
referencespacetype = refSpaceType,
|
||||
poseInReferenceSpace = new XrPosef()
|
||||
{
|
||||
position = position,
|
||||
orientation = orientation,
|
||||
},
|
||||
};
|
||||
|
||||
result = (XrResult)xrCreateReferenceSpace(XrSession, ref createInfo, out handle);
|
||||
return result == XrResult.XR_SUCCESS;
|
||||
}
|
||||
|
||||
public bool TryDestroyReferenceSpace(ulong handle, out XrResult result)
|
||||
{
|
||||
result = (XrResult)xrDestroySpace(handle);
|
||||
return result == XrResult.XR_SUCCESS;
|
||||
}
|
||||
|
||||
public bool TryCreateHandTracker(XrHandEXT hand, out ulong handle, out XrResult result, XrHandJointSetEXT jointSet = XrHandJointSetEXT.XR_HAND_JOINT_SET_DEFAULT_EXT)
|
||||
{
|
||||
var createInfo = new XrHandTrackerCreateInfoEXT()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT,
|
||||
next = IntPtr.Zero,
|
||||
hand = hand,
|
||||
handJointSet = XrHandJointSetEXT.XR_HAND_JOINT_SET_DEFAULT_EXT,
|
||||
};
|
||||
|
||||
result = (XrResult)xrCreateHandTrackerEXT(XrSession, createInfo, out handle);
|
||||
return result == XrResult.XR_SUCCESS;
|
||||
}
|
||||
|
||||
public bool TryDestroyHandTracker(ulong handle, out XrResult result)
|
||||
{
|
||||
result = (XrResult)xrDestroyHandTrackerEXT(handle);
|
||||
return result == XrResult.XR_SUCCESS;
|
||||
}
|
||||
|
||||
public bool TryLocateHandJoints(ulong handle, ulong space, out bool isActive, XrHandJointLocationEXT[] locationArray, out XrResult result)
|
||||
{
|
||||
return TryLocateHandJoints(handle, space, out isActive, locationArray, null, out result);
|
||||
}
|
||||
|
||||
public bool TryLocateHandJoints(ulong handle, ulong space, out bool isActive, XrHandJointLocationEXT[] locationArray, XrHandJointVelocityEXT[] velocityArray, out XrResult result)
|
||||
{
|
||||
return TryLocateHandJoints(handle, space, IntPtr.Zero, out isActive, locationArray, velocityArray, out result);
|
||||
}
|
||||
|
||||
public bool TryLocateHandJoints(ulong handle, ulong space, ref XrHandJointsMotionRangeEXT motionRange, out bool isActive, XrHandJointLocationEXT[] locationArray, out XrResult result)
|
||||
{
|
||||
return TryLocateHandJoints(handle, space, ref motionRange, out isActive, locationArray, null, out result);
|
||||
}
|
||||
|
||||
public unsafe bool TryLocateHandJoints(ulong handle, ulong space, ref XrHandJointsMotionRangeEXT motionRange, out bool isActive, XrHandJointLocationEXT[] locationArray, XrHandJointVelocityEXT[] velocityArray, out XrResult result)
|
||||
{
|
||||
var motionRangeInfo = new XrHandJointsMotionRangeInfoEXT()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT,
|
||||
next = IntPtr.Zero,
|
||||
handJointsMotionRange = motionRange,
|
||||
};
|
||||
|
||||
bool res = TryLocateHandJoints(handle, space, (IntPtr)(&motionRangeInfo), out isActive, locationArray, velocityArray, out result);
|
||||
motionRange = motionRangeInfo.handJointsMotionRange;
|
||||
return res;
|
||||
}
|
||||
|
||||
private unsafe bool TryLocateHandJoints(ulong handle, ulong space, IntPtr motionRangeInfo, out bool isActive, XrHandJointLocationEXT[] locationArray, XrHandJointVelocityEXT[] velocityArray, out XrResult result)
|
||||
{
|
||||
var locateInfo = new XrHandJointsLocateInfoEXT()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT,
|
||||
next = motionRangeInfo,
|
||||
baseSpace = space,
|
||||
time = m_frameState.predictedDisplayTime, //An arbitrary number greater than 0
|
||||
};
|
||||
|
||||
var locVelocitiesPtr = IntPtr.Zero;
|
||||
if (velocityArray != null)
|
||||
{
|
||||
var locVelocities = new XrHandJointVelocitiesEXT()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_HAND_JOINT_VELOCITIES_EXT,
|
||||
next = IntPtr.Zero,
|
||||
jointCount = (uint)velocityArray.Length,
|
||||
jointVelocities = ArrayPtr(velocityArray)
|
||||
};
|
||||
|
||||
locVelocitiesPtr = (IntPtr)(&locVelocities);
|
||||
}
|
||||
|
||||
var locations = new XrHandJointLocationsEXT()
|
||||
{
|
||||
type = XrStructureType.XR_TYPE_HAND_JOINT_LOCATIONS_EXT,
|
||||
next = locVelocitiesPtr,
|
||||
jointCount = locationArray == null ? 0 : locationArray.Length,
|
||||
jointLocations = ArrayPtr(locationArray),
|
||||
};
|
||||
|
||||
result = (XrResult)xrLocateHandJointsEXT(handle,ref locateInfo, ref locations);
|
||||
isActive = locations.isActive != 0u;
|
||||
return result == XrResult.XR_SUCCESS;
|
||||
}
|
||||
|
||||
private unsafe static IntPtr ArrayPtr(XrReferenceSpaceType[] array)
|
||||
{
|
||||
if (array == null) { return IntPtr.Zero; }
|
||||
fixed (XrReferenceSpaceType* p = array) { return (IntPtr)p; }
|
||||
}
|
||||
|
||||
private unsafe static IntPtr ArrayPtr(XrHandJointLocationEXT[] array)
|
||||
{
|
||||
if (array == null) { return IntPtr.Zero; }
|
||||
fixed (XrHandJointLocationEXT* p = array) { return (IntPtr)p; }
|
||||
}
|
||||
|
||||
private unsafe static IntPtr ArrayPtr(XrHandJointVelocityEXT[] array)
|
||||
{
|
||||
if (array == null) { return IntPtr.Zero; }
|
||||
fixed (XrHandJointVelocityEXT* p = array) { return (IntPtr)p; }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38169f0e301608a469f311ebb2233162
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user