diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..0036326 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +; Used by the 'EditorConfig' VS plugin +; See http://editorconfig.org + +; Use tabs preference set to 2 spaces per tab. +[*.cs] +indent_style = space +indent_size = 4 +charset = utf-8-bom diff --git a/Assets/VIRTUOSO.meta b/Assets/VIRTUOSO.meta new file mode 100644 index 0000000..7fd814a --- /dev/null +++ b/Assets/VIRTUOSO.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e1e45009909c87245a53d13351a42598 +folderAsset: yes +timeCreated: 1544108463 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config.meta b/Assets/VIRTUOSO/Config.meta new file mode 100644 index 0000000..9bb3cbf --- /dev/null +++ b/Assets/VIRTUOSO/Config.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8605a2c9674104c49ae53ea1dd969e4a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/actions.json b/Assets/VIRTUOSO/Config/actions.json new file mode 100644 index 0000000..77ba4c4 --- /dev/null +++ b/Assets/VIRTUOSO/Config/actions.json @@ -0,0 +1,194 @@ +{ + "actions": [ + { + "name": "/actions/default/in/InteractUI", + "type": "boolean" + }, + { + "name": "/actions/default/in/Teleport", + "type": "boolean" + }, + { + "name": "/actions/default/in/GrabPinch", + "type": "boolean" + }, + { + "name": "/actions/default/in/GrabGrip", + "type": "boolean" + }, + { + "name": "/actions/default/in/Pose", + "type": "pose" + }, + { + "name": "/actions/default/in/SkeletonLeftHand", + "type": "skeleton", + "skeleton": "/skeleton/hand/left" + }, + { + "name": "/actions/default/in/SkeletonRightHand", + "type": "skeleton", + "skeleton": "/skeleton/hand/right" + }, + { + "name": "/actions/default/in/Squeeze", + "type": "vector1", + "requirement": "optional" + }, + { + "name": "/actions/default/in/HeadsetOnHead", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/default/out/Haptic", + "type": "vibration" + }, + { + "name": "/actions/platformer/in/Move", + "type": "vector2" + }, + { + "name": "/actions/platformer/in/Jump", + "type": "boolean" + }, + { + "name": "/actions/buggy/in/Steering", + "type": "vector2" + }, + { + "name": "/actions/buggy/in/Throttle", + "type": "vector1" + }, + { + "name": "/actions/buggy/in/Brake", + "type": "boolean" + }, + { + "name": "/actions/buggy/in/Reset", + "type": "boolean" + }, + { + "name": "/actions/mixedreality/in/ExternalCamera", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/grab", + "type": "boolean", + "requirement": "mandatory" + }, + { + "name": "/actions/naturalistic/in/trigger", + "type": "boolean", + "requirement": "mandatory" + }, + { + "name": "/actions/naturalistic/in/pose", + "type": "pose" + }, + { + "name": "/actions/naturalistic/in/touchpad", + "type": "vector2" + }, + { + "name": "/actions/naturalistic/in/x", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/y", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/touch_grab", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/touch_trigger", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/touch_touchpad", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/touch_x", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/touch_y", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/naturalistic/in/touchpad_click", + "type": "boolean", + "requirement": "suggested" + }, + { + "name": "/actions/naturalistic/out/Haptic", + "type": "vibration" + } + ], + "action_sets": [ + { + "name": "/actions/default", + "usage": "single" + }, + { + "name": "/actions/platformer", + "usage": "single" + }, + { + "name": "/actions/buggy", + "usage": "single" + }, + { + "name": "/actions/mixedreality", + "usage": "single" + }, + { + "name": "/actions/naturalistic", + "usage": "single" + } + ], + "default_bindings": [ + { + "controller_type": "vive_controller", + "binding_url": "bindings_vive_controller.json" + }, + { + "controller_type": "oculus_touch", + "binding_url": "bindings_oculus_touch.json" + }, + { + "controller_type": "knuckles", + "binding_url": "bindings_knuckles.json" + }, + { + "controller_type": "holographic_controller", + "binding_url": "bindings_holographic_controller.json" + } + ], + "localization": [ + { + "language_tag": "en_US", + "/actions/default/in/GrabGrip": "Grab Grip", + "/actions/default/in/GrabPinch": "Grab Pinch", + "/actions/default/in/HeadsetOnHead": "Headset on head (proximity sensor)", + "/actions/default/in/InteractUI": "Interact With UI", + "/actions/default/in/Pose": "Pose", + "/actions/default/in/SkeletonLeftHand": "Skeleton (Left)", + "/actions/default/in/SkeletonRightHand": "Skeleton (Right)", + "/actions/default/in/Teleport": "Teleport", + "/actions/default/out/Haptic": "Haptic", + "/actions/platformer/in/Jump": "Jump" + } + ] +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Config/actions.json.meta b/Assets/VIRTUOSO/Config/actions.json.meta new file mode 100644 index 0000000..af8e96a --- /dev/null +++ b/Assets/VIRTUOSO/Config/actions.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d3986c7849cfbe242ba1f3a7a63a5900 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/binding_holographic_hmd.json b/Assets/VIRTUOSO/Config/binding_holographic_hmd.json new file mode 100644 index 0000000..866c380 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_holographic_hmd.json @@ -0,0 +1,27 @@ +{ + "alias_info" : {}, + "bindings" : { + "/actions/default" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/headsetonhead" + } + }, + "mode" : "button", + "path" : "/user/head/proximity" + } + ] + } + }, + "controller_type" : "holographic_hmd", + "description" : "", + "name" : "holographic_hmd defaults", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/binding_holographic_hmd.json.meta b/Assets/VIRTUOSO/Config/binding_holographic_hmd.json.meta new file mode 100644 index 0000000..b4b3fa1 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_holographic_hmd.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 106af8be373499e42b24c827721823fa +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/binding_rift.json b/Assets/VIRTUOSO/Config/binding_rift.json new file mode 100644 index 0000000..4a7bb54 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_rift.json @@ -0,0 +1,27 @@ +{ + "alias_info" : {}, + "bindings" : { + "/actions/default" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/headsetonhead" + } + }, + "mode" : "button", + "path" : "/user/head/proximity" + } + ] + } + }, + "controller_type" : "rift", + "description" : "", + "name" : "rift defaults", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/binding_rift.json.meta b/Assets/VIRTUOSO/Config/binding_rift.json.meta new file mode 100644 index 0000000..a920f24 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_rift.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d6975092c2d67214d91aa5860258cb13 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/binding_vive.json b/Assets/VIRTUOSO/Config/binding_vive.json new file mode 100644 index 0000000..a4ad342 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_vive.json @@ -0,0 +1,27 @@ +{ + "alias_info" : {}, + "bindings" : { + "/actions/default" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/headsetonhead" + } + }, + "mode" : "button", + "path" : "/user/head/proximity" + } + ] + } + }, + "controller_type" : "vive", + "description" : "", + "name" : "vive defaults", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/binding_vive.json.meta b/Assets/VIRTUOSO/Config/binding_vive.json.meta new file mode 100644 index 0000000..2b6c647 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_vive.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d61fbc2c88a797241b23f5bdb9b135da +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/binding_vive_pro.json b/Assets/VIRTUOSO/Config/binding_vive_pro.json new file mode 100644 index 0000000..43ba0d3 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_vive_pro.json @@ -0,0 +1,27 @@ +{ + "alias_info" : {}, + "bindings" : { + "/actions/default" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/headsetonhead" + } + }, + "mode" : "button", + "path" : "/user/head/proximity" + } + ] + } + }, + "controller_type" : "vive_pro", + "description" : "", + "name" : "vive_pro defaults", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/binding_vive_pro.json.meta b/Assets/VIRTUOSO/Config/binding_vive_pro.json.meta new file mode 100644 index 0000000..32810a8 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_vive_pro.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 01233af472b1bba49bfa15bb7c396d86 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json b/Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json new file mode 100644 index 0000000..b828702 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json @@ -0,0 +1,23 @@ +{ + "alias_info" : {}, + "app_key" : "application.generated.unity.steamvr.exe", + "bindings": { + "/actions/mixedreality": { + "haptics": [ + ], + "poses": [ + { + "output": "/actions/mixedreality/in/ExternalCamera", + "path": "/user/camera/pose/raw" + } + ], + "sources": [ + ] + } + }, + "controller_type" : "vive_tracker_camera", + "description" : "", + "name" : "tracker_forcamera", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json.meta b/Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json.meta new file mode 100644 index 0000000..ae2ae95 --- /dev/null +++ b/Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1cd61eb33c6e1a644969c99869d6ad22 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/bindings_holographic_controller.json b/Assets/VIRTUOSO/Config/bindings_holographic_controller.json new file mode 100644 index 0000000..8e50b37 --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_holographic_controller.json @@ -0,0 +1,306 @@ +{ + "action_manifest_version" : 0, + "alias_info" : {}, + "app_key" : "application.generated.unity.vsdktutorialrunthrough.exe", + "bindings" : { + "/actions/buggy" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "position" : { + "output" : "/actions/buggy/in/steering" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/joystick" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/buggy/in/steering" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/joystick" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/buggy/in/throttle" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/buggy/in/throttle" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/brake" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/brake" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/reset" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/application_menu" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/reset" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/application_menu" + } + ] + }, + "/actions/default" : { + "chords" : [], + "haptics" : [ + { + "output" : "/actions/default/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/default/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "poses" : [ + { + "output" : "/actions/default/in/pose", + "path" : "/user/hand/left/pose/raw" + }, + { + "output" : "/actions/default/in/pose", + "path" : "/user/hand/right/pose/raw" + } + ], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/interactui" + }, + "touch" : { + "output" : "/actions/default/in/grabpinch" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/interactui" + }, + "touch" : { + "output" : "/actions/default/in/grabpinch" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/teleport" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/teleport" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/right/input/trackpad" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/grabgrip" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/grabgrip" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + } + ] + }, + "/actions/naturalistic" : { + "haptics" : [ + { + "output" : "/actions/naturalistic/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/naturalistic/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "poses" : [ + { + "output" : "/actions/naturalistic/in/pose", + "path" : "/user/hand/left/pose/handgrip" + }, + { + "output" : "/actions/naturalistic/in/pose", + "path" : "/user/hand/right/pose/handgrip" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/grab" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/grab" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/touchpad_click" + }, + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/touchpad_click" + }, + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/right/input/trackpad" + } + ] + }, + "/actions/platformer" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/platformer/in/jump" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/platformer/in/jump" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/platformer/in/move" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/platformer/in/move" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/right/input/trackpad" + } + ] + } + }, + "controller_type" : "holographic_controller", + "description" : "", + "name" : "Default bindings for Windows Mixed Reality Controllers", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/bindings_holographic_controller.json.meta b/Assets/VIRTUOSO/Config/bindings_holographic_controller.json.meta new file mode 100644 index 0000000..cb5e1a0 --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_holographic_controller.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 73f2205ed4cc90044a4bd2190e0d2770 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/bindings_knuckles.json b/Assets/VIRTUOSO/Config/bindings_knuckles.json new file mode 100644 index 0000000..b3d7e67 --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_knuckles.json @@ -0,0 +1,469 @@ +{ + "action_manifest_version" : 0, + "alias_info" : {}, + "app_key" : "application.generated.unity.virtuososdk.exe", + "bindings" : { + "/actions/buggy" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "position" : { + "output" : "/actions/buggy/in/steering" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/thumbstick" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/buggy/in/steering" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/thumbstick" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/buggy/in/throttle" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/buggy/in/throttle" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/brake" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/a" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/brake" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/a" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/reset" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/b" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/reset" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/b" + } + ] + }, + "/actions/default" : { + "chords" : [], + "haptics" : [ + { + "output" : "/actions/default/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/default/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "poses" : [ + { + "output" : "/actions/default/in/pose", + "path" : "/user/hand/left/pose/raw" + }, + { + "output" : "/actions/default/in/pose", + "path" : "/user/hand/right/pose/raw" + } + ], + "skeleton" : [ + { + "output" : "/actions/default/in/skeletonlefthand", + "path" : "/user/hand/left/input/skeleton/left" + }, + { + "output" : "/actions/default/in/skeletonrighthand", + "path" : "/user/hand/right/input/skeleton/right" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/interactui" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "force" : { + "output" : "/actions/default/in/squeeze" + } + }, + "mode" : "force_sensor", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "force" : { + "output" : "/actions/default/in/squeeze" + } + }, + "mode" : "force_sensor", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/teleport" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/interactui" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/teleport" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trackpad" + }, + { + "inputs" : { + "grab" : { + "output" : "/actions/default/in/grabgrip" + } + }, + "mode" : "grab", + "parameters" : { + "force_hold_threshold" : "0.02", + "force_release_threshold" : "0.01" + }, + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "grab" : { + "output" : "/actions/default/in/grabgrip" + } + }, + "mode" : "grab", + "parameters" : { + "force_hold_threshold" : "0.02", + "force_release_threshold" : "0.01" + }, + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "grab" : { + "output" : "/actions/default/in/grabpinch" + } + }, + "mode" : "grab", + "parameters" : { + "force_hold_threshold" : "0.02", + "force_release_threshold" : "0.01" + }, + "path" : "/user/hand/left/input/pinch" + }, + { + "inputs" : { + "grab" : { + "output" : "/actions/default/in/grabpinch" + } + }, + "mode" : "grab", + "parameters" : { + "force_hold_threshold" : "0.02", + "force_release_threshold" : "0.01" + }, + "path" : "/user/hand/right/input/pinch" + } + ] + }, + "/actions/naturalistic" : { + "haptics" : [ + { + "output" : "/actions/naturalistic/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/naturalistic/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "poses" : [ + { + "output" : "/actions/naturalistic/in/pose", + "path" : "/user/hand/left/pose/handgrip" + }, + { + "output" : "/actions/naturalistic/in/pose", + "path" : "/user/hand/right/pose/handgrip" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/grab" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_grab" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/grab" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_grab" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "grab" : { + "output" : "/actions/naturalistic/in/trigger" + } + }, + "mode" : "grab", + "path" : "/user/hand/left/input/pinch" + }, + { + "inputs" : { + "grab" : { + "output" : "/actions/naturalistic/in/trigger" + } + }, + "mode" : "grab", + "path" : "/user/hand/right/input/pinch" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/x" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_x" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/a" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/x" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_x" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/a" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/y" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_y" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/b" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/y" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_y" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/b" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_touchpad" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_touchpad" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/right/input/trackpad" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/trigger" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/trigger" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/touchpad_click" + }, + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_touchpad" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/thumbstick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/touchpad_click" + }, + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_touchpad" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/thumbstick" + } + ] + }, + "/actions/platformer" : { + "chords" : [], + "haptics" : [], + "poses" : [], + "skeleton" : [], + "sources" : [ + { + "inputs" : { + "position" : { + "output" : "/actions/platformer/in/move" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/thumbstick" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/platformer/in/move" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/thumbstick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/platformer/in/jump" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/platformer/in/jump" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trigger" + } + ] + } + }, + "controller_type" : "knuckles", + "description" : "", + "name" : "knuckles_default", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/bindings_knuckles.json.meta b/Assets/VIRTUOSO/Config/bindings_knuckles.json.meta new file mode 100644 index 0000000..5a48959 --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_knuckles.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f9ab447104d665a49a17a64e57ba867d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/bindings_oculus_touch.json b/Assets/VIRTUOSO/Config/bindings_oculus_touch.json new file mode 100644 index 0000000..77c8236 --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_oculus_touch.json @@ -0,0 +1,421 @@ +{ + "alias_info" : {}, + "app_key" : "com.charlesriveranalytics.virtuoso", + "bindings" : { + "/actions/buggy" : { + "sources" : [ + { + "inputs" : { + "pull" : { + "output" : "/actions/buggy/in/throttle" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/buggy/in/throttle" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/buggy/in/steering" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/joystick" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/buggy/in/steering" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/brake" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/x" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/brake" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/x" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/reset" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/y" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/reset" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/y" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/brake" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/a" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/buggy/in/reset" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/b" + } + ] + }, + "/actions/default" : { + "chords" : [], + "haptics" : [ + { + "output" : "/actions/default/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/default/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "poses" : [ + { + "output" : "/actions/default/in/pose", + "path" : "/user/hand/left/pose/raw" + }, + { + "output" : "/actions/default/in/pose", + "path" : "/user/hand/right/pose/raw" + } + ], + "skeleton" : [ + { + "output" : "/actions/default/in/skeletonlefthand", + "path" : "/user/hand/left/input/skeleton/left" + }, + { + "output" : "/actions/default/in/skeletonrighthand", + "path" : "/user/hand/right/input/skeleton/right" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/interactui" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/teleport" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/grabgrip" + } + }, + "mode" : "button", + "parameters" : { + "click_activate_threshold" : "0.8", + "click_deactivate_threshold" : "0.7", + "force_input" : "force" + }, + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/grabpinch" + } + }, + "mode" : "button", + "parameters" : { + "click_activate_threshold" : "0.8", + "click_deactivate_threshold" : "0.7", + "force_input" : "value" + }, + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/interactui" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/grabpinch" + } + }, + "mode" : "button", + "parameters" : { + "click_activate_threshold" : "0.8", + "click_deactivate_threshold" : "0.7" + }, + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/teleport" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/default/in/grabgrip" + } + }, + "mode" : "button", + "parameters" : { + "click_activate_threshold" : "0.8", + "click_deactivate_threshold" : "0.7", + "force_input" : "force" + }, + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/default/in/squeeze" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/default/in/squeeze" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/grip" + } + ] + }, + "/actions/naturalistic" : { + "haptics" : [ + { + "output" : "/actions/naturalistic/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/naturalistic/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "poses" : [ + { + "output" : "/actions/naturalistic/in/pose", + "path" : "/user/hand/left/pose/base" + }, + { + "output" : "/actions/naturalistic/in/pose", + "path" : "/user/hand/right/pose/base" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/grab" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/x" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_x" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/x" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/y" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_y" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/y" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/touchpad_click" + }, + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_touchpad" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/trigger" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/grab" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/touchpad_click" + }, + "position" : { + "output" : "/actions/naturalistic/in/touchpad" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_touchpad" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/trigger" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/x" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_x" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/x" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/naturalistic/in/y" + }, + "touch" : { + "output" : "/actions/naturalistic/in/touch_y" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/y" + } + ] + }, + "/actions/platformer" : { + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/platformer/in/jump" + }, + "position" : { + "output" : "/actions/platformer/in/move" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/platformer/in/jump" + }, + "position" : { + "output" : "/actions/platformer/in/move" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/joystick" + } + ] + } + }, + "controller_type" : "oculus_touch", + "description" : "", + "name" : "oculus_touch", + "options" : {}, + "simulated_actions" : [] +} diff --git a/Assets/VIRTUOSO/Config/bindings_oculus_touch.json.meta b/Assets/VIRTUOSO/Config/bindings_oculus_touch.json.meta new file mode 100644 index 0000000..a6dfaba --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_oculus_touch.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ecf34e518818c434d809c86064961869 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Config/bindings_vive_controller.json b/Assets/VIRTUOSO/Config/bindings_vive_controller.json new file mode 100644 index 0000000..7fae921 --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_vive_controller.json @@ -0,0 +1,419 @@ +{ + "app_key": "com.charlesriveranalytics.virtuoso", + "bindings": { + "/actions/buggy": { + "chords": [], + "poses": [], + "haptics": [], + "sources": [ + { + "path": "/user/hand/left/input/trigger", + "mode": "trigger", + "parameters": {}, + "inputs": { + "pull": { + "output": "/actions/buggy/in/throttle" + } + } + }, + { + "path": "/user/hand/right/input/trigger", + "mode": "trigger", + "parameters": {}, + "inputs": { + "pull": { + "output": "/actions/buggy/in/throttle" + } + } + }, + { + "path": "/user/hand/left/input/trackpad", + "mode": "trackpad", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/buggy/in/brake" + }, + "position": { + "output": "/actions/buggy/in/steering" + } + } + }, + { + "path": "/user/hand/right/input/trackpad", + "mode": "trackpad", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/buggy/in/brake" + }, + "position": { + "output": "/actions/buggy/in/steering" + } + } + }, + { + "path": "/user/hand/left/input/application_menu", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/buggy/in/reset" + } + } + }, + { + "path": "/user/hand/right/input/application_menu", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/buggy/in/reset" + } + } + } + ], + "skeleton": [] + }, + "/actions/default": { + "chords": [], + "poses": [ + { + "output": "/actions/default/in/pose", + "path": "/user/hand/left/pose/raw" + }, + { + "output": "/actions/default/in/pose", + "path": "/user/hand/right/pose/raw" + } + ], + "haptics": [ + { + "output": "/actions/default/out/haptic", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/default/out/haptic", + "path": "/user/hand/right/output/haptic" + } + ], + "sources": [ + { + "path": "/user/hand/left/input/trigger", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/default/in/interactui" + } + } + }, + { + "path": "/user/hand/left/input/trackpad", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/default/in/teleport" + } + } + }, + { + "path": "/user/hand/left/input/grip", + "mode": "button", + "parameters": { + "click_activate_threshold": "0.05", + "click_deactivate_threshold": "0", + "force_input": "force" + }, + "inputs": { + "click": { + "output": "/actions/default/in/grabgrip" + } + } + }, + { + "path": "/user/hand/left/input/trigger", + "mode": "button", + "parameters": { + "click_activate_threshold": "0.75", + "click_deactivate_threshold": "0.7", + "force_input": "value" + }, + "inputs": { + "click": { + "output": "/actions/default/in/grabpinch" + } + } + }, + { + "path": "/user/hand/right/input/trigger", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/default/in/interactui" + } + } + }, + { + "path": "/user/hand/right/input/trigger", + "mode": "button", + "parameters": { + "click_activate_threshold": "0.75", + "click_deactivate_threshold": "0.7" + }, + "inputs": { + "click": { + "output": "/actions/default/in/grabpinch" + } + } + }, + { + "path": "/user/hand/right/input/trackpad", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/default/in/teleport" + } + } + }, + { + "path": "/user/hand/right/input/grip", + "mode": "button", + "parameters": { + "click_activate_threshold": "0.05", + "click_deactivate_threshold": "0", + "force_input": "force" + }, + "inputs": { + "click": { + "output": "/actions/default/in/grabgrip" + } + } + }, + { + "path": "/user/hand/left/input/trigger", + "mode": "trigger", + "parameters": {}, + "inputs": { + "pull": { + "output": "/actions/default/in/squeeze" + } + } + }, + { + "path": "/user/hand/right/input/trigger", + "mode": "trigger", + "parameters": {}, + "inputs": { + "pull": { + "output": "/actions/default/in/squeeze" + } + } + } + ], + "skeleton": [ + { + "output": "/actions/default/in/skeletonlefthand", + "path": "/user/hand/left/input/skeleton/left" + }, + { + "output": "/actions/default/in/skeletonrighthand", + "path": "/user/hand/right/input/skeleton/right" + } + ] + }, + "/actions/legacy": { + "chords": [], + "poses": [], + "haptics": [], + "sources": [], + "skeleton": [] + }, + "/actions/naturalistic": { + "chords": [], + "poses": [ + { + "output": "/actions/naturalistic/in/pose", + "path": "/user/hand/left/pose/raw" + }, + { + "output": "/actions/naturalistic/in/pose", + "path": "/user/hand/right/pose/raw" + } + ], + "haptics": [ + { + "output": "/actions/naturalistic/out/haptic", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/naturalistic/out/haptic", + "path": "/user/hand/right/output/haptic" + } + ], + "sources": [ + { + "path": "/user/hand/left/input/grip", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/grab" + } + } + }, + { + "path": "/user/hand/right/input/grip", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/grab" + } + } + }, + { + "path": "/user/hand/left/input/trigger", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/trigger" + } + } + }, + { + "path": "/user/hand/right/input/trigger", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/trigger" + } + } + }, + { + "path": "/user/hand/left/input/trackpad", + "mode": "trackpad", + "parameters": {}, + "inputs": { + "position": { + "output": "/actions/naturalistic/in/touchpad" + }, + "touch": { + "output": "/actions/naturalistic/in/touch_touchpad" + } + } + }, + { + "path": "/user/hand/right/input/trackpad", + "mode": "trackpad", + "parameters": {}, + "inputs": { + "position": { + "output": "/actions/naturalistic/in/touchpad" + }, + "touch": { + "output": "/actions/naturalistic/in/touch_touchpad" + } + } + }, + { + "path": "/user/hand/left/input/application_menu", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/x" + } + } + }, + { + "path": "/user/hand/right/input/application_menu", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/y" + } + } + }, + { + "path": "/user/hand/left/input/trackpad", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/touchpad_click" + } + } + }, + { + "path": "/user/hand/right/input/trackpad", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/naturalistic/in/touchpad_click" + } + } + } + ], + "skeleton": [] + }, + "/actions/platformer": { + "chords": [], + "poses": [], + "haptics": [], + "sources": [ + { + "path": "/user/hand/left/input/trackpad", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/platformer/in/jump" + } + } + }, + { + "path": "/user/hand/right/input/trackpad", + "mode": "button", + "parameters": {}, + "inputs": { + "click": { + "output": "/actions/platformer/in/jump" + } + } + }, + { + "path": "/user/hand/left/input/trackpad", + "mode": "trackpad", + "parameters": {}, + "inputs": { + "position": { + "output": "/actions/platformer/in/move" + } + } + }, + { + "path": "/user/hand/right/input/trackpad", + "mode": "trackpad", + "parameters": {}, + "inputs": { + "position": { + "output": "/actions/platformer/in/move" + } + } + } + ], + "skeleton": [] + } + }, + "controller_type": "vive_controller", + "description": "", + "name": "vive_controller" +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Config/bindings_vive_controller.json.meta b/Assets/VIRTUOSO/Config/bindings_vive_controller.json.meta new file mode 100644 index 0000000..cf78c10 --- /dev/null +++ b/Assets/VIRTUOSO/Config/bindings_vive_controller.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d2f8c4300e587a04daab358aa0c67057 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Examples.meta b/Assets/VIRTUOSO/Examples.meta new file mode 100644 index 0000000..6f193d8 --- /dev/null +++ b/Assets/VIRTUOSO/Examples.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 849277d053fbb4a4d8c85146d57daf40 +folderAsset: yes +timeCreated: 1546442776 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Examples/Haptic Example Scene.unity b/Assets/VIRTUOSO/Examples/Haptic Example Scene.unity new file mode 100644 index 0000000..ef6b0dc --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Haptic Example Scene.unity @@ -0,0 +1,15780 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 8 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &2483436 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1325315483681992, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2483437} + - component: {fileID: 2483443} + - component: {fileID: 2483442} + - component: {fileID: 2483441} + - component: {fileID: 2483440} + - component: {fileID: 2483439} + - component: {fileID: 2483438} + m_Layer: 0 + m_Name: RigidRoundHand_L + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2483437 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4858914955203396, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2483436} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1542414820} + - {fileID: 1516915512} + - {fileID: 1627909957} + - {fileID: 777583215} + - {fileID: 1299871813} + - {fileID: 538772792} + - {fileID: 1195523829} + m_Father: {fileID: 1670684668} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 180, z: 0} +--- !u!114 &2483438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114893403919140318, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2483436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 08224c2548b75214e81b837a73fae0f9, type: 3} + m_Name: + m_EditorClassIdentifier: + axisFidelity: 1 + senseAxisForceZeroThreshold: 0.15 + senseAxisPressThreshold: 0.95 + triggerClickThreshold: 1 + triggerForceZeroThreshold: 0.01 + triggerAxisZeroOnUntouch: 0 + gripClickThreshold: 1 + gripForceZeroThreshold: 0.01 + gripAxisZeroOnUntouch: 0 + triggerPressed: 0 + triggerTouched: 0 + triggerHairlinePressed: 0 + triggerClicked: 0 + triggerAxisChanged: 0 + triggerSenseAxisChanged: 0 + gripPressed: 0 + gripTouched: 0 + gripHairlinePressed: 0 + gripClicked: 0 + gripAxisChanged: 0 + touchpadPressed: 0 + touchpadTouched: 0 + touchpadAxisChanged: 0 + touchpadSenseAxisChanged: 0 + touchpadTwoTouched: 0 + touchpadTwoPressed: 0 + touchpadTwoAxisChanged: 0 + buttonOnePressed: 0 + buttonOneTouched: 0 + buttonTwoPressed: 0 + buttonTwoTouched: 0 + startMenuPressed: 0 + middleFingerSenseAxisChanged: 0 + ringFingerSenseAxisChanged: 0 + pinkyFingerSenseAxisChanged: 0 + gripSenseAxisChanged: 0 + gripSensePressed: 0 + controllerVisible: 1 + controllerHandId: 0 + triggerGesture: {fileID: 0} + gripGesture: {fileID: 11400000, guid: 00b1d9b68c0fcb149b4a77ca61ba13c0, type: 2} + touchpadGesture: {fileID: 0} + buttonOneGesture: {fileID: 0} + buttonTwoGesture: {fileID: 0} + startMenuGesture: {fileID: 0} +--- !u!114 &2483439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114752504900293228, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2483436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65eb64f0f2fd6d64faddbcf5d7d3bdbb, type: 3} + m_Name: + m_EditorClassIdentifier: + useButton: 3 + controllerEvents: {fileID: 2483438} + interactTouch: {fileID: 2483441} + interactGrab: {fileID: 2483440} +--- !u!114 &2483440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114032345389470858, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2483436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 947b27445602ed640b885db7e667dfc1, type: 3} + m_Name: + m_EditorClassIdentifier: + grabButton: 7 + grabPrecognition: 0 + throwMultiplier: 1 + createRigidBodyWhenNotTouching: 0 + controllerAttachPoint: {fileID: 1756296557} + controllerEvents: {fileID: 2483438} + interactTouch: {fileID: 2483441} +--- !u!114 &2483441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114414518696397854, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2483436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64e104da36bd3b04b90c6ae969ac66dc, type: 3} + m_Name: + m_EditorClassIdentifier: + customColliderContainer: {fileID: 2483436} +--- !u!114 &2483442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114450590992621364, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2483436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8bcd03e00992e084c8be61565d44b8bd, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2483443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114691528866644458, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2483436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9ea79be653ce14db8969d7225d95ec6c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &36426132 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1922512018684852, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 36426133} + - component: {fileID: 36426134} + m_Layer: 0 + m_Name: palm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &36426133 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4465051362419226, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 36426132} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0834, y: 0.117, z: -0.0134} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1808816406} + m_Father: {fileID: 1819287518} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &36426134 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 65132082703212382, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 36426132} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.06, y: 0.02, z: 0.07} + m_Center: {x: 0, y: 0, z: -0.005} +--- !u!1 &37548867 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 37548868} + - component: {fileID: 37548871} + - component: {fileID: 37548870} + - component: {fileID: 37548869} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &37548868 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37548867} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 688036712} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &37548869 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37548867} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e9b4035a726ef4b4db69e28454400bc9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &37548870 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37548867} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Convex: 0 + m_CookingOptions: 14 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &37548871 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37548867} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &37851354 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1383456089813822, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 37851355} + - component: {fileID: 37851356} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &37851355 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4782672747295318, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37851354} + m_LocalRotation: {x: 0.24710183, y: 0.051211912, z: -0.063631974, w: -0.96554077} + m_LocalPosition: {x: 0.18226412, y: 0.30500248, z: -0.08541584} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 777583215} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 6.0762, y: -15.1172, z: 19.823} +--- !u!136 &37851356 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136338625638998070, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37851354} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.02611 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &40297911 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100066, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 40297912} + m_Layer: 0 + m_Name: LeftToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &40297912 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400066, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 40297911} + m_LocalRotation: {x: 0.000000004649337, y: 1.1698642e-10, z: 9.313231e-10, w: 1} + m_LocalPosition: {x: -0.0037335982, y: -0.10492193, z: 0.12640664} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 134130428} + m_Father: {fileID: 158100308} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &62777201 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 62777202} + - component: {fileID: 62777203} + m_Layer: 5 + m_Name: '[Shoes] Right' + m_TagString: Shooes + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &62777202 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 62777201} + 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: 289301848} + - {fileID: 498946761} + m_Father: {fileID: 1006506396} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 2.4, y: -2.63} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &62777203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 62777201} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &75109852 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1903967818133664, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 75109853} + - component: {fileID: 75109854} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &75109853 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4700410826160140, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 75109852} + m_LocalRotation: {x: -0.19123267, y: -0.055678543, z: 0.07900553, w: 0.97677433} + m_LocalPosition: {x: -0.23825322, y: 0.31311387, z: -0.03890297} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 772892186} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 8.5308, y: -1.7105999, z: -8.6391} +--- !u!136 &75109854 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136023256047386040, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 75109852} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.025400002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &77031042 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1212056537696620, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 77031043} + - component: {fileID: 77031045} + - component: {fileID: 77031044} + m_Layer: 0 + m_Name: Controller (Left) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &77031043 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4865555683628974, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 77031042} + 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: 1325915190} + m_Father: {fileID: 419494050} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &77031044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114921673225235952, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 77031042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!114 &77031045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114100808945921500, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 77031042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 666f106f8ad384d499459fa8df2e9301, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &80345381 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1903212703384076, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 80345382} + - component: {fileID: 80345383} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &80345382 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4224837930104486, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 80345381} + m_LocalRotation: {x: 0.18438557, y: -0.10542023, z: 0.17531344, w: -0.9613292} + m_LocalPosition: {x: 0.2514498, y: 0.2826522, z: -0.09308395} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1516915512} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 8.5308, y: 9.6658, z: 0} +--- !u!136 &80345383 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136034649849060750, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 80345381} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.047780003 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &83942686 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1194369787111610, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 83942687} + - component: {fileID: 83942688} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &83942687 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4452855355212552, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 83942686} + m_LocalRotation: {x: -0.20731795, y: 0.0090306, z: 0.027792262, w: 0.9778371} + m_LocalPosition: {x: -0.20662303, y: 0.3090629, z: -0.06791538} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 814415650} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 8.5308, y: 7.0464997, z: -11.571899} +--- !u!136 &83942688 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136245211851905174, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 83942686} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.03365 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &84337006 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1469459356226748, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 84337007} + - component: {fileID: 84337008} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &84337007 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4142989794410874, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 84337006} + m_LocalRotation: {x: 0.20731795, y: 0.00903069, z: 0.027791852, w: -0.9778371} + m_LocalPosition: {x: 0.20682843, y: 0.29545978, z: -0.09853935} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1299871813} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 8.5308, y: -7.0464997, z: 11.571899} +--- !u!136 &84337008 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136085305415601956, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 84337006} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.049370002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &93853989 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1247108362005094, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 93853990} + - component: {fileID: 93853991} + m_Layer: 0 + m_Name: Oculus + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &93853990 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4370747249168110, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 93853989} + 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: 2031144553} + m_Father: {fileID: 1532369071} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &93853991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114143306831425858, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 93853989} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 1 + actualBoundaries: {fileID: 0} + actualHeadset: {fileID: 0} + actualLeftController: {fileID: 0} + actualRightController: {fileID: 0} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 0} + modelAliasRightController: {fileID: 0} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_OculusSystem + descriptionIndex: 0 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_OculusBoundaries + descriptionIndex: 0 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_OculusHeadset + descriptionIndex: 0 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_OculusController + descriptionIndex: 0 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_FallbackTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_LeapMotionHand + descriptionIndex: 0 +--- !u!1 &108752127 stripped +GameObject: + m_PrefabParentObject: {fileID: 159396, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + m_PrefabInternal: {fileID: 1775261156} +--- !u!1 &111077810 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 111077816} + - component: {fileID: 111077815} + - component: {fileID: 111077814} + - component: {fileID: 111077813} + - component: {fileID: 111077812} + - component: {fileID: 111077811} + m_Layer: 0 + m_Name: Head Joint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!138 &111077811 +FixedJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 111077810} + m_ConnectedBody: {fileID: 1284476404} + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &111077812 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 111077810} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &111077813 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 111077810} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &111077814 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 111077810} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &111077815 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 111077810} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &111077816 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 111077810} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1630150759} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &114135777 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 114135778} + - component: {fileID: 114135780} + - component: {fileID: 114135779} + m_Layer: 5 + m_Name: tactshoes_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &114135778 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 114135777} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1689996211} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.55999947, y: 0.19999886} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114135779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 114135777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 3d5b6c987f355ab46a5a03ef89167c59, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &114135780 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 114135777} +--- !u!1 &114522028 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1707382520060588, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 114522029} + - component: {fileID: 114522031} + - component: {fileID: 114522030} + m_Layer: 5 + m_Name: Control Hints + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &114522029 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224305327248111550, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 114522028} + 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: 584085275} + m_Father: {fileID: 1152297872} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114522030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114254209494874826, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 114522028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 10 + m_Right: 0 + m_Top: 10 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!222 &114522031 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222613451191167698, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 114522028} +--- !u!1 &119782594 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 119782600} + - component: {fileID: 119782599} + - component: {fileID: 119782598} + - component: {fileID: 119782597} + - component: {fileID: 119782596} + - component: {fileID: 119782595} + m_Layer: 0 + m_Name: Hand Joint (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!138 &119782595 +FixedJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 119782594} + m_ConnectedBody: {fileID: 1284476446} + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &119782596 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 119782594} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &119782597 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 119782594} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &119782598 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 119782594} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &119782599 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 119782594} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &119782600 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 119782594} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.803, y: 1.575, z: 0.031} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 1630150759} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &122454695 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 122454696} + - component: {fileID: 122454698} + - component: {fileID: 122454697} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &122454696 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 122454695} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1953535382} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &122454697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 122454695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &122454698 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 122454695} +--- !u!1 &134130427 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100064, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 134130428} + m_Layer: 0 + m_Name: LeftToe_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &134130428 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400064, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 134130427} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.000000002053664, y: 0.000000009634096, z: 0.09992521} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 40297912} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &134775171 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1250541400732158, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 134775172} + - component: {fileID: 134775174} + - component: {fileID: 134775173} + m_Layer: 0 + m_Name: Controller (Right) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &134775172 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4820740285754844, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 134775171} + 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: 1147874358} + m_Father: {fileID: 419494050} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &134775173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114955743664507548, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 134775171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!114 &134775174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114208647081064652, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 134775171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 666f106f8ad384d499459fa8df2e9301, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &137000813 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1015481899568480, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 137000814} + - component: {fileID: 137000815} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &137000814 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4929339282829394, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 137000813} + m_LocalRotation: {x: 0.15511838, y: -0.22281167, z: 0.71685785, w: -0.6421901} + m_LocalPosition: {x: 0.27401513, y: 0.22215089, z: -0.09655133} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1542414820} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 24.403599, y: 35.2679, z: -62.080498} +--- !u!136 &137000815 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136142363240077270, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 137000813} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.02967 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &140898220 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1041846503669346, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 140898221} + - component: {fileID: 140898222} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &140898221 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4660273544129030, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 140898220} + m_LocalRotation: {x: 0.19123271, y: -0.05567847, z: 0.07900512, w: -0.9767744} + m_LocalPosition: {x: 0.23028272, y: 0.29219556, z: -0.09169823} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1627909957} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 8.5308, y: 1.7105999, z: 8.6391} +--- !u!136 &140898222 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136650095204003834, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 140898220} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.052630004 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &147963451 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 147963452} + - component: {fileID: 147963454} + - component: {fileID: 147963453} + m_Layer: 5 + m_Name: tactglove_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &147963452 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 147963451} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 514078125} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 1.1700001, y: 0.67999935} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &147963453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 147963451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: f829abb8eb45bfb408c8c3a8e673d569, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &147963454 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 147963451} +--- !u!1 &152480867 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 152480868} + - component: {fileID: 152480869} + m_Layer: 5 + m_Name: '[Tot] Back' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &152480868 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 152480867} + 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: 1240601296} + m_Father: {fileID: 1006506396} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 2.09, y: 2.48} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &152480869 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 152480867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &158100307 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100014, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 158100308} + m_Layer: 0 + m_Name: LeftFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &158100308 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400014, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 158100307} + m_LocalRotation: {x: -0.000018015498, y: -0.00000010461389, z: -0.0000000013931898, + w: 1} + m_LocalPosition: {x: 0.002446696, y: -0.42047998, z: -0.020576412} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 40297912} + m_Father: {fileID: 1284476437} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &176951932 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1742251324} + m_Modifications: + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.z + value: -0.601 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.x + value: 1.261 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 1.442 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 509.1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 271.04 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 114642603537886326, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Text + value: 'Right Hand + + Vive' + objectReference: {fileID: 0} + - target: {fileID: 1678482369823558, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + propertyPath: m_Name + value: Right Hand Help Text + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.x + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.z + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.y + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 271.04 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 271.04 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 509.1 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 509.1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + m_IsPrefabParent: 0 +--- !u!224 &176951933 stripped +RectTransform: + m_PrefabParentObject: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + m_PrefabInternal: {fileID: 176951932} +--- !u!1 &212498739 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1448860657120800, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 212498740} + - component: {fileID: 212498743} + - component: {fileID: 212498742} + - component: {fileID: 212498741} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &212498740 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224808776499197216, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 212498739} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 584085275} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &212498741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114850898494755026, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 212498739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &212498742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114658427462144108, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 212498739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &212498743 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222383023982389702, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 212498739} +--- !u!1 &218380962 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 218380968} + - component: {fileID: 218380967} + - component: {fileID: 218380966} + - component: {fileID: 218380965} + - component: {fileID: 218380964} + - component: {fileID: 218380963} + m_Layer: 0 + m_Name: Hand Joint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!138 &218380963 +FixedJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 218380962} + m_ConnectedBody: {fileID: 1284476445} + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &218380964 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 218380962} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &218380965 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 218380962} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &218380966 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 218380962} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &218380967 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 218380962} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &218380968 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 218380962} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.828, y: 1.536, z: -0.114} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 1630150759} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &232443417 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 232443418} + - component: {fileID: 232443420} + - component: {fileID: 232443419} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &232443418 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 232443417} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 235736792} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &232443419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 232443417} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &232443420 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 232443417} +--- !u!1 &234960657 stripped +GameObject: + m_PrefabParentObject: {fileID: 124034, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + m_PrefabInternal: {fileID: 1775261156} +--- !u!1 &235736791 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 235736792} + - component: {fileID: 235736795} + - component: {fileID: 235736794} + - component: {fileID: 235736793} + m_Layer: 5 + m_Name: Pattern Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &235736792 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 235736791} + 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: 1165664733} + - {fileID: 232443418} + - {fileID: 689336098} + m_Father: {fileID: 1342166475} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &235736793 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 235736791} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 853051423, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 235736794} + m_Template: {fileID: 689336098} + m_CaptionText: {fileID: 1165664734} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 1928526049} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: Option A + m_Image: {fileID: 0} + - m_Text: Option B + m_Image: {fileID: 0} + - m_Text: Option C + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1342166476} + m_MethodName: DropdownPatternSelection + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 235736793} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Dropdown, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Dropdown+DropdownEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &235736794 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 235736791} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &235736795 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 235736791} +--- !u!1 &257065412 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1573585642572252, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 257065414} + - component: {fileID: 257065413} + m_Layer: 0 + m_Name: '[VRTK_SDKManager]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &257065413 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114753725440379030, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 257065412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5837af0260a118e4d808bfe0405429a1, type: 3} + m_Name: + m_EditorClassIdentifier: + autoManageScriptDefines: 1 + activeScriptingDefineSymbolsWithoutSDKClasses: + - symbol: VRTK_DEFINE_SDK_BHAPTICS + buildTargetGroupName: Standalone + scriptAliasLeftController: {fileID: 1155796738} + scriptAliasRightController: {fileID: 716242861} + autoManageVRSettings: 1 + autoLoadSetup: 1 + setups: + - {fileID: 93853991} + - {fileID: 317598317} + - {fileID: 1380104170} + - {fileID: 457387806} + - {fileID: 930465346} + excludeTargetGroups: 1a0000001b000000 + persistOnLoad: 0 +--- !u!4 &257065414 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4056409321884894, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 257065412} + 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: 1532369071} + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &289301847 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 289301848} + - component: {fileID: 289301850} + - component: {fileID: 289301849} + m_Layer: 5 + m_Name: tactshoes_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &289301848 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 289301847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 62777202} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -5.4, y: 0.20000076} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &289301849 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 289301847} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 3d5b6c987f355ab46a5a03ef89167c59, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &289301850 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 289301847} +--- !u!1 &296436640 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1216735881122272, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 296436641} + - component: {fileID: 296436642} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &296436641 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4502273016313764, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 296436640} + m_LocalRotation: {x: -0.15511829, y: -0.22281176, z: 0.7168581, w: 0.6421898} + m_LocalPosition: {x: -0.2740153, y: 0.22215065, z: -0.09655133} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 663617232} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 24.403599, y: -35.2679, z: 62.080498} +--- !u!136 &296436642 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136059134272725212, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 296436640} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.02967 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &304869208 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 304869209} + m_Layer: 0 + m_Name: '[VRTK_Scripts]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &304869209 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 304869208} + 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: 1155796739} + - {fileID: 716242862} + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &316364392 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 316364393} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &316364393 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 316364392} + 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: 2005560391} + m_Father: {fileID: 1613062976} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 28} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &317598315 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1155113487749076, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 317598316} + - component: {fileID: 317598317} + m_Layer: 0 + m_Name: SteamVR + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &317598316 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4253339659736150, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 317598315} + 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: 728662089} + - {fileID: 334683060} + m_Father: {fileID: 1532369071} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &317598317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114268859023028438, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 317598315} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 1 + actualBoundaries: {fileID: 728662088} + actualHeadset: {fileID: 1518809420} + actualLeftController: {fileID: 234960657} + actualRightController: {fileID: 108752127} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 1836021409} + modelAliasRightController: {fileID: 1273873653} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_SteamVRSystem + descriptionIndex: 0 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_SteamVRBoundaries + descriptionIndex: 0 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_SteamVRHeadset + descriptionIndex: 0 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_SteamVRController + descriptionIndex: 0 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_SteamVRTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_NoHand + descriptionIndex: 0 +--- !u!1 &334683059 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1335919602198244, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 334683060} + - component: {fileID: 334683061} + m_Layer: 0 + m_Name: '[SteamVR]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &334683060 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4831887068810232, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 334683059} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 317598316} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &334683061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114699381408867346, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 334683059} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e979227f3384fac4b8ca0b3550bf005c, type: 3} + m_Name: + m_EditorClassIdentifier: + externalCamera: {fileID: 0} + externalCameraConfigPath: externalcamera.cfg +--- !u!1 &343410512 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 343410513} + - component: {fileID: 343410515} + - component: {fileID: 343410514} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &343410513 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 343410512} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1334421953} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &343410514 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 343410512} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Play Haptics +--- !u!222 &343410515 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 343410512} +--- !u!1 &359452183 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1400843197843814, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 359452184} + - component: {fileID: 359452186} + - component: {fileID: 359452185} + m_Layer: 0 + m_Name: Capsule Hand Right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &359452184 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4322766919459398, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 359452183} + m_LocalRotation: {x: 0.000000115202326, y: -0.7071067, z: -0.7071068, w: -0.00000011520231} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 444716542} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -89.980194, y: 180, z: 0} +--- !u!114 &359452185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114348116680822976, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 359452183} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8bcd03e00992e084c8be61565d44b8bd, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &359452186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114321299249112246, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 359452183} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a04122797dd84ca43a07055f12d91e0f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &371949126 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1651281340082060, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 371949127} + - component: {fileID: 371949129} + - component: {fileID: 371949128} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &371949127 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4475980625765350, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 371949126} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.800004} + m_LocalScale: {x: 0.08000002, y: 0.08000001, z: 0.80000013} + m_Children: [] + m_Father: {fileID: 648673135} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &371949128 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23942193348524890, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 371949126} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &371949129 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33225022897612286, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 371949126} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &391178166 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1769053551462624, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 391178167} + - component: {fileID: 391178168} + m_Layer: 0 + m_Name: AttachPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &391178167 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4188363941038158, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 391178166} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 930951566} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &391178168 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 54990021373575528, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 391178166} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &394221902 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 394221905} + - component: {fileID: 394221904} + - component: {fileID: 394221903} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &394221903 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 394221902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &394221904 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 394221902} +--- !u!224 &394221905 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 394221902} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1953535382} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &404715962 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1991782692603726, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 404715963} + - component: {fileID: 404715964} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &404715963 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4533335261981272, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 404715962} + m_LocalRotation: {x: 0.15511838, y: -0.22281167, z: 0.71685785, w: -0.6421901} + m_LocalPosition: {x: 0.260477, y: 0.22535107, z: -0.1192472} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1542414820} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 24.403599, y: 35.2679, z: -62.080498} +--- !u!136 &404715964 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136296273948937674, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 404715962} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.039570004 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &411771057 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 411771058} + - component: {fileID: 411771060} + - component: {fileID: 411771059} + m_Layer: 8 + m_Name: LeftForearmModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &411771058 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 411771057} + m_LocalRotation: {x: 0.0000000055166502, y: 0.0000000055166636, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.1361, y: 0, z: 0} + m_LocalScale: {x: 0.12000012, y: 0.14000012, z: 0.12} + m_Children: [] + m_Father: {fileID: 1284476444} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!23 &411771059 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 411771057} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &411771060 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 411771057} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &419494049 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1684623231336640, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 419494050} + - component: {fileID: 419494052} + - component: {fileID: 419494051} + m_Layer: 0 + m_Name: ControllerManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &419494050 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4068599883126506, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 419494049} + 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: 77031043} + - {fileID: 134775172} + m_Father: {fileID: 618659444} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &419494051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114839601185984422, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 419494049} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &419494052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114145648023286692, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 419494049} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3e1ce31d654631d43baf0c1ca39fcdff, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &438065899 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1105698837829572, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 438065900} + - component: {fileID: 438065901} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &438065900 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4401234900509184, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 438065899} + m_LocalRotation: {x: 0.20731795, y: 0.00903069, z: 0.027791852, w: -0.9778371} + m_LocalPosition: {x: 0.20662276, y: 0.3090631, z: -0.06791538} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1299871813} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 8.5308, y: -7.0464997, z: 11.571899} +--- !u!136 &438065901 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136246960581764738, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 438065899} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.03365 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &444716541 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1619615446804074, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 444716542} + m_Layer: 0 + m_Name: Capsule Hands + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &444716542 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4282954864090846, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 444716541} + 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: 900486433} + - {fileID: 359452184} + m_Father: {fileID: 1563294226} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &448739078 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1136459744171206, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 448739079} + - component: {fileID: 448739081} + - component: {fileID: 448739080} + m_Layer: 0 + m_Name: LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &448739079 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4373862919206056, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448739078} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2, y: 1.2, z: 0.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 473796923} + - {fileID: 584560471} + m_Father: {fileID: 669998280} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &448739080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114928006183831410, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448739078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!114 &448739081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114746264877403140, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448739078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0893f0c8a7712e8458dc3722eef95aca, type: 3} + m_Name: + m_EditorClassIdentifier: + selected: 0 +--- !u!1 &450860296 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1244666593593096, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 450860297} + m_Layer: 0 + m_Name: LeftHandAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &450860297 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4385892666093362, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 450860296} + 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: 1707304023} + m_Father: {fileID: 1288073601} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &454177224 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1417231919781024, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 454177225} + - component: {fileID: 454177227} + - component: {fileID: 454177226} + m_Layer: 0 + m_Name: VerticalPlane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &454177225 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4119479756697708, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 454177224} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.00001, z: 0.1} + m_Children: [] + m_Father: {fileID: 661146616} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!23 &454177226 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23328950667591426, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 454177224} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 2100000, guid: 5074e50ed3f02f64ab7f39096a5590bc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &454177227 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33867013637699194, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 454177224} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &457387804 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1786545551724282, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 457387805} + - component: {fileID: 457387806} + m_Layer: 0 + m_Name: WindowsMR + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &457387805 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4893396583408570, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 457387804} + 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: 618659444} + m_Father: {fileID: 1532369071} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &457387806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114026570853678028, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 457387804} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 0 + actualBoundaries: {fileID: 618659443} + actualHeadset: {fileID: 1430808219} + actualLeftController: {fileID: 77031042} + actualRightController: {fileID: 134775171} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 1325915189} + modelAliasRightController: {fileID: 1147874357} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_WindowsMR + descriptionIndex: 0 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_WindowsMRBoundaries + descriptionIndex: 0 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_WindowsMRHeadset + descriptionIndex: 0 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_WindowsMRController + descriptionIndex: 0 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_FallbackTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_FallbackHand + descriptionIndex: 0 +--- !u!1 &473796922 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1504681646819904, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 473796923} + - component: {fileID: 473796925} + - component: {fileID: 473796924} + m_Layer: 0 + m_Name: Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &473796923 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4147229079044952, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 473796922} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0} + m_LocalScale: {x: 0.025, y: 0.025, z: 0.025} + m_Children: + - {fileID: 1227837643} + m_Father: {fileID: 448739079} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &473796924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23010861614429216, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 473796922} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 167fe894cb53b584bbce353eb367fbda, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &473796925 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33597786634356256, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 473796922} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &477211993 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1742251324} + m_Modifications: + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.z + value: -0.601 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.x + value: 0.621 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 1.1900024 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 487 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 251.2 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 114642603537886326, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Text + value: 'Right Forearm + + BHaptics' + objectReference: {fileID: 0} + - target: {fileID: 1678482369823558, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + propertyPath: m_Name + value: Left Forearm Help Text (1) + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.x + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.z + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.y + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 251.2 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 251.2 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 487 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 487 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + m_IsPrefabParent: 0 +--- !u!224 &477211994 stripped +RectTransform: + m_PrefabParentObject: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + m_PrefabInternal: {fileID: 477211993} +--- !u!1001 &494241449 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1742251324} + m_Modifications: + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.z + value: -0.601 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.x + value: -0.622 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 1.19 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 474.9 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 251.2 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 114642603537886326, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Text + value: 'Left Forearm + + BHaptics' + objectReference: {fileID: 0} + - target: {fileID: 1678482369823558, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + propertyPath: m_Name + value: Left Forearm Help Text + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.x + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.z + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.y + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 251.2 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 251.2 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 474.9 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 474.9 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + m_IsPrefabParent: 0 +--- !u!224 &494241450 stripped +RectTransform: + m_PrefabParentObject: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + m_PrefabInternal: {fileID: 494241449} +--- !u!1 &498946760 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 498946761} + - component: {fileID: 498946763} + - component: {fileID: 498946762} + m_Layer: 5 + m_Name: tactshoes_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &498946761 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 498946760} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 62777202} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.5999999, y: 0.20000076} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &498946762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 498946760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 6c318c39e5dd83c42ade86630def5356, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &498946763 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 498946760} +--- !u!1 &514078124 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 514078125} + - component: {fileID: 514078126} + m_Layer: 5 + m_Name: '[Glove] Right' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &514078125 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 514078124} + 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: 1947528022} + - {fileID: 147963452} + m_Father: {fileID: 1006506396} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8.19, y: -3.11} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &514078126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 514078124} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &538772791 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1058056810139098, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 538772792} + - component: {fileID: 538772793} + m_Layer: 0 + m_Name: palm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &538772792 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4937817609411244, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 538772791} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0818, y: 0.1158, z: -0.0115} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1756296556} + m_Father: {fileID: 2483437} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &538772793 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 65880118717106682, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 538772791} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.06, y: 0.02, z: 0.07} + m_Center: {x: 0, y: 0, z: -0.005} +--- !u!1 &545000209 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 545000210} + - component: {fileID: 545000212} + - component: {fileID: 545000211} + m_Layer: 5 + m_Name: tactglove_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &545000210 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 545000209} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1992577263} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 19.89, y: 0.67999935} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &545000211 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 545000209} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: f829abb8eb45bfb408c8c3a8e673d569, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &545000212 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 545000209} +--- !u!1 &559557195 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1469947891403574, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 559557196} + m_Layer: 0 + m_Name: TrackerAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &559557196 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4910676698546976, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559557195} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1288073601} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &584085274 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1597676099965282, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 584085275} + - component: {fileID: 584085277} + - component: {fileID: 584085276} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &584085275 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224053319487576386, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 584085274} + 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: 212498740} + - {fileID: 2133304075} + m_Father: {fileID: 114522029} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 51, y: -18} + m_SizeDelta: {x: 82, y: 16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &584085276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114742504230969498, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 584085274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!222 &584085277 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222327102156038586, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 584085274} +--- !u!1 &584560470 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1865430158937836, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 584560471} + m_Layer: 0 + m_Name: Guides + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &584560471 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4233458838164276, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 584560470} + 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: 1701685733} + - {fileID: 1611547332} + m_Father: {fileID: 448739079} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &588126220 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1078755043845854, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 588126221} + - component: {fileID: 588126222} + m_Layer: 0 + m_Name: AttachPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &588126221 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4516849557337434, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 588126220} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 863184525} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &588126222 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 54071174914263672, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 588126220} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &603351672 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1168690500971056, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 603351673} + - component: {fileID: 603351674} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &603351673 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4230833658733692, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 603351672} + m_LocalRotation: {x: 0.18438557, y: -0.10542023, z: 0.17531344, w: -0.9613292} + m_LocalPosition: {x: 0.25975862, y: 0.29252154, z: -0.0648081} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1516915512} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 8.5308, y: 9.6658, z: 0} +--- !u!136 &603351674 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136295908951582362, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 603351672} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.03038 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &611413202 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 611413203} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &611413203 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 611413202} + 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: 1423808482} + m_Father: {fileID: 1924638392} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &617351938 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 617351939} + - component: {fileID: 617351941} + - component: {fileID: 617351940} + m_Layer: 5 + m_Name: bhaptics-background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &617351939 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 617351938} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1506764931} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 3} + m_SizeDelta: {x: 32, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &617351940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 617351938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 28dbec185ab0b764fbcf7a3d04402f9f, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &617351941 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 617351938} +--- !u!1 &618659443 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1707210071468292, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 618659444} + m_Layer: 0 + m_Name: '[WindowsMR_CameraRig]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &618659444 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4706214930644432, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 618659443} + 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: 1430808220} + - {fileID: 419494050} + m_Father: {fileID: 457387805} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &625649193 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 625649194} + - component: {fileID: 625649195} + m_Layer: 0 + m_Name: Left TACTOSY + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &625649194 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 625649193} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1906596484} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &625649195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 625649193} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b66cbf23014e0364fb0c144eb87cb5ba, type: 3} + m_Name: + m_EditorClassIdentifier: + affectedBodyPart: {fileID: 11400000, guid: cb48685e7bd87e047a590c721468df91, type: 2} + hapticDuration: 100 + hapticSystemInfo: + systemName: Bhaptics + deviceName: Left TACTOSY + affectedBodyFileLocation: BodyCoordinates/LeftForearm + connectedSDKTypeName: + bhapticsMapping: {fileID: 11400000, guid: 7c6ecbdc42e31ab4db2f3a1ea04b3da9, type: 2} +--- !u!1 &632842903 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 632842904} + - component: {fileID: 632842905} + m_Layer: 0 + m_Name: Right Controller + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &632842904 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 632842903} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1368876434} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &632842905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 632842903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5c0be7d8c5eaf734ba7c5cc56c7cc00d, type: 3} + m_Name: + m_EditorClassIdentifier: + affectedBodyPart: {fileID: 11400000, guid: 6b0659655d60c6a4287ec4f3c9b2d83b, type: 2} + hapticDuration: 100 + hapticSystemInfo: + systemName: Vive + deviceName: Right Controller + affectedBodyFileLocation: BodyCoordinates/RightHand + connectedSDKTypeName: VRTK.SDK_SteamVRController, Assembly-CSharp, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + vibration: + actionPath: + needsReinit: 0 + frequency: 100 + isRightController: 1 +--- !u!1 &634997059 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 634997060} + - component: {fileID: 634997062} + - component: {fileID: 634997061} + m_Layer: 5 + m_Name: tactglove_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &634997060 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 634997059} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1992577263} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 1.170002, y: 0.6799991} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &634997061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 634997059} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 65de9deb6699d1e438e3b78d26840493, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &634997062 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 634997059} +--- !u!1 &640547552 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 640547553} + - component: {fileID: 640547555} + - component: {fileID: 640547554} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &640547553 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 640547552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2005560391} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &640547554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 640547552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &640547555 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 640547552} +--- !u!1 &640791810 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1913793885614386, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 640791811} + - component: {fileID: 640791812} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &640791811 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4555523503177122, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 640791810} + m_LocalRotation: {x: -0.15511829, y: -0.22281176, z: 0.7168581, w: 0.6421898} + m_LocalPosition: {x: -0.2604772, y: 0.22535086, z: -0.1192472} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 663617232} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 24.403599, y: -35.2679, z: 62.080498} +--- !u!136 &640791812 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136941521936107334, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 640791810} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.039570004 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &648673132 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1460125336803618, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 648673135} + - component: {fileID: 648673134} + - component: {fileID: 648673133} + m_Layer: 0 + m_Name: Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &648673133 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23478801334923202, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 648673132} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 167fe894cb53b584bbce353eb367fbda, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &648673134 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33433640222341766, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 648673132} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &648673135 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4035418218858506, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 648673132} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.025, y: 0.025, z: 0.025} + m_Children: + - {fileID: 371949127} + m_Father: {fileID: 2137910512} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &653952131 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 653952133} + - component: {fileID: 653952132} + m_Layer: 0 + m_Name: '[bHapticsManager]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &653952132 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 653952131} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4f3087c4f0343446a5a7a3f238d4611, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &653952133 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 653952131} + 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: 1006506396} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &661146615 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1596631767448288, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 661146616} + m_Layer: 0 + m_Name: Guides + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &661146616 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4409546273568774, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 661146615} + 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: 974857488} + - {fileID: 454177225} + m_Father: {fileID: 2137910512} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &663617231 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1936414623020992, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 663617232} + - component: {fileID: 663617233} + m_Layer: 0 + m_Name: thumb + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &663617232 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4073106246790308, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 663617231} + 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: 704690296} + - {fileID: 640791811} + - {fileID: 296436641} + m_Father: {fileID: 1819287518} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &663617233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114008108079145074, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 663617231} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &669998279 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1120466931571954, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 669998280} + - component: {fileID: 669998281} + m_Layer: 0 + m_Name: '[VRSimulator_CameraRig]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &669998280 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4965971849994896, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 669998279} + 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: 1152297872} + - {fileID: 1537547127} + - {fileID: 448739079} + - {fileID: 2137910512} + m_Father: {fileID: 930465347} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &669998281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114481269283045112, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 669998279} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52d0ccd621417664ca1f1123b9488a27, type: 3} + m_Name: + m_EditorClassIdentifier: + showControlHints: 1 + hideHandsAtSwitch: 0 + resetHandsAtSwitch: 1 + showHandAxisHelpers: 1 + lockMouseToView: 1 + mouseMovementInput: 0 + handMoveMultiplier: 0.2 + handRotationMultiplier: 30 + playerMoveMultiplier: 5 + playerRotationMultiplier: 0.5 + playerSprintMultiplier: 2 + lockedCursorMultiplier: 5 + leftHandColor: {r: 1, g: 0, b: 0, a: 1} + rightHandColor: {r: 0, g: 1, b: 0, a: 1} + mouseMovementKey: 325 + toggleControlHints: 282 + toggleMouseLock: 285 + changeHands: 9 + handsOnOff: 308 + rotationPosition: 304 + changeAxis: 306 + distancePickupLeft: 323 + distancePickupRight: 324 + distancePickupModifier: 306 + moveForward: 119 + moveLeft: 97 + moveBackward: 115 + moveRight: 100 + sprint: 304 + triggerAlias: 324 + gripAlias: 323 + touchpadAlias: 113 + buttonOneAlias: 101 + buttonTwoAlias: 114 + startMenuAlias: 102 + touchModifier: 116 + hairTouchModifier: 104 +--- !u!1 &688036711 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 688036712} + m_Layer: 0 + m_Name: World + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &688036712 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 688036711} + 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: 37548868} + - {fileID: 1910505374} + - {fileID: 1783872185} + - {fileID: 1841587747} + - {fileID: 1650197131} + - {fileID: 1792996288} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &689336097 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 689336098} + - component: {fileID: 689336101} + - component: {fileID: 689336100} + - component: {fileID: 689336099} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &689336098 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 689336097} + 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: 1613062976} + - {fileID: 1125272728} + m_Father: {fileID: 235736792} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &689336099 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 689336097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 316364393} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 16 + m_Viewport: {fileID: 1613062976} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1125272729} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &689336100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 689336097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &689336101 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 689336097} +--- !u!1 &704690295 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1617939801711994, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 704690296} + - component: {fileID: 704690297} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &704690296 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4347552161531878, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 704690295} + m_LocalRotation: {x: -0.15511829, y: -0.22281176, z: 0.7168581, w: 0.6421898} + m_LocalPosition: {x: -0.24069634, y: 0.23002677, z: -0.15240854} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 663617232} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 24.403599, y: -35.2679, z: 62.080498} +--- !u!136 &704690297 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136336396805092656, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 704690295} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.054220006 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &716242861 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 716242862} + - component: {fileID: 716242866} + - component: {fileID: 716242865} + - component: {fileID: 716242864} + - component: {fileID: 716242863} + m_Layer: 0 + m_Name: RightControllerScriptAlias + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &716242862 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 716242861} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 304869209} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &716242863 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 716242861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 947b27445602ed640b885db7e667dfc1, type: 3} + m_Name: + m_EditorClassIdentifier: + grabButton: 7 + grabPrecognition: 0 + throwMultiplier: 1 + createRigidBodyWhenNotTouching: 0 + controllerAttachPoint: {fileID: 0} + controllerEvents: {fileID: 0} + interactTouch: {fileID: 0} +--- !u!114 &716242864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 716242861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65eb64f0f2fd6d64faddbcf5d7d3bdbb, type: 3} + m_Name: + m_EditorClassIdentifier: + useButton: 3 + controllerEvents: {fileID: 0} + interactTouch: {fileID: 0} + interactGrab: {fileID: 0} +--- !u!114 &716242865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 716242861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64e104da36bd3b04b90c6ae969ac66dc, type: 3} + m_Name: + m_EditorClassIdentifier: + customColliderContainer: {fileID: 0} +--- !u!114 &716242866 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 716242861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eba3cd5456cd79e49948f5ceb58544b4, type: 3} + m_Name: + m_EditorClassIdentifier: + axisFidelity: 1 + senseAxisForceZeroThreshold: 0.15 + senseAxisPressThreshold: 0.95 + triggerClickThreshold: 1 + triggerForceZeroThreshold: 0.01 + triggerAxisZeroOnUntouch: 0 + gripClickThreshold: 1 + gripForceZeroThreshold: 0.01 + gripAxisZeroOnUntouch: 0 + triggerPressed: 0 + triggerTouched: 0 + triggerHairlinePressed: 0 + triggerClicked: 0 + triggerAxisChanged: 0 + triggerSenseAxisChanged: 0 + gripPressed: 0 + gripTouched: 0 + gripHairlinePressed: 0 + gripClicked: 0 + gripAxisChanged: 0 + touchpadPressed: 0 + touchpadTouched: 0 + touchpadAxisChanged: 0 + touchpadSenseAxisChanged: 0 + touchpadTwoTouched: 0 + touchpadTwoPressed: 0 + touchpadTwoAxisChanged: 0 + buttonOnePressed: 0 + buttonOneTouched: 0 + buttonTwoPressed: 0 + buttonTwoTouched: 0 + startMenuPressed: 0 + middleFingerSenseAxisChanged: 0 + ringFingerSenseAxisChanged: 0 + pinkyFingerSenseAxisChanged: 0 + gripSenseAxisChanged: 0 + gripSensePressed: 0 + controllerVisible: 1 +--- !u!1 &718784007 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1308800263517120, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 718784008} + - component: {fileID: 718784009} + m_Layer: 0 + m_Name: LeftEyeAnchor + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &718784008 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4595634873818428, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 718784007} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1288073601} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &718784009 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 20337578737832174, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 718784007} + m_Enabled: 0 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 1 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &724699685 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1447367261343084, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 724699686} + - component: {fileID: 724699691} + - component: {fileID: 724699690} + - component: {fileID: 724699689} + - component: {fileID: 724699688} + - component: {fileID: 724699687} + m_Layer: 0 + m_Name: Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &724699686 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4510259370964428, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 724699685} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2024778040} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &724699687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114791458514799584, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 724699685} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!114 &724699688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114781073883826116, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 724699685} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ddd61e3d890b46740a8f450ba5a27aa3, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!81 &724699689 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 81642823576855584, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 724699685} + m_Enabled: 1 +--- !u!124 &724699690 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 124062955869902324, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 724699685} + m_Enabled: 1 +--- !u!20 &724699691 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 20973667912095906, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 724699685} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.05 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &728662088 stripped +GameObject: + m_PrefabParentObject: {fileID: 146900, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + m_PrefabInternal: {fileID: 1775261156} +--- !u!4 &728662089 stripped +Transform: + m_PrefabParentObject: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + m_PrefabInternal: {fileID: 1775261156} +--- !u!1 &768331923 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 768331924} + - component: {fileID: 768331927} + - component: {fileID: 768331926} + - component: {fileID: 768331925} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &768331924 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 768331923} + 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: 789891344} + m_Father: {fileID: 2118958340} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -17, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &768331925 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 768331923} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &768331926 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 768331923} +--- !u!114 &768331927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 768331923} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &772892185 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1878816027686210, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 772892186} + - component: {fileID: 772892187} + m_Layer: 0 + m_Name: middle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &772892186 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4302516232365288, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 772892185} + 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: 1352095974} + - {fileID: 1840722477} + - {fileID: 75109853} + m_Father: {fileID: 1819287518} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &772892187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114502366536740890, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 772892185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &776113109 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1874675347595454, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 776113110} + - component: {fileID: 776113112} + - component: {fileID: 776113111} + m_Layer: 0 + m_Name: Leap Service Provider + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &776113110 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4958595387033106, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 776113109} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 791481508} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &776113111 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 20080248610181042, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 776113109} + m_Enabled: 0 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &776113112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114308172612242388, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 776113109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abb0e8dd6c809854f8fea5e0976884f8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &777583214 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1443261470633526, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 777583215} + - component: {fileID: 777583216} + m_Layer: 0 + m_Name: pinky + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &777583215 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4104046538619828, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 777583214} + 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: 821959790} + - {fileID: 37851355} + - {fileID: 2062698094} + m_Father: {fileID: 2483437} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &777583216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114268276142451162, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 777583214} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &786639310 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1087802710260426, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 786639311} + - component: {fileID: 786639312} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &786639311 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4292867884886830, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 786639310} + m_LocalRotation: {x: -0.1843855, y: -0.10542028, z: 0.17531382, w: 0.9613291} + m_LocalPosition: {x: -0.25975886, y: 0.2925213, z: -0.0648081} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1641913276} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 8.5308, y: -9.6659, z: 0} +--- !u!136 &786639312 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136878859812035548, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 786639310} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.03038 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &789891343 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 789891344} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &789891344 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 789891343} + 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: 1953535382} + m_Father: {fileID: 768331924} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 28} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &791481507 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1437707902571696, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 791481508} + - component: {fileID: 791481509} + m_Layer: 0 + m_Name: Leap Motion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &791481508 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4796957222874418, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 791481507} + 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: 776113110} + - {fileID: 1563294226} + - {fileID: 1806969734} + m_Father: {fileID: 1004409024} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &791481509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114480927189018136, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 791481507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb8f8839ee256bb458e1657c1ee40572, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &801088930 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1726544739789060, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 801088931} + - component: {fileID: 801088932} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &801088931 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4010605441118318, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801088930} + m_LocalRotation: {x: 0.18438557, y: -0.10542023, z: 0.17531344, w: -0.9613292} + m_LocalPosition: {x: 0.2648648, y: 0.2985867, z: -0.04743135} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1516915512} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 8.5308, y: 9.6658, z: 0} +--- !u!136 &801088932 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136940396560105424, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801088930} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.023820002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &807001122 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1735374127352810, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 807001123} + - component: {fileID: 807001124} + m_Layer: 0 + m_Name: pinky + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &807001123 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4872884040893530, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 807001122} + 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: 1468879366} + - {fileID: 851141629} + - {fileID: 835756278} + m_Father: {fileID: 1819287518} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &807001124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114527949847707826, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 807001122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &814415649 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1858662757229848, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 814415650} + - component: {fileID: 814415651} + m_Layer: 0 + m_Name: ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &814415650 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4287379973110144, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 814415649} + 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: 1827742811} + - {fileID: 83942687} + - {fileID: 1216948824} + m_Father: {fileID: 1819287518} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &814415651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114345556751456086, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 814415649} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &821959789 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1697299808109492, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 821959790} + - component: {fileID: 821959791} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &821959790 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4857470690821674, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 821959789} + m_LocalRotation: {x: 0.24710183, y: 0.051211912, z: -0.063631974, w: -0.96554077} + m_LocalPosition: {x: 0.18557806, y: 0.29303604, z: -0.1076026} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 777583215} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 6.0762, y: -15.1172, z: 19.823} +--- !u!136 &821959791 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136412223253988268, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 821959789} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.040740006 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &835756277 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1905754823589460, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 835756278} + - component: {fileID: 835756279} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &835756278 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4766536300612854, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 835756277} + m_LocalRotation: {x: -0.24710186, y: 0.0512118, z: -0.06363156, w: 0.96554077} + m_LocalPosition: {x: -0.18004401, y: 0.31301993, z: -0.07055047} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 807001123} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 6.0762, y: 15.1172, z: -19.823} +--- !u!136 &835756279 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136646793541135700, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 835756277} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.023960002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &847052864 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 847052865} + - component: {fileID: 847052866} + m_Layer: 5 + m_Name: '[Tot] Front' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &847052865 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 847052864} + 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: 1726639956} + m_Father: {fileID: 1006506396} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.32, y: 2.48} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &847052866 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 847052864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &851141628 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1195534620198154, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 851141629} + - component: {fileID: 851141630} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &851141629 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4422642986869174, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 851141628} + m_LocalRotation: {x: -0.24710186, y: 0.0512118, z: -0.06363156, w: 0.96554077} + m_LocalPosition: {x: -0.18226439, y: 0.3050023, z: -0.08541584} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 807001123} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 6.0762, y: 15.1172, z: -19.823} +--- !u!136 &851141630 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136850018417713940, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 851141628} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.02611 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &857749983 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 857749984} + - component: {fileID: 857749986} + - component: {fileID: 857749985} + m_Layer: 8 + m_Name: RightHandModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &857749984 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 857749983} + m_LocalRotation: {x: -0.000018344554, y: 0.000018407774, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.0798, y: 0, z: 0} + m_LocalScale: {x: 0.09, y: 0.07, z: 0.09} + m_Children: [] + m_Father: {fileID: 1284476441} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!23 &857749985 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 857749983} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &857749986 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 857749983} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &863184524 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1256209495658620, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 863184525} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &863184525 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4324900632257732, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 863184524} + 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: 588126221} + m_Father: {fileID: 1843169335} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &865742331 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 865742332} + - component: {fileID: 865742333} + m_Layer: 0 + m_Name: Left Controller + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &865742332 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 865742331} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1368876434} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &865742333 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 865742331} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5c0be7d8c5eaf734ba7c5cc56c7cc00d, type: 3} + m_Name: + m_EditorClassIdentifier: + affectedBodyPart: {fileID: 11400000, guid: 36d64ff1f7b285e4abb8514b69c9fe2c, type: 2} + hapticDuration: 100 + hapticSystemInfo: + systemName: Vive + deviceName: Left Controller + affectedBodyFileLocation: BodyCoordinates/LeftHand + connectedSDKTypeName: VRTK.SDK_SteamVRController, Assembly-CSharp, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + vibration: + actionPath: + needsReinit: 0 + frequency: 100 + isRightController: 0 +--- !u!1 &900486432 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1964633185906870, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 900486433} + - component: {fileID: 900486435} + - component: {fileID: 900486434} + m_Layer: 0 + m_Name: Capsule Hand Left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &900486433 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4219523294204700, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 900486432} + m_LocalRotation: {x: 0.000000115202326, y: -0.7071067, z: -0.7071068, w: -0.00000011520231} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 444716542} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.980194, y: 180, z: 0} +--- !u!114 &900486434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114752439104306834, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 900486432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8bcd03e00992e084c8be61565d44b8bd, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &900486435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114049565823993872, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 900486432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a04122797dd84ca43a07055f12d91e0f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &929526288 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 929526289} + - component: {fileID: 929526291} + - component: {fileID: 929526290} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &929526289 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 929526288} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1175871414} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &929526290 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 929526288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &929526291 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 929526288} +--- !u!1 &930465345 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1911259997843678, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 930465347} + - component: {fileID: 930465346} + m_Layer: 0 + m_Name: VRSimulator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &930465346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114748454163793994, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 930465345} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 0 + actualBoundaries: {fileID: 669998279} + actualHeadset: {fileID: 1462477657} + actualLeftController: {fileID: 448739078} + actualRightController: {fileID: 2137910511} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 473796922} + modelAliasRightController: {fileID: 648673132} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_SimSystem + descriptionIndex: 0 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_SimBoundaries + descriptionIndex: 0 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_SimHeadset + descriptionIndex: 0 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_SimController + descriptionIndex: 0 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_FallbackTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_FallbackHand + descriptionIndex: 0 +--- !u!4 &930465347 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4905110860467342, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 930465345} + 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: 669998280} + m_Father: {fileID: 1532369071} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &930951565 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1471410089643362, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 930951566} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &930951566 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4372011469334450, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 930951565} + 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: 391178167} + m_Father: {fileID: 1087430416} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &940169797 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 940169798} + - component: {fileID: 940169799} + m_Layer: 5 + m_Name: '[Tosy] ForearmR' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &940169798 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 940169797} + 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: 1647094081} + m_Father: {fileID: 1006506396} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8.54, y: 2.56} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &940169799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 940169797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &974857487 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1964071249290786, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 974857488} + - component: {fileID: 974857490} + - component: {fileID: 974857489} + m_Layer: 0 + m_Name: HorizontalPlane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &974857488 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4415498974874364, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 974857487} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.00001, z: 0.1} + m_Children: [] + m_Father: {fileID: 661146616} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &974857489 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23800681542671876, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 974857487} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 2100000, guid: 5074e50ed3f02f64ab7f39096a5590bc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &974857490 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33317395431219816, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 974857487} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &981941550 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 981941551} + - component: {fileID: 981941553} + - component: {fileID: 981941552} + m_Layer: 8 + m_Name: LeftHandModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &981941551 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 981941550} + m_LocalRotation: {x: -0.000018402257, y: 0.00001835007, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.0772, y: 0, z: 0} + m_LocalScale: {x: 0.090000056, y: 0.07000006, z: 0.089999996} + m_Children: [] + m_Father: {fileID: 1284476449} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!23 &981941552 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 981941550} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &981941553 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 981941550} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &991635713 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 991635714} + - component: {fileID: 991635716} + - component: {fileID: 991635715} + m_Layer: 5 + m_Name: L + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &991635714 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 991635713} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1506764931} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -9.32, y: 8.19} + m_SizeDelta: {x: 1.06, y: 1.39} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &991635715 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 991635713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 8de3fc29048cb0543a9d628122a6d8ea, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &991635716 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 991635713} +--- !u!1 &1004409023 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1114917664990482, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1004409024} + m_Layer: 0 + m_Name: Hands + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1004409024 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4914436192568478, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1004409023} + 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: 791481508} + m_Father: {fileID: 1532369071} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1006506395 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1006506396} + - component: {fileID: 1006506399} + - component: {fileID: 1006506398} + - component: {fileID: 1006506397} + m_Layer: 5 + m_Name: bHapticsPrefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1006506396 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1006506395} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1506764931} + - {fileID: 1255657396} + - {fileID: 940169798} + - {fileID: 1468646422} + - {fileID: 847052865} + - {fileID: 152480868} + - {fileID: 1992577263} + - {fileID: 514078125} + - {fileID: 1689996211} + - {fileID: 62777202} + m_Father: {fileID: 653952133} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: -0.000000014901161, y: 0} + m_SizeDelta: {x: 32, y: 24.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1006506397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1006506395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1006506398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1006506395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1006506399 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1006506395} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1010700833 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1752558603995118, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1010700834} + - component: {fileID: 1010700836} + - component: {fileID: 1010700835} + m_Layer: 0 + m_Name: CenterEyeAnchor + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1010700834 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4275042247198080, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1010700833} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1288073601} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1010700835 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 20032596465791040, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1010700833} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 1000 + field of view: 90 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!81 &1010700836 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 81718092898818214, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1010700833} + m_Enabled: 1 +--- !u!1 &1087430415 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1545926306520640, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1087430416} + - component: {fileID: 1087430418} + - component: {fileID: 1087430417} + m_Layer: 0 + m_Name: RightHandAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1087430416 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4927757308597710, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1087430415} + 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: 930951566} + m_Father: {fileID: 2024778040} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1087430417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114374662426475888, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1087430415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!114 &1087430418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114720659735242642, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1087430415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a56f0178eefe7b9409460ae29588f961, type: 3} + m_Name: + m_EditorClassIdentifier: + nodeType: 5 + index: 0 + triggerAxisName: RightTrigger + gripAxisName: RightGrip + touchpadHorizontalAxisName: RightTrackpadHorizontal + touchpadVerticalAxisName: RightTrackpadVertical +--- !u!1 &1094810988 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1094810990} + - component: {fileID: 1094810989} + m_Layer: 0 + m_Name: Haptic Reaction + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1094810989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1094810988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9debd9feb2c98040b9bdf03ddc36536, type: 3} + m_Name: + m_EditorClassIdentifier: + bodyPart: 15 + hapticPattern: {fileID: 11400000, guid: e945ad208e7c58f4b9889d37b657d2ca, type: 2} +--- !u!4 &1094810990 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1094810988} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1841587747} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1102824642 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1102824645} + - component: {fileID: 1102824644} + - component: {fileID: 1102824643} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1102824643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1102824642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1102824644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1102824642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1102824645 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1102824642} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1125272727 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1125272728} + - component: {fileID: 1125272731} + - component: {fileID: 1125272730} + - component: {fileID: 1125272729} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1125272728 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1125272727} + 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: 1544560132} + m_Father: {fileID: 689336098} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1125272729 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1125272727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2048806586} + m_HandleRect: {fileID: 2048806585} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &1125272730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1125272727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1125272731 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1125272727} +--- !u!1 &1146686599 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1718441947272428, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1146686600} + - component: {fileID: 1146686601} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1146686600 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4626720970581652, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1146686599} + m_LocalRotation: {x: -0.1843855, y: -0.10542028, z: 0.17531382, w: 0.9613291} + m_LocalPosition: {x: -0.25145003, y: 0.28265196, z: -0.09308395} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1641913276} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 8.5308, y: -9.6659, z: 0} +--- !u!136 &1146686601 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136626176615973570, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1146686599} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.047780003 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1147874357 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1164736652621108, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1147874358} + m_Layer: 0 + m_Name: RightControllerModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1147874358 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4876794383662070, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1147874357} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 134775172} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1152297871 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1064360500507578, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1152297872} + - component: {fileID: 1152297875} + - component: {fileID: 1152297874} + - component: {fileID: 1152297873} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1152297872 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224855823348637950, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1152297871} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 114522029} + - {fileID: 1287455576} + m_Father: {fileID: 669998280} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1152297873 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114894191058346284, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1152297871} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1152297874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114326158156049784, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1152297871} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1152297875 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 223786215626120172, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1152297871} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 1462477659} + m_PlaneDistance: 0.5 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1155796738 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1155796739} + - component: {fileID: 1155796743} + - component: {fileID: 1155796742} + - component: {fileID: 1155796741} + - component: {fileID: 1155796740} + m_Layer: 0 + m_Name: LeftControllerScriptAlias + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1155796739 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1155796738} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 304869209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1155796740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1155796738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 947b27445602ed640b885db7e667dfc1, type: 3} + m_Name: + m_EditorClassIdentifier: + grabButton: 7 + grabPrecognition: 0 + throwMultiplier: 1 + createRigidBodyWhenNotTouching: 0 + controllerAttachPoint: {fileID: 0} + controllerEvents: {fileID: 0} + interactTouch: {fileID: 0} +--- !u!114 &1155796741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1155796738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65eb64f0f2fd6d64faddbcf5d7d3bdbb, type: 3} + m_Name: + m_EditorClassIdentifier: + useButton: 3 + controllerEvents: {fileID: 0} + interactTouch: {fileID: 0} + interactGrab: {fileID: 0} +--- !u!114 &1155796742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1155796738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64e104da36bd3b04b90c6ae969ac66dc, type: 3} + m_Name: + m_EditorClassIdentifier: + customColliderContainer: {fileID: 0} +--- !u!114 &1155796743 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1155796738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eba3cd5456cd79e49948f5ceb58544b4, type: 3} + m_Name: + m_EditorClassIdentifier: + axisFidelity: 1 + senseAxisForceZeroThreshold: 0.15 + senseAxisPressThreshold: 0.95 + triggerClickThreshold: 1 + triggerForceZeroThreshold: 0.01 + triggerAxisZeroOnUntouch: 0 + gripClickThreshold: 1 + gripForceZeroThreshold: 0.01 + gripAxisZeroOnUntouch: 0 + triggerPressed: 0 + triggerTouched: 0 + triggerHairlinePressed: 0 + triggerClicked: 0 + triggerAxisChanged: 0 + triggerSenseAxisChanged: 0 + gripPressed: 0 + gripTouched: 0 + gripHairlinePressed: 0 + gripClicked: 0 + gripAxisChanged: 0 + touchpadPressed: 0 + touchpadTouched: 0 + touchpadAxisChanged: 0 + touchpadSenseAxisChanged: 0 + touchpadTwoTouched: 0 + touchpadTwoPressed: 0 + touchpadTwoAxisChanged: 0 + buttonOnePressed: 0 + buttonOneTouched: 0 + buttonTwoPressed: 0 + buttonTwoTouched: 0 + startMenuPressed: 0 + middleFingerSenseAxisChanged: 0 + ringFingerSenseAxisChanged: 0 + pinkyFingerSenseAxisChanged: 0 + gripSenseAxisChanged: 0 + gripSensePressed: 0 + controllerVisible: 1 +--- !u!1 &1162115786 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1162115787} + - component: {fileID: 1162115788} + m_Layer: 0 + m_Name: Right TACTOSY + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1162115787 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1162115786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1906596484} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1162115788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1162115786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b66cbf23014e0364fb0c144eb87cb5ba, type: 3} + m_Name: + m_EditorClassIdentifier: + affectedBodyPart: {fileID: 11400000, guid: ff0cb3cd8eb0dca47b2cb34973fb27c5, type: 2} + hapticDuration: 100 + hapticSystemInfo: + systemName: Bhaptics + deviceName: Right TACTOSY + affectedBodyFileLocation: BodyCoordinates/RightForearm + connectedSDKTypeName: + bhapticsMapping: {fileID: 11400000, guid: 652417e418b21f743b9c063d19d2d4f3, type: 2} +--- !u!1 &1165664732 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1165664733} + - component: {fileID: 1165664735} + - component: {fileID: 1165664734} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1165664733 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1165664732} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 235736792} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1165664734 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1165664732} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &1165664735 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1165664732} +--- !u!1 &1175871412 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1175871414} + - component: {fileID: 1175871416} + - component: {fileID: 1175871415} + - component: {fileID: 1175871413} + m_Layer: 5 + m_Name: Body Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1175871413 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1175871412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 853051423, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1175871415} + m_Template: {fileID: 2118958340} + m_CaptionText: {fileID: 929526290} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 394221903} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: Option A + m_Image: {fileID: 0} + - m_Text: Option B + m_Image: {fileID: 0} + - m_Text: Option C + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1342166476} + m_MethodName: DropdownBodyPartSelection + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 1175871413} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Dropdown, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Dropdown+DropdownEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!224 &1175871414 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1175871412} + 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: 929526289} + - {fileID: 2107991718} + - {fileID: 2118958340} + m_Father: {fileID: 1342166475} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1175871415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1175871412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1175871416 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1175871412} +--- !u!1 &1190203622 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1945479589542958, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1190203623} + - component: {fileID: 1190203624} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1190203623 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4106760405702672, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1190203622} + m_LocalRotation: {x: 0.19123271, y: -0.05567847, z: 0.07900512, w: -0.9767744} + m_LocalPosition: {x: 0.23825295, y: 0.3131141, z: -0.03890297} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1627909957} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 8.5308, y: 1.7105999, z: 8.6391} +--- !u!136 &1190203624 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136309642309884142, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1190203622} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.025400002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1195523828 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1912988704047734, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1195523829} + - component: {fileID: 1195523830} + m_Layer: 0 + m_Name: forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1195523829 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4077879077816998, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1195523828} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0856, y: 0.105, z: -0.1819} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2483437} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &1195523830 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136934477622181288, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1195523828} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.0205 + m_Height: 0.29100004 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1216948823 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1758921476385182, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1216948824} + - component: {fileID: 1216948825} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1216948824 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4119602282079422, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1216948823} + m_LocalRotation: {x: -0.20731795, y: 0.0090306, z: 0.027792262, w: 0.9778371} + m_LocalPosition: {x: -0.20649122, y: 0.31778064, z: -0.048289925} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 814415650} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 8.5308, y: 7.0464997, z: -11.571899} +--- !u!136 &1216948825 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136806613013171808, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1216948823} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.0253 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1220059042 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1673286107328652, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1220059043} + - component: {fileID: 1220059044} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1220059043 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4299261196859416, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1220059042} + m_LocalRotation: {x: 0.19123271, y: -0.05567847, z: 0.07900512, w: -0.9767744} + m_LocalPosition: {x: 0.23521398, y: 0.30513808, z: -0.059033215} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1627909957} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 8.5308, y: 1.7105999, z: 8.6391} +--- !u!136 &1220059044 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136560004394064246, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1220059042} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.034330003 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1227837642 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1363763836707764, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1227837643} + - component: {fileID: 1227837645} + - component: {fileID: 1227837644} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1227837643 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4209160235473860, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1227837642} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0.800004} + m_LocalScale: {x: 0.08000002, y: 0.08000001, z: 0.80000013} + m_Children: [] + m_Father: {fileID: 473796923} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1227837644 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23233870342336032, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1227837642} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1227837645 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33120070185735714, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1227837642} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1240601295 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1240601296} + - component: {fileID: 1240601298} + - component: {fileID: 1240601297} + m_Layer: 5 + m_Name: Tacot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1240601296 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1240601295} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 152480868} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -2.0900004, y: 1.31} + m_SizeDelta: {x: 11.59, y: 5.45} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1240601297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1240601295} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 4aa71fb0af869ae44875dab406884abb, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1240601298 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1240601295} +--- !u!1 &1245194039 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100128, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1245194040} + m_Layer: 0 + m_Name: RightToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1245194040 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400128, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1245194039} + m_LocalRotation: {x: 0.000000029802322, y: 6.530776e-11, z: -2.3527402e-10, w: 1} + m_LocalPosition: {x: 0.0037335984, y: -0.10492194, z: 0.12640662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2010008178} + m_Father: {fileID: 1469379999} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1255657395 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1255657396} + - component: {fileID: 1255657397} + m_Layer: 5 + m_Name: '[Tosy] ForearmL' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1255657396 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1255657395} + 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: 1399263399} + m_Father: {fileID: 1006506396} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -10.1, y: 2.56} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1255657397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1255657395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1273873653 stripped +GameObject: + m_PrefabParentObject: {fileID: 192944, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + m_PrefabInternal: {fileID: 1775261156} +--- !u!1 &1284476376 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100138, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476431} + - component: {fileID: 1284476390} + m_Layer: 0 + m_Name: Character + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476377 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100080, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476441} + - component: {fileID: 1284476445} + - component: {fileID: 1284476392} + - component: {fileID: 1284476447} + - component: {fileID: 1284476391} + m_Layer: 8 + m_Name: RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476378 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100078, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476440} + - component: {fileID: 1284476396} + - component: {fileID: 1284476394} + - component: {fileID: 1284476397} + - component: {fileID: 1284476393} + m_Layer: 8 + m_Name: RightForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476379 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100072, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476439} + - component: {fileID: 1284476395} + - component: {fileID: 1284476398} + - component: {fileID: 1284476400} + m_Layer: 0 + m_Name: RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476380 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100004, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476442} + - component: {fileID: 1284476404} + - component: {fileID: 1284476402} + - component: {fileID: 1284476403} + - component: {fileID: 1284476401} + m_Layer: 8 + m_Name: Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476381 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100018, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476449} + - component: {fileID: 1284476446} + - component: {fileID: 1284476407} + - component: {fileID: 1284476448} + - component: {fileID: 1284476406} + m_Layer: 8 + m_Name: LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476382 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100016, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476444} + - component: {fileID: 1284476411} + - component: {fileID: 1284476409} + - component: {fileID: 1284476412} + - component: {fileID: 1284476408} + m_Layer: 8 + m_Name: LeftForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476383 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100010, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476443} + - component: {fileID: 1284476410} + - component: {fileID: 1284476413} + - component: {fileID: 1284476414} + m_Layer: 0 + m_Name: LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476384 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100134, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476438} + - component: {fileID: 1284476399} + - component: {fileID: 1284476405} + - component: {fileID: 1284476415} + m_Layer: 0 + m_Name: Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476385 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100122, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476435} + - component: {fileID: 1284476420} + - component: {fileID: 1284476418} + - component: {fileID: 1284476421} + m_Layer: 0 + m_Name: RightLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476386 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100130, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476434} + - component: {fileID: 1284476419} + - component: {fileID: 1284476422} + - component: {fileID: 1284476423} + m_Layer: 0 + m_Name: RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476387 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100060, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476437} + - component: {fileID: 1284476426} + - component: {fileID: 1284476424} + - component: {fileID: 1284476427} + m_Layer: 0 + m_Name: LeftLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476388 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100068, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476436} + - component: {fileID: 1284476425} + - component: {fileID: 1284476428} + - component: {fileID: 1284476429} + m_Layer: 0 + m_Name: LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1284476389 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100008, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1284476433} + - component: {fileID: 1284476416} + - component: {fileID: 1284476417} + - component: {fileID: 1284476432} + - component: {fileID: 1284476430} + m_Layer: 0 + m_Name: Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1284476390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476376} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a75400c659f89a34caa71e27eafcf332, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1284476391 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476377} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 0 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!136 &1284476392 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476377} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.05 + m_Height: 0.15 + m_Direction: 0 + m_Center: {x: 0.08, y: 0, z: 0} +--- !u!114 &1284476393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476378} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 0 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!144 &1284476394 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476378} + m_ConnectedBody: {fileID: 1284476395} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 0, y: 0, z: 1} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.27404684, y: 0.00000033126352, z: 0.000000024214376} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 1, z: 0} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -90 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &1284476395 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476379} + serializedVersion: 2 + m_Mass: 1.25 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &1284476396 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476378} + serializedVersion: 2 + m_Mass: 1.25 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!136 &1284476397 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476378} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.28 + m_Direction: 0 + m_Center: {x: 0.15, y: 0, z: 0} +--- !u!144 &1284476398 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476379} + m_ConnectedBody: {fileID: 1284476399} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.18760645, y: 0.22204688, z: -0.035217896} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -70 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 10 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 50 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &1284476399 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476384} + serializedVersion: 2 + m_Mass: 3.125 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!136 &1284476400 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476379} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06851171 + m_Height: 0.27404684 + m_Direction: 0 + m_Center: {x: 0.13702342, y: 0, z: 0} +--- !u!114 &1284476401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 0 + polarAxis: {x: 1, y: 0, z: 0} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!136 &1284476402 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476380} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.12 + m_Height: 0.25 + m_Direction: 1 + m_Center: {x: 0, y: 0.08, z: 0} +--- !u!144 &1284476403 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476380} + m_ConnectedBody: {fileID: 1284476399} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.0000011901354, y: 0.3871452, z: 0.023088738} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -40 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 25 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 25 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &1284476404 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476380} + serializedVersion: 2 + m_Mass: 1.25 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!136 &1284476405 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476384} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.13 + m_Height: 0.3 + m_Direction: 1 + m_Center: {x: -0.00000153482, y: 0.16, z: -0.004637659} +--- !u!114 &1284476406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476381} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 0 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!136 &1284476407 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476381} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.05 + m_Height: 0.15 + m_Direction: 0 + m_Center: {x: -0.08, y: 0, z: 0} +--- !u!114 &1284476408 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 0 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!144 &1284476409 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476382} + m_ConnectedBody: {fileID: 1284476410} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 0, y: 0, z: 1} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.27404684, y: 0.000000417287, z: 0.000000054016674} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 1, z: 0} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -90 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &1284476410 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476383} + serializedVersion: 2 + m_Mass: 1.25 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &1284476411 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476382} + serializedVersion: 2 + m_Mass: 1.25 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!136 &1284476412 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476382} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.28 + m_Direction: 0 + m_Center: {x: -0.14, y: 0, z: 0} +--- !u!144 &1284476413 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476383} + m_ConnectedBody: {fileID: 1284476399} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.18760951, y: 0.222047, z: -0.035218313} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -70 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 10 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 50 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!136 &1284476414 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476383} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06851171 + m_Height: 0.27404684 + m_Direction: 0 + m_Center: {x: -0.13702342, y: 0, z: 0} +--- !u!144 &1284476415 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476384} + m_ConnectedBody: {fileID: 1284476416} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.0000012805019, y: 0.215689, z: -0.026496775} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 10 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &1284476416 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476389} + serializedVersion: 2 + m_Mass: 3.125 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!136 &1284476417 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476389} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.12 + m_Height: 0.29 + m_Direction: 1 + m_Center: {x: -0.0000004470348, y: 0.0745625, z: -0.03085753} +--- !u!144 &1284476418 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476385} + m_ConnectedBody: {fileID: 1284476419} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.0024468026, y: -0.4059544, z: -0.0051452597} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -80 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &1284476419 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476386} + serializedVersion: 2 + m_Mass: 1.875 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &1284476420 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476385} + serializedVersion: 2 + m_Mass: 1.875 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!136 &1284476421 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476385} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.08 + m_Height: 0.5253997 + m_Direction: 1 + m_Center: {x: 0, y: -0.26269984, z: 0} +--- !u!144 &1284476422 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476386} + m_ConnectedBody: {fileID: 1284476416} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.09124453, y: -0.066564, z: -0.0005537919} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 70 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 30 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!136 &1284476423 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476386} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.09 + m_Height: 0.4059544 + m_Direction: 1 + m_Center: {x: 0, y: -0.2029772, z: 0} +--- !u!144 &1284476424 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476387} + m_ConnectedBody: {fileID: 1284476425} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.0024467986, y: -0.40595406, z: -0.0051703993} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -80 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &1284476425 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476388} + serializedVersion: 2 + m_Mass: 1.875 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &1284476426 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476387} + serializedVersion: 2 + m_Mass: 1.875 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!136 &1284476427 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476387} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.08 + m_Height: 0.5253974 + m_Direction: 1 + m_Center: {x: 0, y: -0.2626987, z: 0} +--- !u!144 &1284476428 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476388} + m_ConnectedBody: {fileID: 1284476416} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.091244526, y: -0.066563986, z: -0.0005537969} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 0, z: 1} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 70 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 30 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!136 &1284476429 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476388} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.09 + m_Height: 0.40595406 + m_Direction: 1 + m_Center: {x: 0, y: -0.20297703, z: 0} +--- !u!33 &1284476430 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476389} + m_Mesh: {fileID: 0} +--- !u!4 &1284476431 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400138, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476376} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.566} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476433} + - {fileID: 1368876434} + - {fileID: 1906596484} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1284476432 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476389} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!4 &1284476433 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400008, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476389} + m_LocalRotation: {x: 1.3930912e-15, y: 0.00000001376344, z: -0.0000004417766, w: 1} + m_LocalPosition: {x: 0.00000006757011, y: 0.9979194, z: 0.000000484474} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476436} + - {fileID: 1284476434} + - {fileID: 2042970089} + m_Father: {fileID: 1284476431} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476434 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400130, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476386} + m_LocalRotation: {x: -0.000002931613, y: -0.000000013649597, z: 0.00000043784848, + w: 1} + m_LocalPosition: {x: 0.09124453, y: -0.06656398, z: -0.00055377925} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476435} + m_Father: {fileID: 1284476433} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476435 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400122, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476385} + m_LocalRotation: {x: 0.0000065525965, y: -0.000000021011672, z: -2.99793e-11, w: 1} + m_LocalPosition: {x: 0.002446805, y: -0.40595436, z: -0.0051452797} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1469379999} + m_Father: {fileID: 1284476434} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476436 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400068, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476388} + m_LocalRotation: {x: -0.000017517097, y: -0.000000013640878, z: 0.00000043808052, + w: 1} + m_LocalPosition: {x: -0.091244526, y: -0.06656399, z: -0.00055377925} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476437} + m_Father: {fileID: 1284476433} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476437 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400060, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476387} + m_LocalRotation: {x: 0.000035527948, y: 0.000000089582485, z: 0.0000000041595536, + w: 1} + m_LocalPosition: {x: -0.0024468019, y: -0.40595403, z: -0.005170411} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 158100308} + m_Father: {fileID: 1284476436} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476438 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400134, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476384} + m_LocalRotation: {x: 3.8774097e-26, y: -4.2632574e-14, z: 6.82121e-13, w: 1} + m_LocalPosition: {x: 0.0000013886521, y: 0.1164544, z: -0.014223412} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2077198172} + - {fileID: 1869269957} + m_Father: {fileID: 2042970089} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476439 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400072, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476379} + m_LocalRotation: {x: 0.000000014901161, y: 7.7756505e-24, z: 0.000000044703484, + w: 1} + m_LocalPosition: {x: 0.1265504, y: -0.0026602063, z: -0.026008958} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476440} + m_Father: {fileID: 1629613222} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476440 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400078, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476378} + m_LocalRotation: {x: -0.000000059604638, y: 0.000000003900862, z: -3.0876939e-15, + w: 1} + m_LocalPosition: {x: 0.27404684, y: 0.0000003288411, z: 0.000000052756395} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2032420838} + - {fileID: 1284476441} + m_Father: {fileID: 1284476439} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476441 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400080, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476377} + m_LocalRotation: {x: 0.000025987818, y: -0.000000044703476, z: 1.1585687e-12, w: 1} + m_LocalPosition: {x: 0.27614462, y: 0.00000022661457, z: 0.0000001832407} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 857749984} + m_Father: {fileID: 1284476440} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476442 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400004, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476380} + m_LocalRotation: {x: 0, y: -0, z: -2.3158745e-36, w: 1} + m_LocalPosition: {x: -0.000000023707482, y: 0.1032183, z: 0.031424288} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1666846249} + m_Father: {fileID: 1544287198} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476443 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400010, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476383} + m_LocalRotation: {x: 0.000000044703484, y: 2.4507967e-22, z: 0.000000044703484, + w: 1} + m_LocalPosition: {x: -0.12655036, y: -0.0026593448, z: -0.026009219} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476444} + m_Father: {fileID: 1652904149} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1284476444 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400016, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476382} + m_LocalRotation: {x: -0.000000059604638, y: -0.000000003900862, z: -1.3205547e-24, + w: 1} + m_LocalPosition: {x: -0.27404684, y: 0.00000039126675, z: 0.000000065881096} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 411771058} + - {fileID: 1284476449} + m_Father: {fileID: 1284476443} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &1284476445 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476377} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &1284476446 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476381} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!144 &1284476447 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476377} + m_ConnectedBody: {fileID: 1284476396} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.27614456, y: 0.00000024083178, z: 0.00000021203098} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 1, z: 0} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 70 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!144 &1284476448 +CharacterJoint: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476381} + m_ConnectedBody: {fileID: 1284476411} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.27614462, y: 0.00000026444798, z: 0.00000022870857} + serializedVersion: 2 + m_SwingAxis: {x: 0, y: 1, z: 0} + m_TwistLimitSpring: + spring: 0 + damper: 0 + m_LowTwistLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighTwistLimit: + limit: 70 + bounciness: 0 + contactDistance: 0 + m_SwingLimitSpring: + spring: 0 + damper: 0 + m_Swing1Limit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_Swing2Limit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_EnableProjection: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!4 &1284476449 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400018, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1284476381} + m_LocalRotation: {x: 0.000025987818, y: 0.000000044703476, z: -1.1585687e-12, w: 1} + m_LocalPosition: {x: -0.27614462, y: 0.00000028951808, z: 0.00000019646586} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 981941551} + m_Father: {fileID: 1284476444} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1287455575 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1139149426671878, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1287455576} + - component: {fileID: 1287455577} + m_Layer: 5 + m_Name: CrosshairPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1287455576 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224898842318825022, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1287455575} + 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: 1401924464} + m_Father: {fileID: 1152297872} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1287455577 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222216596249104770, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1287455575} +--- !u!1 &1288073600 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1385365442151190, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1288073601} + m_Layer: 0 + m_Name: TrackingSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1288073601 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4037241614861164, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1288073600} + 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: 718784008} + - {fileID: 1010700834} + - {fileID: 1422457117} + - {fileID: 559557196} + - {fileID: 450860297} + - {fileID: 1600475213} + m_Father: {fileID: 2031144553} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1291806750 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1497821511363720, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1291806751} + - component: {fileID: 1291806752} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1291806751 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4842595962813678, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1291806750} + m_LocalRotation: {x: 0.20731795, y: 0.00903069, z: 0.027791852, w: -0.9778371} + m_LocalPosition: {x: 0.20649095, y: 0.31778085, z: -0.048289925} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1299871813} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 8.5308, y: -7.0464997, z: 11.571899} +--- !u!136 &1291806752 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136917256857246474, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1291806750} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.0253 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1299871812 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1444680322249500, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1299871813} + - component: {fileID: 1299871814} + m_Layer: 0 + m_Name: ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1299871813 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4774557640849410, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299871812} + 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: 84337007} + - {fileID: 438065900} + - {fileID: 1291806751} + m_Father: {fileID: 2483437} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1299871814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114352946706345296, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299871812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1303779584 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1303779585} + - component: {fileID: 1303779587} + - component: {fileID: 1303779586} + m_Layer: 5 + m_Name: R + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1303779585 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1303779584} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1506764931} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 9.42, y: 8.19} + m_SizeDelta: {x: 1.06, y: 1.39} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1303779586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1303779584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: fa3a9f4d837870f46aa7f0d831b05b98, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1303779587 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1303779584} +--- !u!1 &1325915189 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1201667435498660, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1325915190} + m_Layer: 0 + m_Name: LeftControllerModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1325915190 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4055772235268756, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1325915189} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 77031043} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1334421952 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1334421953} + - component: {fileID: 1334421956} + - component: {fileID: 1334421955} + - component: {fileID: 1334421954} + m_Layer: 5 + m_Name: Play Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1334421953 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1334421952} + 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: 343410513} + m_Father: {fileID: 1342166475} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1334421954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1334421952} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1334421955} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1342166476} + m_MethodName: PlaySelectedPattern + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &1334421955 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1334421952} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1334421956 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1334421952} +--- !u!1 &1342166471 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1342166475} + - component: {fileID: 1342166474} + - component: {fileID: 1342166473} + - component: {fileID: 1342166472} + - component: {fileID: 1342166476} + - component: {fileID: 1342166477} + m_Layer: 5 + m_Name: Haptic Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1342166472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1342166471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1342166473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1342166471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1342166474 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1342166471} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1342166475 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1342166471} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1175871414} + - {fileID: 235736792} + - {fileID: 1334421953} + - {fileID: 1575750594} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1342166476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1342166471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 41655ee12c386e54fa5b94ad661c26c4, type: 3} + m_Name: + m_EditorClassIdentifier: + availablePatterns: + - {fileID: 11400000, guid: e945ad208e7c58f4b9889d37b657d2ca, type: 2} + - {fileID: 11400000, guid: 9da88975d2790784ab3908ce8d92ae06, type: 2} + - {fileID: 11400000, guid: c7aa2ff9b31b5c14ebe2a0032acbee93, type: 2} + - {fileID: 11400000, guid: 5f9548af75015c64295ef0fa38ef3183, type: 2} + - {fileID: 11400000, guid: 69cb33b80d6d91d4ea69336ac63910c6, type: 2} + - {fileID: 0} + patternDropdown: {fileID: 235736793} + bodyPartDropdown: {fileID: 1175871413} +--- !u!114 &1342166477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1342166471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 10 + m_Right: 0 + m_Top: 10 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 +--- !u!1 &1343421668 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1343421669} + - component: {fileID: 1343421671} + - component: {fileID: 1343421670} + m_Layer: 5 + m_Name: bhaptics-logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1343421669 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1343421668} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1506764931} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -12.91, y: 10.71} + m_SizeDelta: {x: 4.22, y: 1.11} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1343421670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1343421668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 694d4c4424909f441abc3db51c282e5b, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1343421671 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1343421668} +--- !u!1 &1352095973 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1609316719242768, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1352095974} + - component: {fileID: 1352095975} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1352095974 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4121817303765614, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1352095973} + m_LocalRotation: {x: -0.19123267, y: -0.055678543, z: 0.07900553, w: 0.97677433} + m_LocalPosition: {x: -0.23028298, y: 0.29219535, z: -0.09169823} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 772892186} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 8.5308, y: -1.7105999, z: -8.6391} +--- !u!136 &1352095975 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136902914092528082, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1352095973} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.052630004 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1368876433 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1368876434} + m_Layer: 0 + m_Name: Vive + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1368876434 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1368876433} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.566} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 865742332} + - {fileID: 632842904} + m_Father: {fileID: 1284476431} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1380104168 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1864327457564016, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1380104169} + - component: {fileID: 1380104170} + m_Layer: 0 + m_Name: UnityXR + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1380104169 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4833973726280048, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1380104168} + 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: 2024778040} + m_Father: {fileID: 1532369071} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1380104170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114097171707248180, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1380104168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 0 + actualBoundaries: {fileID: 2024778039} + actualHeadset: {fileID: 724699685} + actualLeftController: {fileID: 1843169334} + actualRightController: {fileID: 1087430415} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 863184524} + modelAliasRightController: {fileID: 930951565} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_UnitySystem + descriptionIndex: 1 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_UnityBoundaries + descriptionIndex: 1 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_UnityHeadset + descriptionIndex: 1 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_UnityController + descriptionIndex: 1 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_FallbackTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_FallbackHand + descriptionIndex: 0 +--- !u!1 &1380121266 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1380121267} + - component: {fileID: 1380121269} + - component: {fileID: 1380121268} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1380121267 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1380121266} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1575750594} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1380121268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1380121266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Play On All Parts +--- !u!222 &1380121269 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1380121266} +--- !u!1 &1398061901 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1786062999679222, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1398061902} + - component: {fileID: 1398061903} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1398061902 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4733806916941664, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398061901} + m_LocalRotation: {x: 0.15511838, y: -0.22281167, z: 0.71685785, w: -0.6421901} + m_LocalPosition: {x: 0.24069616, y: 0.23002695, z: -0.15240857} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1542414820} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 24.403599, y: 35.2679, z: -62.080498} +--- !u!136 &1398061903 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136261225259917888, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398061901} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.054220006 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1399263398 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1399263399} + - component: {fileID: 1399263401} + - component: {fileID: 1399263400} + m_Layer: 5 + m_Name: tactosy_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1399263399 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1399263398} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1255657396} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.7400017, y: 1.2200007} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1399263400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1399263398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: fa7768468db2d024e93ab5d0c166b8b8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1399263401 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1399263398} +--- !u!1 &1401924463 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1910343897166918, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1401924464} + - component: {fileID: 1401924466} + - component: {fileID: 1401924465} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1401924464 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224769544342183684, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1401924463} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1287455576} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 25, y: 25} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1401924465 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114226909144389536, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1401924463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 13ad2ad7c4126c64b9713ab9ce478f82, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1401924466 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222683853949172698, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1401924463} +--- !u!1 &1422457116 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1532569555860248, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1422457117} + - component: {fileID: 1422457118} + m_Layer: 0 + m_Name: RightEyeAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1422457117 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4453936174958260, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1422457116} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1288073601} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1422457118 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 20511210392418334, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1422457116} + m_Enabled: 0 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 2 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1423808481 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1423808482} + - component: {fileID: 1423808484} + - component: {fileID: 1423808483} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1423808482 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1423808481} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 611413203} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1423808483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1423808481} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1423808484 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1423808481} +--- !u!1 &1430808219 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1469036089373606, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1430808220} + - component: {fileID: 1430808224} + - component: {fileID: 1430808223} + - component: {fileID: 1430808222} + - component: {fileID: 1430808221} + m_Layer: 0 + m_Name: Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1430808220 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4486952429594258, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1430808219} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 618659444} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1430808221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114488276184429078, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1430808219} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e02f8c9a00f838548ac1b43fd6738130, type: 3} + m_Name: + m_EditorClassIdentifier: + forceRoomScaleTracking: 1 +--- !u!81 &1430808222 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 81392431515360088, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1430808219} + m_Enabled: 1 +--- !u!124 &1430808223 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 124308063330812152, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1430808219} + m_Enabled: 1 +--- !u!20 &1430808224 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 20907468643624242, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1430808219} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1462477657 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1032642348073938, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1462477658} + - component: {fileID: 1462477659} + - component: {fileID: 1462477663} + - component: {fileID: 1462477662} + - component: {fileID: 1462477661} + - component: {fileID: 1462477660} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1462477658 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4682112467028718, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1462477657} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.08, z: 0.08} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1537547127} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1462477659 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 20165139100398262, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1462477657} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.05 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: 1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1462477660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114678009003922790, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1462477657} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!81 &1462477661 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 81226871471363398, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1462477657} + m_Enabled: 1 +--- !u!92 &1462477662 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 92827885659946426, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1462477657} + m_Enabled: 1 +--- !u!124 &1462477663 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 124459182134215684, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1462477657} + m_Enabled: 1 +--- !u!1 &1468646421 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1468646422} + - component: {fileID: 1468646423} + m_Layer: 5 + m_Name: '[Tal]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1468646422 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1468646421} + 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: 1799362731} + m_Father: {fileID: 1006506396} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1.14, y: 8.94} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1468646423 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1468646421} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1468879365 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1388208206479294, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1468879366} + - component: {fileID: 1468879367} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1468879366 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4544185383078752, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1468879365} + m_LocalRotation: {x: -0.24710186, y: 0.0512118, z: -0.06363156, w: 0.96554077} + m_LocalPosition: {x: -0.1855783, y: 0.29303586, z: -0.1076026} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 807001123} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 6.0762, y: 15.1172, z: -19.823} +--- !u!136 &1468879367 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136488868207834022, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1468879365} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.040740006 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1469379998 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100076, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1469379999} + m_Layer: 0 + m_Name: RightFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1469379999 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400076, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1469379998} + m_LocalRotation: {x: -0.000003650786, y: 0.000000020896566, z: 0.0000000039579957, + w: 1} + m_LocalPosition: {x: -0.0024466943, y: -0.4204787, z: -0.02060231} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1245194040} + m_Father: {fileID: 1284476435} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1506764930 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1506764931} + m_Layer: 5 + m_Name: UI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1506764931 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1506764930} + 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: 617351939} + - {fileID: 1343421669} + - {fileID: 991635714} + - {fileID: 1303779585} + m_Father: {fileID: 1006506396} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1516915511 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1080704025289860, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1516915512} + - component: {fileID: 1516915513} + m_Layer: 0 + m_Name: index + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1516915512 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4933049805345832, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1516915511} + 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: 80345382} + - {fileID: 603351673} + - {fileID: 801088931} + m_Father: {fileID: 2483437} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1516915513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114202823677404760, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1516915511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1518809420 stripped +GameObject: + m_PrefabParentObject: {fileID: 1000014254142504, guid: 4d293c8e162f3874b982baadd71153d2, + type: 2} + m_PrefabInternal: {fileID: 1775261156} +--- !u!1 &1532369070 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1964395617527810, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1532369071} + m_Layer: 0 + m_Name: '[VRTK_SDKSetups]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1532369071 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4502798307038566, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1532369070} + 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: 930465347} + - {fileID: 1380104169} + - {fileID: 317598316} + - {fileID: 93853990} + - {fileID: 457387805} + - {fileID: 1004409024} + m_Father: {fileID: 257065414} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1537547126 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1350645740531612, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1537547127} + m_Layer: 0 + m_Name: Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1537547127 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4095234681191514, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1537547126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1462477658} + m_Father: {fileID: 669998280} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1542414819 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1961585682527576, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1542414820} + - component: {fileID: 1542414821} + m_Layer: 0 + m_Name: thumb + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1542414820 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4572648074254794, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1542414819} + 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: 1398061902} + - {fileID: 404715963} + - {fileID: 137000814} + m_Father: {fileID: 2483437} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1542414821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114747560902451554, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1542414819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1544287197 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100070, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1544287198} + m_Layer: 0 + m_Name: Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1544287198 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400070, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1544287197} + m_LocalRotation: {x: -5.2041704e-18, y: 4.2632927e-14, z: 2.273737e-13, w: 1} + m_LocalPosition: {x: -0.0000002520208, y: 0.15032491, z: 0.007929048} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476442} + m_Father: {fileID: 1869269957} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1544560131 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1544560132} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1544560132 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1544560131} + 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: 2048806585} + m_Father: {fileID: 1125272728} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1563294225 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1061688524953738, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1563294226} + - component: {fileID: 1563294227} + m_Layer: 0 + m_Name: Hand Models + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1563294226 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4974089456128826, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1563294225} + 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: 444716542} + - {fileID: 1670684668} + m_Father: {fileID: 791481508} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1563294227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114186152659676312, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1563294225} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c592f16851a620743868a31232613370, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1575750593 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1575750594} + - component: {fileID: 1575750597} + - component: {fileID: 1575750596} + - component: {fileID: 1575750595} + m_Layer: 5 + m_Name: Play All Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1575750594 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1575750593} + 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: 1380121267} + m_Father: {fileID: 1342166475} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1575750595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1575750593} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1575750596} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1342166476} + m_MethodName: PlayOnAllBodyParts + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &1575750596 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1575750593} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1575750597 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1575750593} +--- !u!1 &1600475212 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1287265860742004, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1600475213} + m_Layer: 0 + m_Name: RightHandAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1600475213 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4482255681612226, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1600475212} + 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: 1831518859} + m_Father: {fileID: 1288073601} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1611547331 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1501846747677908, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1611547332} + - component: {fileID: 1611547334} + - component: {fileID: 1611547333} + m_Layer: 0 + m_Name: VerticalPlane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1611547332 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4494433477066046, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1611547331} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.00001, z: 0.1} + m_Children: [] + m_Father: {fileID: 584560471} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!23 &1611547333 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23197025958151808, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1611547331} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 2100000, guid: 5074e50ed3f02f64ab7f39096a5590bc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1611547334 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33543263719158058, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1611547331} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1613062975 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1613062976} + - component: {fileID: 1613062979} + - component: {fileID: 1613062978} + - component: {fileID: 1613062977} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1613062976 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1613062975} + 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: 316364393} + m_Father: {fileID: 689336098} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -17, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1613062977 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1613062975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1613062978 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1613062975} +--- !u!114 &1613062979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1613062975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &1627909956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1475602129951188, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1627909957} + - component: {fileID: 1627909958} + m_Layer: 0 + m_Name: middle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1627909957 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4088604332331054, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1627909956} + 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: 140898221} + - {fileID: 1220059043} + - {fileID: 1190203623} + m_Father: {fileID: 2483437} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1627909958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114864015252059480, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1627909956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1629613221 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100124, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1629613222} + m_Layer: 0 + m_Name: RightShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1629613222 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400124, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1629613221} + m_LocalRotation: {x: -0.000000014901161, y: 4.2632564e-14, z: -0.000000044703256, + w: 1} + m_LocalPosition: {x: 0.06105696, y: 0.09110509, z: 0.007055634} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476439} + m_Father: {fileID: 1869269957} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1630150758 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1630150759} + m_Layer: 0 + m_Name: Ragdoll Joints + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1630150759 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1630150758} + 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: 111077816} + - {fileID: 218380968} + - {fileID: 119782600} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1641913275 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1996954743937194, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1641913276} + - component: {fileID: 1641913277} + m_Layer: 0 + m_Name: index + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1641913276 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4348304978444730, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1641913275} + 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: 1146686600} + - {fileID: 786639311} + - {fileID: 2047951603} + m_Father: {fileID: 1819287518} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1641913277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114558755167639708, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1641913275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862e1c8d784604a8ba021be6abc6470a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1647094080 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1647094081} + - component: {fileID: 1647094083} + - component: {fileID: 1647094082} + m_Layer: 5 + m_Name: tactosy_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1647094081 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1647094080} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 940169798} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.8199997, y: 1.2199998} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1647094082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1647094080} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 159bf72d3b52e014eb56d43149b96d8b, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1647094083 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1647094080} +--- !u!1 &1650197130 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1650197131} + - component: {fileID: 1650197139} + - component: {fileID: 1650197138} + - component: {fileID: 1650197137} + - component: {fileID: 1650197136} + - component: {fileID: 1650197135} + - component: {fileID: 1650197134} + - component: {fileID: 1650197133} + - component: {fileID: 1650197132} + m_Layer: 0 + m_Name: Grabbable Cube (1) + m_TagString: Cubes + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1650197131 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.082, y: 1.113, z: -0.258} + m_LocalScale: {x: 0.099999994, y: 0.099999994, z: 0.099999994} + m_Children: [] + m_Father: {fileID: 688036712} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1650197132 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11dd23e0d1b103642b773b8b2eaf26b6, type: 3} + m_Name: + m_EditorClassIdentifier: + patternToSend: {fileID: 11400000, guid: 5f9548af75015c64295ef0fa38ef3183, type: 2} +--- !u!114 &1650197133 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 18055ba762aa3994f9c10208cd088bc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1650197134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ec2ac476f2fc9a45a4e69712580a603, type: 3} + m_Name: + m_EditorClassIdentifier: + precisionGrab: 0 + rightSnapHandle: {fileID: 0} + leftSnapHandle: {fileID: 0} + throwVelocityWithAttachDistance: 0 + throwMultiplier: 1 + onGrabCollisionDelay: 0 +--- !u!114 &1650197135 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a3abaf4521bf2344ea21ed3020b98eb2, type: 3} + m_Name: + m_EditorClassIdentifier: + disableWhenIdle: 0 + allowedNearTouchControllers: 0 + allowedTouchControllers: 0 + ignoredColliders: [] + isGrabbable: 1 + holdButtonToGrab: 1 + stayGrabbedOnTeleport: 1 + validDrop: 1 + grabOverrideButton: 0 + allowedGrabControllers: 0 + grabAttachMechanicScript: {fileID: 1650197134} + secondaryGrabActionScript: {fileID: 1650197133} + isUsable: 0 + holdButtonToUse: 1 + useOnlyIfGrabbed: 0 + pointerActivatesUseAction: 0 + useOverrideButton: 0 + allowedUseControllers: 0 + objectHighlighter: {fileID: 0} + touchHighlightColor: {r: 0, g: 0, b: 0, a: 0} + usingState: 0 +--- !u!54 &1650197136 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1650197137 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1650197138 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + 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!33 &1650197139 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650197130} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1652904148 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100062, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1652904149} + m_Layer: 0 + m_Name: LeftShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1652904149 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400062, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1652904148} + m_LocalRotation: {x: -0.000000044703484, y: 4.2632557e-14, z: -0.000000044703256, + w: 1} + m_LocalPosition: {x: -0.061058242, y: 0.09110424, z: 0.0070555084} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476443} + m_Father: {fileID: 1869269957} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1666846248 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1666846249} + - component: {fileID: 1666846252} + - component: {fileID: 1666846251} + - component: {fileID: 1666846250} + m_Layer: 8 + m_Name: HeadModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1666846249 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1666846248} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0.084, z: 0} + m_LocalScale: {x: 0.22, y: 0.22, z: 0.22} + m_Children: [] + m_Father: {fileID: 1284476442} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1666846250 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1666846248} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &1666846251 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1666846248} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1666846252 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1666846248} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1670684667 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1433946982761302, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1670684668} + m_Layer: 0 + m_Name: Physics Hands + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1670684668 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4238094411635756, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1670684667} + 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: 2483437} + - {fileID: 1819287518} + m_Father: {fileID: 1563294226} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1689996210 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1689996211} + - component: {fileID: 1689996212} + m_Layer: 5 + m_Name: '[Shoes] Left' + m_TagString: Shooes + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1689996211 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1689996210} + 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: 114135778} + - {fileID: 1896981786} + m_Father: {fileID: 1006506396} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.56, y: -2.63} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1689996212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1689996210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1701685732 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1952719937766460, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1701685733} + - component: {fileID: 1701685735} + - component: {fileID: 1701685734} + m_Layer: 0 + m_Name: HorizontalPlane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1701685733 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4858507111139268, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1701685732} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.00001, z: 0.1} + m_Children: [] + m_Father: {fileID: 584560471} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1701685734 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23804919660389120, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1701685732} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 2100000, guid: 5074e50ed3f02f64ab7f39096a5590bc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1701685735 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33378613211845398, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1701685732} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1707304022 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1910473203283544, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1707304023} + m_Layer: 0 + m_Name: LeftControllerAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1707304023 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4978215952081374, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1707304022} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 450860297} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1726639955 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1726639956} + - component: {fileID: 1726639958} + - component: {fileID: 1726639957} + m_Layer: 5 + m_Name: Tacot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1726639956 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1726639955} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 847052865} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 3.32, y: 1.31} + m_SizeDelta: {x: 11.59, y: 5.45} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1726639957 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1726639955} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 4aa71fb0af869ae44875dab406884abb, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1726639958 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1726639955} +--- !u!1 &1742251323 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1742251324} + m_Layer: 0 + m_Name: UI Texts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1742251324 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1742251323} + 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: 1818324908} + - {fileID: 2042508953} + - {fileID: 176951933} + - {fileID: 1857386322} + - {fileID: 494241450} + - {fileID: 477211994} + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1756296555 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1573731592900666, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1756296556} + - component: {fileID: 1756296557} + m_Layer: 0 + m_Name: LeftHandAttachPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1756296556 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4475173891939648, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1756296555} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0157, y: -0.0513, z: -0.0578} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 538772792} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &1756296557 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 54445129595783252, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1756296555} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1001 &1775261156 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 317598316} + m_Modifications: + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 420908, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 146900, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + propertyPath: m_Name + value: '[CameraRig]' + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &1783872183 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1783872185} + - component: {fileID: 1783872184} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1783872184 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1783872183} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1783872185 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1783872183} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 688036712} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1788085138 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1788085139} + - component: {fileID: 1788085141} + - component: {fileID: 1788085140} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1788085139 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1788085138} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1953535382} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1788085140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1788085138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1788085141 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1788085138} +--- !u!1 &1792996287 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1792996288} + - component: {fileID: 1792996296} + - component: {fileID: 1792996295} + - component: {fileID: 1792996294} + - component: {fileID: 1792996293} + - component: {fileID: 1792996292} + - component: {fileID: 1792996291} + - component: {fileID: 1792996289} + m_Layer: 0 + m_Name: Grabbable Cube (2) + m_TagString: Cubes + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1792996288 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.102, y: 1.113, z: -0.22099999} + m_LocalScale: {x: 0.099999994, y: 0.099999994, z: 0.099999994} + m_Children: [] + m_Father: {fileID: 688036712} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1792996289 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1792996291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 18055ba762aa3994f9c10208cd088bc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1792996292 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ec2ac476f2fc9a45a4e69712580a603, type: 3} + m_Name: + m_EditorClassIdentifier: + precisionGrab: 0 + rightSnapHandle: {fileID: 0} + leftSnapHandle: {fileID: 0} + throwVelocityWithAttachDistance: 0 + throwMultiplier: 1 + onGrabCollisionDelay: 0 +--- !u!114 &1792996293 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a3abaf4521bf2344ea21ed3020b98eb2, type: 3} + m_Name: + m_EditorClassIdentifier: + disableWhenIdle: 0 + allowedNearTouchControllers: 0 + allowedTouchControllers: 0 + ignoredColliders: [] + isGrabbable: 1 + holdButtonToGrab: 1 + stayGrabbedOnTeleport: 1 + validDrop: 1 + grabOverrideButton: 0 + allowedGrabControllers: 0 + grabAttachMechanicScript: {fileID: 1792996292} + secondaryGrabActionScript: {fileID: 1792996291} + isUsable: 0 + holdButtonToUse: 1 + useOnlyIfGrabbed: 0 + pointerActivatesUseAction: 0 + useOverrideButton: 0 + allowedUseControllers: 0 + objectHighlighter: {fileID: 0} + touchHighlightColor: {r: 0, g: 0, b: 0, a: 0} + usingState: 0 +--- !u!54 &1792996294 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1792996295 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1792996296 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1792996287} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1799362730 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1799362731} + - component: {fileID: 1799362733} + - component: {fileID: 1799362732} + m_Layer: 5 + m_Name: Tactal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1799362731 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1799362730} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1468646422} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 1.1400003, y: 0.33000135} + m_SizeDelta: {x: 11.59, y: 4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1799362732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1799362730} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 0f2254132914d1f4fbedb2d5cfc8dcae, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1799362733 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1799362730} +--- !u!1 &1806969733 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1061651550551484, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1806969734} + - component: {fileID: 1806969735} + m_Layer: 0 + m_Name: Gesture Library + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1806969734 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4395903898592316, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1806969733} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 791481508} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1806969735 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114000515623505006, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1806969733} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d540a965210f443930079a1ad41a71, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1808816405 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1730560945124626, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1808816406} + - component: {fileID: 1808816407} + m_Layer: 0 + m_Name: Right Hand Attach Point + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1808816406 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4977676604287820, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1808816405} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0141, y: -0.0387, z: -0.0594} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 36426133} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &1808816407 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 54592707630803568, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1808816405} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &1809216703 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1809216704} + m_Layer: 0 + m_Name: VRTK Scripts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1809216704 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1809216703} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.0521479, y: 1.2540956, z: 0.25547457} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1818324907 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1742251324} + m_Modifications: + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.z + value: 0.328 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.y + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.x + value: 0.813 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 1.292 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 1000 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 114642603537886326, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Text + value: 'Grab the small cube to pick it up + + Enter the sphere to trigger a haptic reaction' + objectReference: {fileID: 0} + - target: {fileID: 1678482369823558, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + propertyPath: m_Name + value: Haptic Reaction Help Text + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + m_IsPrefabParent: 0 +--- !u!224 &1818324908 stripped +RectTransform: + m_PrefabParentObject: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + m_PrefabInternal: {fileID: 1818324907} +--- !u!1 &1819287517 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1396298851505636, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1819287518} + - component: {fileID: 1819287524} + - component: {fileID: 1819287523} + - component: {fileID: 1819287522} + - component: {fileID: 1819287521} + - component: {fileID: 1819287520} + - component: {fileID: 1819287519} + m_Layer: 0 + m_Name: RigidRoundHand_R + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1819287518 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4930726566791830, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1819287517} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 663617232} + - {fileID: 1641913276} + - {fileID: 772892186} + - {fileID: 807001123} + - {fileID: 814415650} + - {fileID: 36426133} + - {fileID: 1880603251} + m_Father: {fileID: 1670684668} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 180, z: 0} +--- !u!114 &1819287519 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114696658258709028, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1819287517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64e104da36bd3b04b90c6ae969ac66dc, type: 3} + m_Name: + m_EditorClassIdentifier: + customColliderContainer: {fileID: 1819287517} +--- !u!114 &1819287520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114484111883414362, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1819287517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 947b27445602ed640b885db7e667dfc1, type: 3} + m_Name: + m_EditorClassIdentifier: + grabButton: 7 + grabPrecognition: 0 + throwMultiplier: 1 + createRigidBodyWhenNotTouching: 0 + controllerAttachPoint: {fileID: 1808816407} + controllerEvents: {fileID: 1819287522} + interactTouch: {fileID: 1819287519} +--- !u!114 &1819287521 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114509189517675652, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1819287517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65eb64f0f2fd6d64faddbcf5d7d3bdbb, type: 3} + m_Name: + m_EditorClassIdentifier: + useButton: 3 + controllerEvents: {fileID: 1819287522} + interactTouch: {fileID: 1819287519} + interactGrab: {fileID: 1819287520} +--- !u!114 &1819287522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114873666186308438, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1819287517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 08224c2548b75214e81b837a73fae0f9, type: 3} + m_Name: + m_EditorClassIdentifier: + axisFidelity: 1 + senseAxisForceZeroThreshold: 0.15 + senseAxisPressThreshold: 0.95 + triggerClickThreshold: 1 + triggerForceZeroThreshold: 0.01 + triggerAxisZeroOnUntouch: 0 + gripClickThreshold: 1 + gripForceZeroThreshold: 0.01 + gripAxisZeroOnUntouch: 0 + triggerPressed: 0 + triggerTouched: 0 + triggerHairlinePressed: 0 + triggerClicked: 0 + triggerAxisChanged: 0 + triggerSenseAxisChanged: 0 + gripPressed: 0 + gripTouched: 0 + gripHairlinePressed: 0 + gripClicked: 0 + gripAxisChanged: 0 + touchpadPressed: 0 + touchpadTouched: 0 + touchpadAxisChanged: 0 + touchpadSenseAxisChanged: 0 + touchpadTwoTouched: 0 + touchpadTwoPressed: 0 + touchpadTwoAxisChanged: 0 + buttonOnePressed: 0 + buttonOneTouched: 0 + buttonTwoPressed: 0 + buttonTwoTouched: 0 + startMenuPressed: 0 + middleFingerSenseAxisChanged: 0 + ringFingerSenseAxisChanged: 0 + pinkyFingerSenseAxisChanged: 0 + gripSenseAxisChanged: 0 + gripSensePressed: 0 + controllerVisible: 1 + controllerHandId: 1 + triggerGesture: {fileID: 0} + gripGesture: {fileID: 11400000, guid: 00b1d9b68c0fcb149b4a77ca61ba13c0, type: 2} + touchpadGesture: {fileID: 0} + buttonOneGesture: {fileID: 0} + buttonTwoGesture: {fileID: 0} + startMenuGesture: {fileID: 0} +--- !u!114 &1819287523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114831214037701944, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1819287517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8bcd03e00992e084c8be61565d44b8bd, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1819287524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114368488987016902, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1819287517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9ea79be653ce14db8969d7225d95ec6c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1827742810 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1294563422490880, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1827742811} + - component: {fileID: 1827742812} + m_Layer: 0 + m_Name: bone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1827742811 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4211508663462816, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1827742810} + m_LocalRotation: {x: -0.20731795, y: 0.0090306, z: 0.027792262, w: 0.9778371} + m_LocalPosition: {x: -0.2068287, y: 0.2954596, z: -0.09853935} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 814415650} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 8.5308, y: 7.0464997, z: -11.571899} +--- !u!136 &1827742812 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136018311780351028, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1827742810} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.049370002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1831518858 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1295617316922432, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1831518859} + m_Layer: 0 + m_Name: RightControllerAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1831518859 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4707447147038386, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1831518858} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1600475213} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1836021409 stripped +GameObject: + m_PrefabParentObject: {fileID: 147176, guid: 4d293c8e162f3874b982baadd71153d2, type: 2} + m_PrefabInternal: {fileID: 1775261156} +--- !u!1 &1840722476 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1978156016186648, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1840722477} + - component: {fileID: 1840722478} + m_Layer: 0 + m_Name: bone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1840722477 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4121815110197452, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1840722476} + m_LocalRotation: {x: -0.19123267, y: -0.055678543, z: 0.07900553, w: 0.97677433} + m_LocalPosition: {x: -0.23521426, y: 0.30513787, z: -0.059033215} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 772892186} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 8.5308, y: -1.7105999, z: -8.6391} +--- !u!136 &1840722478 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136087574594328558, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1840722476} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.034330003 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1841587741 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1841587747} + - component: {fileID: 1841587746} + - component: {fileID: 1841587745} + - component: {fileID: 1841587744} + - component: {fileID: 1841587742} + - component: {fileID: 1841587748} + - component: {fileID: 1841587743} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1841587742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841587741} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 064eb441a0471cf45a3356d08a2067a9, type: 3} + m_Name: + m_EditorClassIdentifier: + eventSender: {fileID: 1841587748} + lastUsedComponent: {fileID: 1841587748} + _keyList: + - ObjectEnteredInteractionArea + - ObjectExitedInteractionArea + - ObjectUsedInteractionArea + - ObjectFinishedInteractionArea + - ObjectInterruptInteractionArea + _valueList: + - foldoutOpenStatus: 1 + reactionList: + - {fileID: 1094810989} + reactionTriggerMethodList: + - StartReaction + reactionTriggerIndexSelectionList: 00000000 + - foldoutOpenStatus: 0 + reactionList: [] + reactionTriggerMethodList: [] + reactionTriggerIndexSelectionList: + - foldoutOpenStatus: 0 + reactionList: [] + reactionTriggerMethodList: [] + reactionTriggerIndexSelectionList: + - foldoutOpenStatus: 0 + reactionList: [] + reactionTriggerMethodList: [] + reactionTriggerIndexSelectionList: + - foldoutOpenStatus: 0 + reactionList: [] + reactionTriggerMethodList: [] + reactionTriggerIndexSelectionList: +--- !u!114 &1841587743 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841587741} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2ed2aa1a29b92ca4f84a26a5f6e9218b, type: 3} + m_Name: + m_EditorClassIdentifier: + operation: 1 + checkType: 1 + identifiers: + - Cubes +--- !u!23 &1841587744 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841587741} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &1841587745 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841587741} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1841587746 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841587741} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1841587747 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841587741} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.606, y: 0.73402447, z: 0.13} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: + - {fileID: 1094810990} + m_Father: {fileID: 688036712} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1841587748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841587741} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81be2159e26d1b847a5cfcb7d5dfa568, type: 3} + m_Name: + m_EditorClassIdentifier: + validObjectListPolicy: {fileID: 1841587743} +--- !u!1 &1843169334 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1228810617523274, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1843169335} + - component: {fileID: 1843169337} + - component: {fileID: 1843169336} + m_Layer: 0 + m_Name: LeftHandAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1843169335 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4440968765787812, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1843169334} + 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: 863184525} + m_Father: {fileID: 2024778040} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1843169336 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114217163107519250, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1843169334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!114 &1843169337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114212909320761364, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1843169334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a56f0178eefe7b9409460ae29588f961, type: 3} + m_Name: + m_EditorClassIdentifier: + nodeType: 4 + index: 1 + triggerAxisName: LeftTrigger + gripAxisName: LeftGrip + touchpadHorizontalAxisName: LeftTrackpadHorizontal + touchpadVerticalAxisName: LeftTrackpadVertical +--- !u!1001 &1857386321 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1742251324} + m_Modifications: + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.z + value: -0.601 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.x + value: -1.227 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 1.442 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 509.1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 271.04 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 114642603537886326, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Text + value: 'Left Hand + + Vive' + objectReference: {fileID: 0} + - target: {fileID: 1678482369823558, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + propertyPath: m_Name + value: Left Hand Help Text + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.x + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.z + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.y + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 271.04 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 271.04 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 509.1 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 509.1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + m_IsPrefabParent: 0 +--- !u!224 &1857386322 stripped +RectTransform: + m_PrefabParentObject: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + m_PrefabInternal: {fileID: 1857386321} +--- !u!1 &1869269956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100136, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1869269957} + m_Layer: 0 + m_Name: Spine2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1869269957 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400136, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1869269956} + m_LocalRotation: {x: 0, y: 0, z: 1.8056423e-35, w: 1} + m_LocalPosition: {x: -0.00000091440717, y: 0.13360204, z: -0.016264597} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1652904149} + - {fileID: 1544287198} + - {fileID: 1629613222} + m_Father: {fileID: 1284476438} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1880603250 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1604533724134352, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1880603251} + - component: {fileID: 1880603252} + m_Layer: 0 + m_Name: forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1880603251 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4755224638836044, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1880603250} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.088, y: 0.1044, z: -0.1811} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1819287518} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &1880603252 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136953014128808428, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1880603250} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.0205 + m_Height: 0.29100004 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1896981785 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1896981786} + - component: {fileID: 1896981788} + - component: {fileID: 1896981787} + m_Layer: 5 + m_Name: tactshoes_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1896981786 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1896981785} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1689996211} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 6.56, y: 0.19999886} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1896981787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1896981785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 6c318c39e5dd83c42ade86630def5356, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1896981788 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1896981785} +--- !u!1 &1906596483 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1906596484} + m_Layer: 0 + m_Name: Bhaptics + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1906596484 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1906596483} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.566} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1162115787} + - {fileID: 625649194} + m_Father: {fileID: 1284476431} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1910505373 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1910505374} + - component: {fileID: 1910505381} + - component: {fileID: 1910505380} + - component: {fileID: 1910505379} + - component: {fileID: 1910505378} + - component: {fileID: 1910505377} + - component: {fileID: 1910505376} + - component: {fileID: 1910505375} + m_Layer: 0 + m_Name: Grabbable Cube + m_TagString: Cubes + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1910505374 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.557, y: 0.792, z: 0.583} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 688036712} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1910505375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 18055ba762aa3994f9c10208cd088bc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1910505376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ec2ac476f2fc9a45a4e69712580a603, type: 3} + m_Name: + m_EditorClassIdentifier: + precisionGrab: 0 + rightSnapHandle: {fileID: 0} + leftSnapHandle: {fileID: 0} + throwVelocityWithAttachDistance: 0 + throwMultiplier: 1 + onGrabCollisionDelay: 0 +--- !u!114 &1910505377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a3abaf4521bf2344ea21ed3020b98eb2, type: 3} + m_Name: + m_EditorClassIdentifier: + disableWhenIdle: 0 + allowedNearTouchControllers: 0 + allowedTouchControllers: 0 + ignoredColliders: [] + isGrabbable: 1 + holdButtonToGrab: 1 + stayGrabbedOnTeleport: 1 + validDrop: 1 + grabOverrideButton: 0 + allowedGrabControllers: 0 + grabAttachMechanicScript: {fileID: 1910505376} + secondaryGrabActionScript: {fileID: 1910505375} + isUsable: 0 + holdButtonToUse: 1 + useOnlyIfGrabbed: 0 + pointerActivatesUseAction: 0 + useOverrideButton: 0 + allowedUseControllers: 0 + objectHighlighter: {fileID: 0} + touchHighlightColor: {r: 0, g: 0, b: 0, a: 0} + usingState: 0 +--- !u!54 &1910505378 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1910505379 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1910505380 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + 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!33 &1910505381 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1910505373} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1924638391 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1924638392} + - component: {fileID: 1924638395} + - component: {fileID: 1924638394} + - component: {fileID: 1924638393} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1924638392 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1924638391} + 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: 611413203} + m_Father: {fileID: 2118958340} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1924638393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1924638391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1423808483} + m_HandleRect: {fileID: 1423808482} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &1924638394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1924638391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1924638395 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1924638391} +--- !u!1 &1928526047 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1928526048} + - component: {fileID: 1928526050} + - component: {fileID: 1928526049} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1928526048 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1928526047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2005560391} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1928526049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1928526047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &1928526050 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1928526047} +--- !u!1 &1947528021 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1947528022} + - component: {fileID: 1947528024} + - component: {fileID: 1947528023} + m_Layer: 5 + m_Name: tactglove_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1947528022 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1947528021} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 514078125} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -17.550001, y: 0.6799996} + m_SizeDelta: {x: 5.5, y: 5.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1947528023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1947528021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 2800000, guid: 65de9deb6699d1e438e3b78d26840493, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1947528024 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1947528021} +--- !u!1 &1953535381 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1953535382} + - component: {fileID: 1953535383} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1953535382 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1953535381} + 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: 122454696} + - {fileID: 1788085139} + - {fileID: 394221905} + m_Father: {fileID: 789891344} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1953535383 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1953535381} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 122454697} + toggleTransition: 1 + graphic: {fileID: 1788085140} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 +--- !u!1 &1992577262 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1992577263} + - component: {fileID: 1992577264} + m_Layer: 5 + m_Name: '[Glove] Left' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1992577263 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1992577262} + 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: 634997060} + - {fileID: 545000210} + m_Father: {fileID: 1006506396} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -10.53, y: -3.11} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1992577264 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1992577262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 876c63562f1f72e498d2ae0ee343d094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &2005560390 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2005560391} + - component: {fileID: 2005560392} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2005560391 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2005560390} + 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: 640547553} + - {fileID: 2056324024} + - {fileID: 1928526048} + m_Father: {fileID: 316364393} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2005560392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2005560390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 640547554} + toggleTransition: 1 + graphic: {fileID: 2056324025} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 +--- !u!1 &2010008177 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100126, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2010008178} + m_Layer: 0 + m_Name: RightToe_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2010008178 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400126, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2010008177} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0000000011347395, y: 0.000000004587741, z: 0.09992521} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1245194040} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2024778039 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1451268688835368, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2024778040} + - component: {fileID: 2024778041} + m_Layer: 0 + m_Name: '[UnityBase_CameraRig]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2024778040 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4928960185606304, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2024778039} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 724699686} + - {fileID: 1843169335} + - {fileID: 1087430416} + m_Father: {fileID: 1380104169} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2024778041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114030496420040178, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2024778039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eb11f5366d9c17040b6a0ed716e36353, type: 3} + m_Name: + m_EditorClassIdentifier: + lockPhysicsUpdateRateToRenderFrequency: 1 +--- !u!1 &2031144552 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1517136650344390, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2031144553} + - component: {fileID: 2031144556} + - component: {fileID: 2031144555} + - component: {fileID: 2031144554} + m_Layer: 0 + m_Name: OVRCameraRig + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2031144553 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4973452351988574, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2031144552} + 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: 1288073601} + m_Father: {fileID: 93853990} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2031144554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114259044173967846, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2031144552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2031144555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114955355810483510, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2031144552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2031144556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114319718199485736, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2031144552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &2032420837 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2032420838} + - component: {fileID: 2032420841} + - component: {fileID: 2032420839} + m_Layer: 8 + m_Name: RightForearmModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2032420838 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2032420837} + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.1501, y: -0, z: 0} + m_LocalScale: {x: 0.12, y: 0.14, z: 0.12} + m_Children: [] + m_Father: {fileID: 1284476440} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!23 &2032420839 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2032420837} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2032420841 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2032420837} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &2042508952 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1742251324} + m_Modifications: + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalPosition.z + value: -0.601 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.x + value: 0.006 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 2.091 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.x + value: 1000 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 549.4 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 114642603537886326, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_Text + value: This body is mapped with haptics on the upper torso. Hit the body with + the cube to play a pattern. Hit with the sphere for a pulse. + objectReference: {fileID: 0} + - target: {fileID: 1678482369823558, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + propertyPath: m_Name + value: Body Help Text + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.x + value: 0.0010000004 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.z + value: 0.0010000004 + objectReference: {fileID: 0} + - target: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_LocalScale.y + value: 0.0009999999 + objectReference: {fileID: 0} + - target: {fileID: 224175581045623504, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 549.4 + objectReference: {fileID: 0} + - target: {fileID: 224435910559421880, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + propertyPath: m_SizeDelta.y + value: 549.4 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 55bcebf0300be464cb5f7ef8d78bb36d, type: 2} + m_IsPrefabParent: 0 +--- !u!224 &2042508953 stripped +RectTransform: + m_PrefabParentObject: {fileID: 224861586572071280, guid: 55bcebf0300be464cb5f7ef8d78bb36d, + type: 2} + m_PrefabInternal: {fileID: 2042508952} +--- !u!1 &2042970088 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100132, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2042970089} + m_Layer: 0 + m_Name: Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2042970089 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400132, guid: 9d87c9e4e1c3b4748a1b8dcfcd5ed78c, type: 3} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2042970088} + m_LocalRotation: {x: -1.3930783e-15, y: -0.00000001376344, z: 0.00000044177568, + w: 1} + m_LocalPosition: {x: -0.0000000056483196, y: 0.09923459, z: -0.012273348} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1284476438} + m_Father: {fileID: 1284476433} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2047951602 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1304511809735652, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2047951603} + - component: {fileID: 2047951604} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2047951603 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4963525775687238, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2047951602} + m_LocalRotation: {x: -0.1843855, y: -0.10542028, z: 0.17531382, w: 0.9613291} + m_LocalPosition: {x: -0.26486504, y: 0.29858646, z: -0.04743135} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1641913276} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 8.5308, y: -9.6659, z: 0} +--- !u!136 &2047951604 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136399032289694602, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2047951602} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.023820002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2048806584 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2048806585} + - component: {fileID: 2048806587} + - component: {fileID: 2048806586} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2048806585 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2048806584} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1544560132} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2048806586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2048806584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &2048806587 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2048806584} +--- !u!1 &2056324023 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2056324024} + - component: {fileID: 2056324026} + - component: {fileID: 2056324025} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2056324024 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2056324023} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2005560391} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2056324025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2056324023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &2056324026 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2056324023} +--- !u!1 &2062698093 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1888994616582004, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2062698094} + - component: {fileID: 2062698095} + m_Layer: 0 + m_Name: bone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2062698094 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4475908241950904, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2062698093} + m_LocalRotation: {x: 0.24710183, y: 0.051211912, z: -0.063631974, w: -0.96554077} + m_LocalPosition: {x: 0.18004374, y: 0.3130201, z: -0.07055047} + m_LocalScale: {x: 0.9999995, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 777583215} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 6.0762, y: -15.1172, z: 19.823} +--- !u!136 &2062698095 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 136610530761379460, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2062698093} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.004 + m_Height: 0.023960002 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2077198171 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2077198172} + - component: {fileID: 2077198174} + - component: {fileID: 2077198173} + m_Layer: 0 + m_Name: BodyModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2077198172 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2077198171} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0.007, z: -0} + m_LocalScale: {x: 0.2, y: 0.3, z: 0.2} + m_Children: [] + m_Father: {fileID: 1284476438} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2077198173 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2077198171} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2077198174 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2077198171} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2107991717 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2107991718} + - component: {fileID: 2107991720} + - component: {fileID: 2107991719} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2107991718 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2107991717} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1175871414} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2107991719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2107991717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &2107991720 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2107991717} +--- !u!1 &2118958339 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2118958340} + - component: {fileID: 2118958343} + - component: {fileID: 2118958342} + - component: {fileID: 2118958341} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2118958340 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2118958339} + 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: 768331924} + - {fileID: 1924638392} + m_Father: {fileID: 1175871414} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &2118958341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2118958339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 789891344} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 16 + m_Viewport: {fileID: 768331924} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1924638393} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &2118958342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2118958339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &2118958343 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2118958339} +--- !u!1 &2133304074 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1761415754028618, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2133304075} + - component: {fileID: 2133304077} + - component: {fileID: 2133304076} + m_Layer: 5 + m_Name: Hints + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2133304075 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224715467185839308, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2133304074} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 584085275} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 41, y: -8} + m_SizeDelta: {x: 82, y: 16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2133304076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114623937304754896, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2133304074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Control Hints +--- !u!222 &2133304077 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222344553750954074, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2133304074} +--- !u!1 &2137910511 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1597183874378494, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2137910512} + - component: {fileID: 2137910514} + - component: {fileID: 2137910513} + m_Layer: 0 + m_Name: RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2137910512 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4162364069602562, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2137910511} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2, y: 1.2, z: 0.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 648673135} + - {fileID: 661146616} + m_Father: {fileID: 669998280} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2137910513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114758034639662924, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2137910511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b32642724c1719444826991e4ff8fccd, type: 3} + m_Name: + m_EditorClassIdentifier: + autoStartSampling: 1 + velocityAverageFrames: 5 + angularVelocityAverageFrames: 10 +--- !u!114 &2137910514 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114202371887820390, guid: 52d03cf50b60de244a4d9e97934eec67, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2137910511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0893f0c8a7712e8458dc3722eef95aca, type: 3} + m_Name: + m_EditorClassIdentifier: + selected: 0 diff --git a/Assets/VIRTUOSO/Examples/Haptic Example Scene.unity.meta b/Assets/VIRTUOSO/Examples/Haptic Example Scene.unity.meta new file mode 100644 index 0000000..0efc470 --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Haptic Example Scene.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eca80662c935fd7458bc2b08bf184b2e +timeCreated: 1551303725 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Examples/Scripted Objects.meta b/Assets/VIRTUOSO/Examples/Scripted Objects.meta new file mode 100644 index 0000000..0bd03f7 --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Scripted Objects.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bf909ae293ceed345aab3343b3687db1 +folderAsset: yes +timeCreated: 1546448237 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures.meta b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures.meta new file mode 100644 index 0000000..d7d68bb --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dd64e8d669464da46bd0a3159d627d77 +folderAsset: yes +timeCreated: 1546879249 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset new file mode 100644 index 0000000..6308407 --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a946ec1f6eba3847a40b65e89f9f034, type: 3} + m_Name: Grab + m_EditorClassIdentifier: + gestureConditionList: + - featureToCheck: 6 + featureValue: 1 + handSpecific: 0 + specificHand: 0 diff --git a/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset.meta b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset.meta new file mode 100644 index 0000000..4043c10 --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 00b1d9b68c0fcb149b4a77ca61ba13c0 +timeCreated: 1546448255 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset new file mode 100644 index 0000000..c91d524 --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a946ec1f6eba3847a40b65e89f9f034, type: 3} + m_Name: Pinch + m_EditorClassIdentifier: + gestureConditionList: + - featureToCheck: 7 + featureValue: 1 + handSpecific: 0 + specificHand: 0 diff --git a/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset.meta b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset.meta new file mode 100644 index 0000000..93e2e3c --- /dev/null +++ b/Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9a2bef50be5bb8342aaf62f44dfbefe8 +timeCreated: 1547581165 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Materials.meta b/Assets/VIRTUOSO/Materials.meta new file mode 100644 index 0000000..73f5f1b --- /dev/null +++ b/Assets/VIRTUOSO/Materials.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 88d9314c7f908f64a8d94624ad003d07 +folderAsset: yes +timeCreated: 1554232320 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat new file mode 100644 index 0000000..257011e --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: HapticPatternHitLocation_Active + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.35335144, g: 0.32320502, b: 0.7205882, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat.meta b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat.meta new file mode 100644 index 0000000..6ea5a2e --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cfb9c0ad0f7cc3f489fe4a69ed117f38 +timeCreated: 1554232300 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat new file mode 100644 index 0000000..19eabd1 --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: HapticPatternHitLocation_Inactive + m_Shader: {fileID: 4800000, guid: 4c84081e4523a5646919b30697cfccb8, type: 3} + 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.50395554, g: 0.46323526, b: 1, a: 0.19607843} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat.meta b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat.meta new file mode 100644 index 0000000..bdba433 --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5b923cd611d17a9419f5788d216210e3 +timeCreated: 1554232300 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat b/Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat new file mode 100644 index 0000000..9ab4c34 --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: HapticPatternHitVisualization + 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: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat.meta b/Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat.meta new file mode 100644 index 0000000..6f476a8 --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3d9809e611ea4f040aa4ba1c97679ff1 +timeCreated: 1556041615 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat b/Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat new file mode 100644 index 0000000..a7e4e31 --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat @@ -0,0 +1,107 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: HapticPatternLineRenderer + m_Shader: {fileID: 4800000, guid: 89b31743c7038024bb7feb2af9c3a232, type: 3} + m_ShaderKeywords: _COLORCOLOR_ON _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 0 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 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: + - _BlendOp: 0 + - _BumpScale: 1 + - _CameraFadingEnabled: 0 + - _CameraFarFadeDistance: 2 + - _CameraNearFadeDistance: 1 + - _ColorMask: 15 + - _ColorMode: 4 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DistortionBlend: 0.5 + - _DistortionEnabled: 0 + - _DistortionStrength: 1 + - _DistortionStrengthScaled: 0 + - _DstBlend: 0 + - _EmissionEnabled: 0 + - _FlipbookMode: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _InvFade: 1 + - _LightingEnabled: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Shininess: 0.7 + - _SmoothnessTextureChannel: 0 + - _SoftParticlesEnabled: 0 + - _SoftParticlesFarFadeDistance: 1 + - _SoftParticlesNearFadeDistance: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0} + - _EmisColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 0} + - _Emission: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0} + - _SpecColor: {r: 1, g: 1, b: 1, a: 1} + - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} diff --git a/Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat.meta b/Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat.meta new file mode 100644 index 0000000..0eaa4da --- /dev/null +++ b/Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8e0e7d5234ddbdc48829ca867689274d +timeCreated: 1556025569 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Materials/UnlitWhite.mat b/Assets/VIRTUOSO/Materials/UnlitWhite.mat new file mode 100644 index 0000000..73b8f42 --- /dev/null +++ b/Assets/VIRTUOSO/Materials/UnlitWhite.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: UnlitWhite + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/Materials/UnlitWhite.mat.meta b/Assets/VIRTUOSO/Materials/UnlitWhite.mat.meta new file mode 100644 index 0000000..05696c4 --- /dev/null +++ b/Assets/VIRTUOSO/Materials/UnlitWhite.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5969cc5b3b50cad4595ffacc3129c769 +timeCreated: 1556025849 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Prefabs.meta b/Assets/VIRTUOSO/Prefabs.meta new file mode 100644 index 0000000..b776e99 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f72eeea04be752b41ba4e178963e61a6 +folderAsset: yes +timeCreated: 1544123344 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Prefabs/HapticSDK.meta b/Assets/VIRTUOSO/Prefabs/HapticSDK.meta new file mode 100644 index 0000000..2f35b28 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/HapticSDK.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a1e390efcbf21be45a3798f819988d41 +folderAsset: yes +timeCreated: 1554234800 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab b/Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab new file mode 100644 index 0000000..997d694 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab @@ -0,0 +1,955 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1053843759791868} + m_IsPrefabParent: 1 +--- !u!1 &1035385870975372 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4054231629665346} + m_Layer: 0 + m_Name: Left_Shoulder_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1053843759791868 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4271500221960068} + - component: {fileID: 114208904744087430} + m_Layer: 0 + m_Name: Haptic Visualization Body + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1083105962149960 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4631098692621878} + - component: {fileID: 136089835174983310} + - component: {fileID: 114012929115563988} + m_Layer: 8 + m_Name: Right_Upper_Arm_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1099149619659028 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4525650680892206} + - component: {fileID: 136407344686077820} + - component: {fileID: 114377134507875152} + m_Layer: 8 + m_Name: Left_Knee_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1114742339652056 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4877908846605584} + - component: {fileID: 136654630011083612} + - component: {fileID: 114783843953625652} + m_Layer: 8 + m_Name: Ribs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1167577692357882 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4453963229045382} + m_Layer: 0 + m_Name: Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1247336718772814 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4292699886160312} + - component: {fileID: 136884419415170528} + - component: {fileID: 114490903555144712} + m_Layer: 8 + m_Name: Left_Wrist_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1264096109293900 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4236578248422772} + - component: {fileID: 136341330852093402} + - component: {fileID: 114203006580595834} + m_Layer: 8 + m_Name: Left_Upper_Arm_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1282347187217802 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4938691408390086} + - component: {fileID: 136735353089342698} + - component: {fileID: 114536451109548210} + m_Layer: 8 + m_Name: Right_Wrist_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1386005033434358 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4174663229968330} + - component: {fileID: 136132395505693606} + - component: {fileID: 114165963249344892} + m_Layer: 8 + m_Name: Right_Thigh_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1392779160023346 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4767739134601712} + - component: {fileID: 136347526042230748} + - component: {fileID: 114811040180811708} + m_Layer: 8 + m_Name: Left_Forearm_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1408092913153990 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4763025958127566} + - component: {fileID: 136755727195907238} + - component: {fileID: 114058718944829676} + m_Layer: 8 + m_Name: Right_Forearm_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1528493124020778 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4172871355335284} + - component: {fileID: 136550040054478894} + - component: {fileID: 114881026745060690} + - component: {fileID: 33148308552271424} + - component: {fileID: 23272952462608808} + m_Layer: 8 + m_Name: Hip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1769606172213892 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4647434389575900} + - component: {fileID: 136916909018245066} + - component: {fileID: 114102444894479292} + m_Layer: 8 + m_Name: Left_Thigh_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1889990419116682 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4621912735386154} + m_Layer: 0 + m_Name: Right_Shoulder_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1903020889364280 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4899135427112030} + - component: {fileID: 136372234853610230} + - component: {fileID: 114294154893535948} + m_Layer: 8 + m_Name: Right_Knee_Joint_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1919306430183628 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4465287776919878} + - component: {fileID: 136852640287320400} + - component: {fileID: 114737506146178392} + m_Layer: 8 + m_Name: Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4054231629665346 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1035385870975372} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.109, y: 0.30299997, z: -0.003} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4236578248422772} + m_Father: {fileID: 4877908846605584} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4172871355335284 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1528493124020778} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.0337268, z: 0.035603084} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4647434389575900} + - {fileID: 4174663229968330} + m_Father: {fileID: 4271500221960068} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4174663229968330 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1386005033434358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.06890567, y: -0.12026131, z: 0.024128828} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4899135427112030} + m_Father: {fileID: 4172871355335284} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4236578248422772 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1264096109293900} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.06358527, y: 0, z: -3.1086245e-17} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4767739134601712} + m_Father: {fileID: 4054231629665346} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4271500221960068 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1053843759791868} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.806, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4172871355335284} + - {fileID: 4877908846605584} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4292699886160312 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1247336718772814} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.3473, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4767739134601712} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4453963229045382 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1167577692357882} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.39391303, z: -0.03425329} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4465287776919878} + m_Father: {fileID: 4877908846605584} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4465287776919878 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919306430183628} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.07959311, z: -2.0962138e-17} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4453963229045382} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4525650680892206 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1099149619659028} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.061, y: -0.3707034, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4647434389575900} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4621912735386154 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1889990419116682} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.115, y: 0.303, z: -0.002999954} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4631098692621878} + m_Father: {fileID: 4877908846605584} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4631098692621878 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1083105962149960} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.063585564, y: 0, z: -0.000000039259945} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4763025958127566} + m_Father: {fileID: 4621912735386154} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4647434389575900 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1769606172213892} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.06890549, y: -0.12026149, z: 0.024128921} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4525650680892206} + m_Father: {fileID: 4172871355335284} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4763025958127566 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1408092913153990} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.24062023, y: 0, z: -0.012117967} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4938691408390086} + m_Father: {fileID: 4631098692621878} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4767739134601712 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1392779160023346} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2383711, y: 0, z: -0.0012605645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4292699886160312} + m_Father: {fileID: 4236578248422772} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4877908846605584 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114742339652056} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.1426954, z: 0.027298741} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4054231629665346} + - {fileID: 4453963229045382} + - {fileID: 4621912735386154} + m_Father: {fileID: 4271500221960068} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4899135427112030 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903020889364280} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.054, y: -0.37070364, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4174663229968330} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4938691408390086 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1282347187217802} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.312, y: 0, z: 0.007066546} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4763025958127566} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23272952462608808 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1528493124020778} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33148308552271424 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1528493124020778} + m_Mesh: {fileID: 0} +--- !u!114 &114012929115563988 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1083105962149960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 14 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114058718944829676 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1408092913153990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 16 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114102444894479292 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1769606172213892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 1 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 1 + drawGizmoUnselected: 0 +--- !u!114 &114165963249344892 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1386005033434358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 2 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114203006580595834 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1264096109293900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 13 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114208904744087430 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1053843759791868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a4a905045b12a42a41413d4bef4b6c, type: 3} + m_Name: + m_EditorClassIdentifier: + timeToFadeOut: 1 + hapticPatternVisualMesh: {fileID: 10207, guid: 0000000000000000e000000000000000, + type: 0} + hapticPatternVisualMaterial: {fileID: 2100000, guid: 3d9809e611ea4f040aa4ba1c97679ff1, + type: 2} +--- !u!114 &114294154893535948 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903020889364280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 4 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114377134507875152 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1099149619659028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 3 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 1 + drawGizmoUnselected: 0 +--- !u!114 &114490903555144712 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1247336718772814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 17 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114536451109548210 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1282347187217802} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 18 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114737506146178392 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919306430183628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 10 + polarAxis: {x: 1, y: 0, z: 0} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114783843953625652 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114742339652056} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 7 + polarAxis: {x: 1, y: 0, z: 0} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114811040180811708 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1392779160023346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 15 + polarAxis: {x: 0, y: 0, z: 1} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!114 &114881026745060690 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1528493124020778} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b723a283540a41e48a91402afa4a18a7, type: 3} + m_Name: + m_EditorClassIdentifier: + attachedBody: 0 + polarAxis: {x: 1, y: 0, z: 0} + invertAngleDirection: 0 + drawGizmoUnselected: 0 +--- !u!136 &136089835174983310 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1083105962149960} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06015505 + m_Height: 0.2406202 + m_Direction: 0 + m_Center: {x: 0.1203101, y: 0, z: 0} +--- !u!136 &136132395505693606 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1386005033434358} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.3717341 + m_Direction: 1 + m_Center: {x: 0.06, y: -0.1858671, z: 0} +--- !u!136 &136341330852093402 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1264096109293900} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.05959277 + m_Height: 0.23837107 + m_Direction: 0 + m_Center: {x: -0.11918554, y: 0, z: 0} +--- !u!136 &136347526042230748 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1392779160023346} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.3 + m_Direction: 0 + m_Center: {x: -0.1779953, y: 0, z: 0} +--- !u!136 &136372234853610230 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903020889364280} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.50453115 + m_Direction: 1 + m_Center: {x: 0, y: -0.2522656, z: 0} +--- !u!136 &136407344686077820 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1099149619659028} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.5045313 + m_Direction: 1 + m_Center: {x: 0, y: -0.2522657, z: 0} +--- !u!136 &136550040054478894 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1528493124020778} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.1 + m_Height: 0.2311621 + m_Direction: 1 + m_Center: {x: -0.006552562, y: -0.02565179, z: 0.00000001490116} +--- !u!136 &136654630011083612 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114742339652056} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.1 + m_Height: 0.4 + m_Direction: 1 + m_Center: {x: 0, y: 0.21, z: 0} +--- !u!136 &136735353089342698 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1282347187217802} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.04 + m_Height: 0.1 + m_Direction: 0 + m_Center: {x: 0.05, y: 0, z: 0} +--- !u!136 &136755727195907238 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1408092913153990} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.28 + m_Direction: 0 + m_Center: {x: 0.16, y: 0, z: 0} +--- !u!136 &136852640287320400 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919306430183628} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.1 + m_Height: 0.22 + m_Direction: 1 + m_Center: {x: 0, y: 0.1, z: 0} +--- !u!136 &136884419415170528 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1247336718772814} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.04 + m_Height: 0.1 + m_Direction: 0 + m_Center: {x: -0.05, y: 0, z: 0} +--- !u!136 &136916909018245066 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1769606172213892} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.37173384 + m_Direction: 1 + m_Center: {x: -0.06, y: -0.1858669, z: 0} diff --git a/Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab.meta b/Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab.meta new file mode 100644 index 0000000..8dcde63 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2e599cc0145c01a4eb72f91e86ee1192 +timeCreated: 1556135203 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab b/Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab new file mode 100644 index 0000000..fdaea08 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab @@ -0,0 +1,115 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1869474814193224} + m_IsPrefabParent: 1 +--- !u!1 &1869474814193224 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4948784911913882} + - component: {fileID: 33177577060087966} + - component: {fileID: 135729222570438320} + - component: {fileID: 23549047301104296} + - component: {fileID: 114960066427519544} + m_Layer: 0 + m_Name: Hit Location + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4948784911913882 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1869474814193224} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.05, y: 0.05, z: 0.05} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23549047301104296 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1869474814193224} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: cfb9c0ad0f7cc3f489fe4a69ed117f38, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33177577060087966 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1869474814193224} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &114960066427519544 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1869474814193224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 68547b836d856594492dc71ce6e4d9e8, type: 3} + m_Name: + m_EditorClassIdentifier: + hitAngle: 0 + hitHeight: 0 + intensity: 0 + timing: 0 + keyFrameIndex: 0 + isTemporary: 0 +--- !u!135 &135729222570438320 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1869474814193224} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.75 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab.meta b/Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab.meta new file mode 100644 index 0000000..349b525 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d5a00861e7f46694596ab7fa221e9880 +timeCreated: 1554234804 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab b/Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab new file mode 100644 index 0000000..0d5426f --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab @@ -0,0 +1,660 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1530813272837972} + m_IsPrefabParent: 1 +--- !u!1 &1008300763738600 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4066959826334798} + - component: {fileID: 20059012370197968} + - component: {fileID: 114272501480705338} + - component: {fileID: 92860168854984720} + m_Layer: 0 + m_Name: Camera (head) + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1137961307450786 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4447134295776998} + - component: {fileID: 114799103268352884} + m_Layer: 0 + m_Name: Controller (right) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1298517128135166 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4320580495385126} + - component: {fileID: 20173899230636822} + - component: {fileID: 124879373713902466} + - component: {fileID: 114722099414197240} + m_Layer: 0 + m_Name: Camera (eye) + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1334760165482454 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4806820895658530} + - component: {fileID: 114283496042481242} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1429831684904166 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4125342936573170} + - component: {fileID: 81268690088085246} + - component: {fileID: 114720572018341394} + m_Layer: 0 + m_Name: Camera (ears) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1469340642443624 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4057365329095650} + - component: {fileID: 114322037301311306} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1500525119058844 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4814017328576562} + - component: {fileID: 114239814234397900} + - component: {fileID: 23817272513856494} + - component: {fileID: 33874511872519910} + - component: {fileID: 114275759369447404} + m_Layer: 0 + m_Name: '[CameraRig]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1530813272837972 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4174144911341272} + - component: {fileID: 114570725477862640} + m_Layer: 0 + m_Name: SteamVR (Pre 2.0) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1884910531735076 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4734078123124586} + - component: {fileID: 114308243647686688} + m_Layer: 0 + m_Name: Controller (left) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1979197243136844 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4749873164935810} + - component: {fileID: 114736430303698032} + m_Layer: 0 + m_Name: '[SteamVR]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4057365329095650 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1469340642443624} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4734078123124586} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4066959826334798 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1008300763738600} + 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: 4320580495385126} + - {fileID: 4125342936573170} + m_Father: {fileID: 4814017328576562} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4125342936573170 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1429831684904166} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4066959826334798} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4174144911341272 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1530813272837972} + 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: 4814017328576562} + - {fileID: 4749873164935810} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4320580495385126 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1298517128135166} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4066959826334798} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4447134295776998 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1137961307450786} + 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: 4806820895658530} + m_Father: {fileID: 4814017328576562} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4734078123124586 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884910531735076} + 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: 4057365329095650} + m_Father: {fileID: 4814017328576562} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4749873164935810 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1979197243136844} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4174144911341272} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4806820895658530 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1334760165482454} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4447134295776998} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4814017328576562 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1500525119058844} + 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: 4734078123124586} + - {fileID: 4447134295776998} + - {fileID: 4066959826334798} + m_Father: {fileID: 4174144911341272} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20059012370197968 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1008300763738600} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0 + far clip plane: 1 + field of view: 60 + orthographic: 1 + orthographic size: 1 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 0 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!20 &20173899230636822 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1298517128135166} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.05 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!23 &23817272513856494 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1500525119058844} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 10754, 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_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33874511872519910 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1500525119058844} + m_Mesh: {fileID: 0} +--- !u!81 &81268690088085246 +AudioListener: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1429831684904166} + m_Enabled: 1 +--- !u!92 &92860168854984720 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1008300763738600} + m_Enabled: 1 +--- !u!114 &114239814234397900 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1500525119058844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e3b47c2980b93bc48844a54641dab5b8, type: 3} + m_Name: + m_EditorClassIdentifier: + left: {fileID: 1884910531735076} + right: {fileID: 1137961307450786} + objects: [] + assignAllBeforeIdentified: 0 +--- !u!114 &114272501480705338 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1008300763738600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d37c2cf88f7c59f4c8cf5d3812568143, type: 3} + m_Name: + m_EditorClassIdentifier: + index: 0 + origin: {fileID: 0} +--- !u!114 &114275759369447404 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1500525119058844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1f0522eaef74d984591c060d05a095c8, type: 3} + m_Name: + m_EditorClassIdentifier: + borderThickness: 0.15 + wireframeHeight: 2 + drawWireframeWhenSelectedOnly: 0 + drawInGame: 0 + size: 0 + color: {r: 0, g: 1, b: 1, a: 1} + vertices: + - {x: 1.5, y: 0.01, z: 1.125} + - {x: 1.5, y: 0.01, z: -1.125} + - {x: -1.5, y: 0.01, z: -1.125} + - {x: -1.5, y: 0.01, z: 1.125} + - {x: 1.65, y: 0.01, z: 1.275} + - {x: 1.65, y: 0.01, z: -1.275} + - {x: -1.65, y: 0.01, z: -1.275} + - {x: -1.65, y: 0.01, z: 1.275} +--- !u!114 &114283496042481242 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1334760165482454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5890e3cad70bea64d91aef9145ba3454, type: 3} + m_Name: + m_EditorClassIdentifier: + index: -1 + modelOverride: + shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + verbose: 0 + createComponents: 1 + updateDynamically: 1 +--- !u!114 &114308243647686688 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884910531735076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d37c2cf88f7c59f4c8cf5d3812568143, type: 3} + m_Name: + m_EditorClassIdentifier: + index: -1 + origin: {fileID: 0} +--- !u!114 &114322037301311306 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1469340642443624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5890e3cad70bea64d91aef9145ba3454, type: 3} + m_Name: + m_EditorClassIdentifier: + index: -1 + modelOverride: + shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + verbose: 0 + createComponents: 1 + updateDynamically: 1 +--- !u!114 &114570725477862640 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1530813272837972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 0 + actualBoundaries: {fileID: 1500525119058844} + actualHeadset: {fileID: 1298517128135166} + actualLeftController: {fileID: 1884910531735076} + actualRightController: {fileID: 1137961307450786} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 1469340642443624} + modelAliasRightController: {fileID: 1334760165482454} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_SteamVRSystem + descriptionIndex: 0 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_SteamVRBoundaries + descriptionIndex: 0 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_SteamVRHeadset + descriptionIndex: 0 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_SteamVRController + descriptionIndex: 0 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_FallbackTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_NoHand + descriptionIndex: 0 +--- !u!114 &114720572018341394 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1429831684904166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49a86c1078ce4314b9c4224560e031b9, type: 3} + m_Name: + m_EditorClassIdentifier: + vrcam: {fileID: 0} +--- !u!114 &114722099414197240 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1298517128135166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bca9ccf900ccc84c887d783321d27e2, type: 3} + m_Name: + m_EditorClassIdentifier: + _head: {fileID: 4066959826334798} + _ears: {fileID: 4125342936573170} + wireframe: 0 +--- !u!114 &114736430303698032 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1979197243136844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e979227f3384fac4b8ca0b3550bf005c, type: 3} + m_Name: + m_EditorClassIdentifier: + pauseGameWhenDashboardIsVisible: 1 + lockPhysicsUpdateRateToRenderFrequency: 1 + externalCamera: {fileID: 0} + externalCameraConfigPath: externalcamera.cfg + trackingSpace: 1 +--- !u!114 &114799103268352884 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1137961307450786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d37c2cf88f7c59f4c8cf5d3812568143, type: 3} + m_Name: + m_EditorClassIdentifier: + index: -1 + origin: {fileID: 0} +--- !u!124 &124879373713902466 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1298517128135166} + m_Enabled: 1 diff --git a/Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab.meta b/Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab.meta new file mode 100644 index 0000000..8236bed --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 867b75944957c6f4e8d9230c068e1624 +timeCreated: 1548270708 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab b/Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab new file mode 100644 index 0000000..eb2c975 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab @@ -0,0 +1,285 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1824136381808930} + m_IsPrefabParent: 1 +--- !u!1 &1418099757997208 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4130436502419554} + m_Layer: 0 + m_Name: Hands + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1589639960284702 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4742538663691552} + - component: {fileID: 114298336582019970} + m_Layer: 0 + m_Name: SteamVR + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1704517358722742 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4318050741881642} + - component: {fileID: 114315273328022568} + m_Layer: 0 + m_Name: Oculus + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1805614529223182 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4145184380927994} + m_Layer: 0 + m_Name: '[VRTK_SDKSetups]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1824136381808930 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4971090550619334} + - component: {fileID: 114820094090411886} + m_Layer: 0 + m_Name: '[VRTK_SDKManager]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4130436502419554 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1418099757997208} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4145184380927994} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4145184380927994 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1805614529223182} + 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: 4742538663691552} + - {fileID: 4318050741881642} + - {fileID: 4130436502419554} + m_Father: {fileID: 4971090550619334} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4318050741881642 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1704517358722742} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4145184380927994} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4742538663691552 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1589639960284702} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4145184380927994} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4971090550619334 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1824136381808930} + 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: 4145184380927994} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114298336582019970 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1589639960284702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 0 + actualBoundaries: {fileID: 0} + actualHeadset: {fileID: 0} + actualLeftController: {fileID: 0} + actualRightController: {fileID: 0} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 0} + modelAliasRightController: {fileID: 0} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_SteamVRSystem + descriptionIndex: 0 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_SteamVRBoundaries + descriptionIndex: 0 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_SteamVRHeadset + descriptionIndex: 0 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_SteamVRController + descriptionIndex: 0 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_SteamVRTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_NoHand + descriptionIndex: 0 +--- !u!114 &114315273328022568 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1704517358722742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeda6d41317f444b900e374895f14e95, type: 3} + m_Name: + m_EditorClassIdentifier: + autoPopulateObjectReferences: 1 + actualBoundaries: {fileID: 0} + actualHeadset: {fileID: 0} + actualLeftController: {fileID: 0} + actualRightController: {fileID: 0} + actualTrackers: [] + actualHand: {fileID: 0} + modelAliasLeftController: {fileID: 0} + modelAliasRightController: {fileID: 0} + cachedSystemSDKInfo: + baseTypeName: VRTK.SDK_BaseSystem + fallbackTypeName: VRTK.SDK_FallbackSystem + typeName: VRTK.SDK_OculusSystem + descriptionIndex: 0 + cachedBoundariesSDKInfo: + baseTypeName: VRTK.SDK_BaseBoundaries + fallbackTypeName: VRTK.SDK_FallbackBoundaries + typeName: VRTK.SDK_OculusBoundaries + descriptionIndex: 0 + cachedHeadsetSDKInfo: + baseTypeName: VRTK.SDK_BaseHeadset + fallbackTypeName: VRTK.SDK_FallbackHeadset + typeName: VRTK.SDK_OculusHeadset + descriptionIndex: 0 + cachedControllerSDKInfo: + baseTypeName: VRTK.SDK_BaseController + fallbackTypeName: VRTK.SDK_FallbackController + typeName: VRTK.SDK_OculusController + descriptionIndex: 0 + cachedTrackerSDKInfo: + baseTypeName: VRTK.SDK_BaseTracker + fallbackTypeName: VRTK.SDK_FallbackTracker + typeName: VRTK.SDK_OculusTracker + descriptionIndex: 0 + cachedHandSDKInfo: + baseTypeName: VRTK.SDK_BaseHand + fallbackTypeName: VRTK.SDK_FallbackHand + typeName: VRTK.SDK_NoHand + descriptionIndex: 0 +--- !u!114 &114820094090411886 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1824136381808930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5837af0260a118e4d808bfe0405429a1, type: 3} + m_Name: + m_EditorClassIdentifier: + autoManageScriptDefines: 1 + activeScriptingDefineSymbolsWithoutSDKClasses: [] + scriptAliasLeftController: {fileID: 0} + scriptAliasRightController: {fileID: 0} + autoManageVRSettings: 1 + autoLoadSetup: 1 + setups: + - {fileID: 114315273328022568} + - {fileID: 114298336582019970} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + excludeTargetGroups: 1a0000001b000000 + persistOnLoad: 0 diff --git a/Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab.meta b/Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab.meta new file mode 100644 index 0000000..d3f0a3d --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52d03cf50b60de244a4d9e97934eec67 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab b/Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab new file mode 100644 index 0000000..09ca363 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab @@ -0,0 +1,321 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1650106300411788} + m_IsPrefabParent: 1 +--- !u!1 &1402785467559628 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4232736678061846} + - component: {fileID: 114010055366141268} + - component: {fileID: 114941995053046290} + - component: {fileID: 114916317532594616} + - component: {fileID: 114264736996810730} + - component: {fileID: 135535306576535436} + m_Layer: 0 + m_Name: LeftControllerScriptAlias + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1403344188374614 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4224632779464888} + - component: {fileID: 114892990097616302} + - component: {fileID: 114549548085660490} + - component: {fileID: 114970712872520258} + - component: {fileID: 114292905040315242} + - component: {fileID: 135537510739073292} + m_Layer: 0 + m_Name: RightControllerScriptAlias + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1650106300411788 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4316360019514298} + m_Layer: 0 + m_Name: '[VRTK_Scripts]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4224632779464888 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403344188374614} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4316360019514298} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4232736678061846 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402785467559628} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4316360019514298} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4316360019514298 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1650106300411788} + 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: 4232736678061846} + - {fileID: 4224632779464888} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114010055366141268 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402785467559628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eba3cd5456cd79e49948f5ceb58544b4, type: 3} + m_Name: + m_EditorClassIdentifier: + axisFidelity: 1 + senseAxisForceZeroThreshold: 0.15 + senseAxisPressThreshold: 0.95 + triggerClickThreshold: 1 + triggerForceZeroThreshold: 0.01 + triggerAxisZeroOnUntouch: 0 + gripClickThreshold: 1 + gripForceZeroThreshold: 0.01 + gripAxisZeroOnUntouch: 0 + triggerPressed: 0 + triggerTouched: 0 + triggerHairlinePressed: 0 + triggerClicked: 0 + triggerAxisChanged: 0 + triggerSenseAxisChanged: 0 + gripPressed: 0 + gripTouched: 0 + gripHairlinePressed: 0 + gripClicked: 0 + gripAxisChanged: 0 + touchpadPressed: 0 + touchpadTouched: 0 + touchpadAxisChanged: 0 + touchpadSenseAxisChanged: 0 + touchpadTwoTouched: 0 + touchpadTwoPressed: 0 + touchpadTwoAxisChanged: 0 + buttonOnePressed: 0 + buttonOneTouched: 0 + buttonTwoPressed: 0 + buttonTwoTouched: 0 + startMenuPressed: 0 + middleFingerSenseAxisChanged: 0 + ringFingerSenseAxisChanged: 0 + pinkyFingerSenseAxisChanged: 0 + gripSenseAxisChanged: 0 + gripSensePressed: 0 + controllerVisible: 1 +--- !u!114 &114264736996810730 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402785467559628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65eb64f0f2fd6d64faddbcf5d7d3bdbb, type: 3} + m_Name: + m_EditorClassIdentifier: + useButton: 3 + controllerEvents: {fileID: 114010055366141268} + interactTouch: {fileID: 114941995053046290} + interactGrab: {fileID: 114916317532594616} +--- !u!114 &114292905040315242 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403344188374614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65eb64f0f2fd6d64faddbcf5d7d3bdbb, type: 3} + m_Name: + m_EditorClassIdentifier: + useButton: 3 + controllerEvents: {fileID: 114892990097616302} + interactTouch: {fileID: 114549548085660490} + interactGrab: {fileID: 114970712872520258} +--- !u!114 &114549548085660490 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403344188374614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64e104da36bd3b04b90c6ae969ac66dc, type: 3} + m_Name: + m_EditorClassIdentifier: + customColliderContainer: {fileID: 0} +--- !u!114 &114892990097616302 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403344188374614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eba3cd5456cd79e49948f5ceb58544b4, type: 3} + m_Name: + m_EditorClassIdentifier: + axisFidelity: 1 + senseAxisForceZeroThreshold: 0.15 + senseAxisPressThreshold: 0.95 + triggerClickThreshold: 1 + triggerForceZeroThreshold: 0.01 + triggerAxisZeroOnUntouch: 0 + gripClickThreshold: 1 + gripForceZeroThreshold: 0.01 + gripAxisZeroOnUntouch: 0 + triggerPressed: 0 + triggerTouched: 0 + triggerHairlinePressed: 0 + triggerClicked: 0 + triggerAxisChanged: 0 + triggerSenseAxisChanged: 0 + gripPressed: 0 + gripTouched: 0 + gripHairlinePressed: 0 + gripClicked: 0 + gripAxisChanged: 0 + touchpadPressed: 0 + touchpadTouched: 0 + touchpadAxisChanged: 0 + touchpadSenseAxisChanged: 0 + touchpadTwoTouched: 0 + touchpadTwoPressed: 0 + touchpadTwoAxisChanged: 0 + buttonOnePressed: 0 + buttonOneTouched: 0 + buttonTwoPressed: 0 + buttonTwoTouched: 0 + startMenuPressed: 0 + middleFingerSenseAxisChanged: 0 + ringFingerSenseAxisChanged: 0 + pinkyFingerSenseAxisChanged: 0 + gripSenseAxisChanged: 0 + gripSensePressed: 0 + controllerVisible: 1 +--- !u!114 &114916317532594616 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402785467559628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 947b27445602ed640b885db7e667dfc1, type: 3} + m_Name: + m_EditorClassIdentifier: + grabButton: 7 + grabPrecognition: 0 + throwMultiplier: 1 + createRigidBodyWhenNotTouching: 0 + controllerAttachPoint: {fileID: 0} + controllerEvents: {fileID: 114010055366141268} + interactTouch: {fileID: 114941995053046290} +--- !u!114 &114941995053046290 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402785467559628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64e104da36bd3b04b90c6ae969ac66dc, type: 3} + m_Name: + m_EditorClassIdentifier: + customColliderContainer: {fileID: 0} +--- !u!114 &114970712872520258 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403344188374614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 947b27445602ed640b885db7e667dfc1, type: 3} + m_Name: + m_EditorClassIdentifier: + grabButton: 7 + grabPrecognition: 0 + throwMultiplier: 1 + createRigidBodyWhenNotTouching: 0 + controllerAttachPoint: {fileID: 0} + controllerEvents: {fileID: 114892990097616302} + interactTouch: {fileID: 114549548085660490} +--- !u!135 &135535306576535436 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402785467559628} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135537510739073292 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403344188374614} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.1 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab.meta b/Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab.meta new file mode 100644 index 0000000..f3b5c42 --- /dev/null +++ b/Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b2aedf7687cf8a14ba8c0082add663cf +timeCreated: 1544123408 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources.meta b/Assets/VIRTUOSO/Resources.meta new file mode 100644 index 0000000..19cc927 --- /dev/null +++ b/Assets/VIRTUOSO/Resources.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0ace389e79e9cfd44aaf8589ac875d58 +folderAsset: yes +timeCreated: 1554315166 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates.meta new file mode 100644 index 0000000..746b3b0 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1c1114ce336419540a3209cb427dfc97 +folderAsset: yes +timeCreated: 1552497947 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset new file mode 100644 index 0000000..8f5916c --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset @@ -0,0 +1,95 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: ChestBack + m_EditorClassIdentifier: + affectableBodyParts: 7 + affectedAreaList: + - startHeight: 0 + endHeight: 0.2 + startAngle: 180 + endAngle: 225 + - startHeight: 0 + endHeight: 0.2 + startAngle: 225 + endAngle: 270 + - startHeight: 0 + endHeight: 0.2 + startAngle: 270 + endAngle: 315 + - startHeight: 0 + endHeight: 0.2 + startAngle: 315 + endAngle: 359 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 180 + endAngle: 225 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 225 + endAngle: 270 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 270 + endAngle: 315 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 315 + endAngle: 359 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 180 + endAngle: 225 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 225 + endAngle: 270 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 270 + endAngle: 315 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 315 + endAngle: 359 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 180 + endAngle: 225 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 225 + endAngle: 270 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 270 + endAngle: 315 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 315 + endAngle: 359 + - startHeight: 0.8 + endHeight: 1 + startAngle: 180 + endAngle: 225 + - startHeight: 0.8 + endHeight: 1 + startAngle: 225 + endAngle: 270 + - startHeight: 0.8 + endHeight: 1 + startAngle: 270 + endAngle: 315 + - startHeight: 0.8 + endHeight: 1 + startAngle: 315 + endAngle: 359 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset.meta new file mode 100644 index 0000000..5883fdc --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ed634900b26ad4a448307e4f7619a75e +timeCreated: 1553705389 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset new file mode 100644 index 0000000..bdab249 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset @@ -0,0 +1,95 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: ChestFront + m_EditorClassIdentifier: + affectableBodyParts: 7 + affectedAreaList: + - startHeight: 0 + endHeight: 0.2 + startAngle: 0 + endAngle: 45 + - startHeight: 0 + endHeight: 0.2 + startAngle: 45 + endAngle: 90 + - startHeight: 0 + endHeight: 0.2 + startAngle: 90 + endAngle: 135 + - startHeight: 0 + endHeight: 0.2 + startAngle: 135 + endAngle: 179 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 0 + endAngle: 45 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 45 + endAngle: 90 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 90 + endAngle: 135 + - startHeight: 0.2 + endHeight: 0.4 + startAngle: 135 + endAngle: 179 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 0 + endAngle: 45 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 45 + endAngle: 90 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 90 + endAngle: 135 + - startHeight: 0.4 + endHeight: 0.6 + startAngle: 135 + endAngle: 179 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 0 + endAngle: 45 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 45 + endAngle: 90 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 90 + endAngle: 135 + - startHeight: 0.6 + endHeight: 0.8 + startAngle: 135 + endAngle: 179 + - startHeight: 0.8 + endHeight: 1 + startAngle: 0 + endAngle: 45 + - startHeight: 0.8 + endHeight: 1 + startAngle: 45 + endAngle: 90 + - startHeight: 0.8 + endHeight: 1 + startAngle: 90 + endAngle: 135 + - startHeight: 0.8 + endHeight: 1 + startAngle: 135 + endAngle: 179 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset.meta new file mode 100644 index 0000000..ef1f86f --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fe3c126820cb632409b13e08dee3fa11 +timeCreated: 1553705389 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset new file mode 100644 index 0000000..6d89a7f --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_LeftIndex + m_EditorClassIdentifier: + affectableBodyParts: 29 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset.meta new file mode 100644 index 0000000..66fcc91 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dedbda0d1fd46bb469a80757bbd12978 +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset new file mode 100644 index 0000000..7b13ce4 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_LeftMiddle + m_EditorClassIdentifier: + affectableBodyParts: 32 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset.meta new file mode 100644 index 0000000..82e4e60 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3458a14fdc465bf44a9c34ac6241736d +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset new file mode 100644 index 0000000..eb89235 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_LeftPinky + m_EditorClassIdentifier: + affectableBodyParts: 38 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset.meta new file mode 100644 index 0000000..f8f3548 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f598e7be8bdaae45999db14de16b485 +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset new file mode 100644 index 0000000..edfce8b --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_LeftRing + m_EditorClassIdentifier: + affectableBodyParts: 35 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset.meta new file mode 100644 index 0000000..0960e25 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ff4c197f10f29664a9cb286664d865e8 +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset new file mode 100644 index 0000000..559f9bb --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_LeftThumb + m_EditorClassIdentifier: + affectableBodyParts: 26 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset.meta new file mode 100644 index 0000000..e74bfde --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c9a85e5d35d4e1e45999cc449d57535a +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset new file mode 100644 index 0000000..29c67bb --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_RightIndex + m_EditorClassIdentifier: + affectableBodyParts: 44 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset.meta new file mode 100644 index 0000000..7f8be15 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f598f95841d451b4faad5876441997e4 +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset new file mode 100644 index 0000000..3100ecb --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_RightMiddle + m_EditorClassIdentifier: + affectableBodyParts: 47 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset.meta new file mode 100644 index 0000000..35035a2 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 23ce873f29dfebc4fbb3179c3df4b68a +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset new file mode 100644 index 0000000..356de71 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_RightPinky + m_EditorClassIdentifier: + affectableBodyParts: 53 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset.meta new file mode 100644 index 0000000..3a58347 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ad60123eb5f58ae468a3c0d9180b0979 +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset new file mode 100644 index 0000000..4d4690e --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_RightRing + m_EditorClassIdentifier: + affectableBodyParts: 50 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset.meta new file mode 100644 index 0000000..16e0304 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 189eb958a6e527c46a2fe6b96b117334 +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset new file mode 100644 index 0000000..cb6c506 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Finger_RightThumb + m_EditorClassIdentifier: + affectableBodyParts: 41 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset.meta new file mode 100644 index 0000000..16565ee --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5aafbb39a115bc14cb54844b9a8a00d0 +timeCreated: 1553700033 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset new file mode 100644 index 0000000..b8bde56 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset @@ -0,0 +1,39 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: Head + m_EditorClassIdentifier: + affectableBodyParts: 10 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 30 + - startHeight: 0 + endHeight: 1 + startAngle: 30 + endAngle: 60 + - startHeight: 0 + endHeight: 1 + startAngle: 60 + endAngle: 90 + - startHeight: 0 + endHeight: 1 + startAngle: 90 + endAngle: 120 + - startHeight: 0 + endHeight: 1 + startAngle: 120 + endAngle: 150 + - startHeight: 0 + endHeight: 1 + startAngle: 150 + endAngle: 180 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset.meta new file mode 100644 index 0000000..8c39d24 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b15c96454bed8d94b9f3bdf484be36f6 +timeCreated: 1553710504 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset new file mode 100644 index 0000000..bda77fb --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: LeftFoot + m_EditorClassIdentifier: + affectableBodyParts: 5 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset.meta new file mode 100644 index 0000000..0e6be7d --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 42f7e5b8361b6f2419ab4cc6dd3dd0a9 +timeCreated: 1556113301 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset new file mode 100644 index 0000000..a3727e9 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset @@ -0,0 +1,31 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: LeftForearm + m_EditorClassIdentifier: + affectableBodyParts: 15 + affectedAreaList: + - startHeight: 0 + endHeight: 0.25 + startAngle: 0 + endAngle: 360 + - startHeight: 0.25 + endHeight: 0.5 + startAngle: 0 + endAngle: 360 + - startHeight: 0.5 + endHeight: 0.75 + startAngle: 0 + endAngle: 360 + - startHeight: 0.75 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset.meta new file mode 100644 index 0000000..64dd824 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cb48685e7bd87e047a590c721468df91 +timeCreated: 1553284122 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset new file mode 100644 index 0000000..af3734a --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: LeftHand + m_EditorClassIdentifier: + affectableBodyParts: 17 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset.meta new file mode 100644 index 0000000..f41294f --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 36d64ff1f7b285e4abb8514b69c9fe2c +timeCreated: 1551989782 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset new file mode 100644 index 0000000..a89cd84 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: LeftLeg + m_EditorClassIdentifier: + affectableBodyParts: 3 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset.meta new file mode 100644 index 0000000..bad9e7a --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3785731bebdc91a44beeb615294b8ef9 +timeCreated: 1556113301 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset new file mode 100644 index 0000000..8396362 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: RightFoot + m_EditorClassIdentifier: + affectableBodyParts: 6 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset.meta new file mode 100644 index 0000000..4ff95ed --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 298c9e943d6f96b4aac8975b3b3d3d09 +timeCreated: 1556113301 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset new file mode 100644 index 0000000..37b58f7 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset @@ -0,0 +1,31 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: RightForearm + m_EditorClassIdentifier: + affectableBodyParts: 16 + affectedAreaList: + - startHeight: 0 + endHeight: 0.25 + startAngle: 0 + endAngle: 360 + - startHeight: 0.25 + endHeight: 0.5 + startAngle: 0 + endAngle: 360 + - startHeight: 0.5 + endHeight: 0.75 + startAngle: 0 + endAngle: 360 + - startHeight: 0.75 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset.meta new file mode 100644 index 0000000..4715a16 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ff0cb3cd8eb0dca47b2cb34973fb27c5 +timeCreated: 1553284122 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset new file mode 100644 index 0000000..a127022 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: RightHand + m_EditorClassIdentifier: + affectableBodyParts: 18 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset.meta new file mode 100644 index 0000000..32d926d --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6b0659655d60c6a4287ec4f3c9b2d83b +timeCreated: 1551988597 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset new file mode 100644 index 0000000..69ff8b6 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1def597fc958b34428d434d67f612575, type: 3} + m_Name: RightLeg + m_EditorClassIdentifier: + affectableBodyParts: 4 + affectedAreaList: + - startHeight: 0 + endHeight: 1 + startAngle: 0 + endAngle: 360 diff --git a/Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset.meta b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset.meta new file mode 100644 index 0000000..77ceefe --- /dev/null +++ b/Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0ea50ba428a88e8439de164de407b6a2 +timeCreated: 1556113301 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Curves.meta b/Assets/VIRTUOSO/Resources/Curves.meta new file mode 100644 index 0000000..c2c14a3 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1122f1cd28004834b9845d19812ce6c8 +folderAsset: yes +timeCreated: 1556551986 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset b/Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset new file mode 100644 index 0000000..9118509 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 614963222c5fc264abeee260e20d8641, type: 3} + m_Name: DownAndAroundCurve + m_EditorClassIdentifier: + heightCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 69 + - serializedVersion: 2 + time: 2 + value: 1 + inSlope: 0.5 + outSlope: 0 + tangentMode: 69 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + angleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 2 + value: 360 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + intensityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 2 + value: 0.76464844 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + temporaryCurve: 0 diff --git a/Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset.meta b/Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset.meta new file mode 100644 index 0000000..7f65ec5 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: be8f507082442cb4a92e9c73d8f48e4d +timeCreated: 1553707854 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset b/Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset new file mode 100644 index 0000000..d31da80 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 614963222c5fc264abeee260e20d8641, type: 3} + m_Name: DownToLeftCurve + m_EditorClassIdentifier: + heightCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + angleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 180 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + intensityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.81769615 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + temporaryCurve: 0 diff --git a/Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset.meta b/Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset.meta new file mode 100644 index 0000000..ea597d6 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 356d42e602239df44abce2a087449f86 +timeCreated: 1553708144 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset b/Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset new file mode 100644 index 0000000..5bf1f23 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 614963222c5fc264abeee260e20d8641, type: 3} + m_Name: DownToRightCurve + m_EditorClassIdentifier: + heightCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + angleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 180 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + intensityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.84462225 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + temporaryCurve: 0 diff --git a/Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset.meta b/Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset.meta new file mode 100644 index 0000000..15b8183 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 579b4f9b12bdbf4418d5760d4437ec4c +timeCreated: 1553708144 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset b/Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset new file mode 100644 index 0000000..c91a85f --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 614963222c5fc264abeee260e20d8641, type: 3} + m_Name: RampDown180Curve + m_EditorClassIdentifier: + heightCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 1 + outSlope: 0.33333334 + tangentMode: 65 + - serializedVersion: 2 + time: 3 + value: 1 + inSlope: 0.33333334 + outSlope: -1 + tangentMode: 5 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + angleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 180 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 180 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + intensityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.9 + inSlope: -0.29999998 + outSlope: -0.29999998 + tangentMode: 0 + - serializedVersion: 2 + time: 3 + value: 0 + inSlope: -0.29999998 + outSlope: -0.29999998 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + temporaryCurve: 0 diff --git a/Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset.meta b/Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset.meta new file mode 100644 index 0000000..3d906c0 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2b9862a4aa9509e4f851fed992a40257 +timeCreated: 1553103737 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset b/Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset new file mode 100644 index 0000000..e6f0a4d --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 614963222c5fc264abeee260e20d8641, type: 3} + m_Name: RampDownCurve + m_EditorClassIdentifier: + heightCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 1 + outSlope: 0.34916493 + tangentMode: 0 + - serializedVersion: 2 + time: 2.9472046 + value: 1 + inSlope: 0.3859385 + outSlope: 0.3859385 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + angleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 2.9472046 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + intensityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.9 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 2.9472046 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + temporaryCurve: 0 diff --git a/Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset.meta b/Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset.meta new file mode 100644 index 0000000..04c4d2c --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3269d16e1676fd644924be89cd2ad252 +timeCreated: 1553103737 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset b/Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset new file mode 100644 index 0000000..1058367 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 614963222c5fc264abeee260e20d8641, type: 3} + m_Name: RampDownUpCurve + m_EditorClassIdentifier: + heightCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + - serializedVersion: 2 + time: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + angleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + intensityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.9 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + temporaryCurve: 0 diff --git a/Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset.meta b/Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset.meta new file mode 100644 index 0000000..65d0136 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e3fed996ad617f54090e053efc4c7a4b +timeCreated: 1554237166 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings.meta b/Assets/VIRTUOSO/Resources/DeviceMappings.meta new file mode 100644 index 0000000..adc8c21 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d31973b478ec6974fa20a4e2a02669b8 +folderAsset: yes +timeCreated: 1553705646 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset new file mode 100644 index 0000000..bc07bde --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 652134711068581419c729823ab6e5d3, type: 3} + m_Name: BHapticsBacktVestMapping + m_EditorClassIdentifier: + affectedBodyArea: {fileID: 11400000, guid: ed634900b26ad4a448307e4f7619a75e, type: 2} + mapping: + - indexMapping: 00000000 + - indexMapping: 01000000 + - indexMapping: 02000000 + - indexMapping: 03000000 + - indexMapping: 04000000 + - indexMapping: 05000000 + - indexMapping: 06000000 + - indexMapping: 07000000 + - indexMapping: 08000000 + - indexMapping: 09000000 + - indexMapping: 0a000000 + - indexMapping: 0b000000 + - indexMapping: 0c000000 + - indexMapping: 0d000000 + - indexMapping: 0e000000 + - indexMapping: 0f000000 + - indexMapping: 10000000 + - indexMapping: 11000000 + - indexMapping: 12000000 + - indexMapping: 13000000 diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset.meta b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset.meta new file mode 100644 index 0000000..ab4365f --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6dce4a23651189b4d9776aa247440f84 +timeCreated: 1553705739 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset new file mode 100644 index 0000000..53b5ac6 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 652134711068581419c729823ab6e5d3, type: 3} + m_Name: BHapticsFaceMapping + m_EditorClassIdentifier: + affectedBodyArea: {fileID: 11400000, guid: b15c96454bed8d94b9f3bdf484be36f6, type: 2} + mapping: + - indexMapping: 00000000 + - indexMapping: 01000000 + - indexMapping: 02000000 + - indexMapping: 03000000 + - indexMapping: 04000000 + - indexMapping: 05000000 diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset.meta b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset.meta new file mode 100644 index 0000000..c9e59af --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e30940dd60f9b594ca7c7fcb954ea9f4 +timeCreated: 1553710746 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset new file mode 100644 index 0000000..8b5a51c --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 652134711068581419c729823ab6e5d3, type: 3} + m_Name: BHapticsFrontVestMapping + m_EditorClassIdentifier: + affectedBodyArea: {fileID: 11400000, guid: fe3c126820cb632409b13e08dee3fa11, type: 2} + mapping: + - indexMapping: 03000000 + - indexMapping: 02000000 + - indexMapping: 01000000 + - indexMapping: 00000000 + - indexMapping: 07000000 + - indexMapping: 06000000 + - indexMapping: 05000000 + - indexMapping: 04000000 + - indexMapping: 0b000000 + - indexMapping: 0a000000 + - indexMapping: 09000000 + - indexMapping: 08000000 + - indexMapping: 0f000000 + - indexMapping: 0e000000 + - indexMapping: 0d000000 + - indexMapping: 0c000000 + - indexMapping: 13000000 + - indexMapping: 12000000 + - indexMapping: 11000000 + - indexMapping: 10000000 diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset.meta b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset.meta new file mode 100644 index 0000000..88326d9 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d259b2c8baf4ea64d80845583879a4c6 +timeCreated: 1553705739 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset new file mode 100644 index 0000000..e9ebe98 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 652134711068581419c729823ab6e5d3, type: 3} + m_Name: BHapticsLeftWristMapping + m_EditorClassIdentifier: + affectedBodyArea: {fileID: 11400000, guid: cb48685e7bd87e047a590c721468df91, type: 2} + mapping: + - indexMapping: 0f00000010000000110000001200000013000000 + - indexMapping: 0a0000000b0000000c0000000d0000000e000000 + - indexMapping: 0500000006000000070000000800000009000000 + - indexMapping: 0000000001000000020000000300000004000000 diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset.meta b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset.meta new file mode 100644 index 0000000..adf2dcd --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7c6ecbdc42e31ab4db2f3a1ea04b3da9 +timeCreated: 1553284888 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset new file mode 100644 index 0000000..d3d53bf --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 652134711068581419c729823ab6e5d3, type: 3} + m_Name: BHapticsRightWristMapping + m_EditorClassIdentifier: + affectedBodyArea: {fileID: 11400000, guid: ff0cb3cd8eb0dca47b2cb34973fb27c5, type: 2} + mapping: + - indexMapping: 0f00000010000000110000001200000013000000 + - indexMapping: 0a0000000b0000000c0000000d0000000e000000 + - indexMapping: 0500000006000000070000000800000009000000 + - indexMapping: 0000000001000000020000000300000004000000 diff --git a/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset.meta b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset.meta new file mode 100644 index 0000000..13c659c --- /dev/null +++ b/Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 652417e418b21f743b9c063d19d2d4f3 +timeCreated: 1553797173 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Editor.meta b/Assets/VIRTUOSO/Resources/Editor.meta new file mode 100644 index 0000000..a74ebf0 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1a2e9ed168274d54cb35b2e685e4e662 +folderAsset: yes +timeCreated: 1556139571 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset b/Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset new file mode 100644 index 0000000..e2a8a3b --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e28766c9060caff42bd7a43852aadbec, type: 3} + m_Name: HapticSettings + m_EditorClassIdentifier: + defaultPatternSaveLocation: Assets/VIRTUOSO/Resources/Patterns/ + defaultCurveSaveLocation: Assets/VIRTUOSO/Resources/Curves/ + defaultIntensity: 0.5 + defaultTimeGranularity: 0.5 + defaultCurveRenderingGranularity: 10 diff --git a/Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset.meta b/Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset.meta new file mode 100644 index 0000000..aa21695 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 885c7fd4a9943ce4c925680767e43f6c +timeCreated: 1557512784 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Patterns.meta b/Assets/VIRTUOSO/Resources/Patterns.meta new file mode 100644 index 0000000..c0007ad --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6d91439f1b4757e47a83e6793f1f66ef +folderAsset: yes +timeCreated: 1556552000 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset b/Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset new file mode 100644 index 0000000..e82add5 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset @@ -0,0 +1,24 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c110b34a208c8c43abc687227bfacc0, type: 3} + m_Name: AnotherTest + m_EditorClassIdentifier: + curveList: + - {fileID: 11400000, guid: bc83ecd806851944585e8edc11776609, type: 2} + - {fileID: 11400000, guid: ec017b1cf63a0544f87a346cef411dec, type: 2} + - {fileID: 11400000, guid: ff25b953df0837542b552c588b98edcc, type: 2} + collisionResolution: 4 + curvePriorityIndex: 0 + playbackTiming: 0 + customPlaybackTiming: 0 + heightOvershootResolution: 2 + angleOvershootResolution: 2 + offsetUse: 1 diff --git a/Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset.meta b/Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset.meta new file mode 100644 index 0000000..d838f38 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b5f7118d68aa83a4da153c5f3d3fd1b4 +timeCreated: 1556647726 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset b/Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset new file mode 100644 index 0000000..a955bf7 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c110b34a208c8c43abc687227bfacc0, type: 3} + m_Name: AroundPattern + m_EditorClassIdentifier: + curveList: + - {fileID: 11400000, guid: be8f507082442cb4a92e9c73d8f48e4d, type: 2} + collisionResolution: 2 + curvePriorityIndex: 0 + playbackTiming: 0 + customPlaybackTiming: 0.333 + heightOvershootResolution: 1 + angleOvershootResolution: 2 + offsetUse: 1 diff --git a/Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset.meta b/Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset.meta new file mode 100644 index 0000000..08f4beb --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e945ad208e7c58f4b9889d37b657d2ca +timeCreated: 1553708004 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset b/Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset new file mode 100644 index 0000000..ea6dd40 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c110b34a208c8c43abc687227bfacc0, type: 3} + m_Name: CrossPattern + m_EditorClassIdentifier: + curveList: + - {fileID: 11400000, guid: 356d42e602239df44abce2a087449f86, type: 2} + - {fileID: 11400000, guid: 579b4f9b12bdbf4418d5760d4437ec4c, type: 2} + collisionResolution: 2 + curvePriorityIndex: 0 + playbackTiming: 1 + customPlaybackTiming: 0.333 + heightOvershootResolution: 2 + angleOvershootResolution: 2 + offsetUse: 1 diff --git a/Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset.meta b/Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset.meta new file mode 100644 index 0000000..7bcd764 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9da88975d2790784ab3908ce8d92ae06 +timeCreated: 1553708260 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset b/Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset new file mode 100644 index 0000000..91a87de --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c110b34a208c8c43abc687227bfacc0, type: 3} + m_Name: RampDown180Pattern + m_EditorClassIdentifier: + curveList: + - {fileID: 11400000, guid: 2b9862a4aa9509e4f851fed992a40257, type: 2} + collisionResolution: 2 + curvePriorityIndex: 0 + playbackTiming: 0 + customPlaybackTiming: 0.3 + heightOvershootResolution: 1 + angleOvershootResolution: 2 + offsetUse: 1 diff --git a/Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset.meta b/Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset.meta new file mode 100644 index 0000000..a412b6f --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c7aa2ff9b31b5c14ebe2a0032acbee93 +timeCreated: 1553103846 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset b/Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset new file mode 100644 index 0000000..89b44d4 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c110b34a208c8c43abc687227bfacc0, type: 3} + m_Name: RampDownPattern + m_EditorClassIdentifier: + curveList: + - {fileID: 11400000, guid: 3269d16e1676fd644924be89cd2ad252, type: 2} + collisionResolution: 2 + curvePriorityIndex: 0 + playbackTiming: 0 + customPlaybackTiming: 0.3 + heightOvershootResolution: 2 + angleOvershootResolution: 2 + offsetUse: 1 diff --git a/Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset.meta b/Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset.meta new file mode 100644 index 0000000..0d95dc7 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5f9548af75015c64295ef0fa38ef3183 +timeCreated: 1553103846 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset b/Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset new file mode 100644 index 0000000..bc3e195 --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c110b34a208c8c43abc687227bfacc0, type: 3} + m_Name: RampDownUpPattern + m_EditorClassIdentifier: + curveList: + - {fileID: 11400000, guid: e3fed996ad617f54090e053efc4c7a4b, type: 2} + collisionResolution: 2 + curvePriorityIndex: 0 + playbackTiming: 1 + customPlaybackTiming: 0.333 + heightOvershootResolution: 1 + angleOvershootResolution: 2 + offsetUse: 1 diff --git a/Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset.meta b/Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset.meta new file mode 100644 index 0000000..8f34e5b --- /dev/null +++ b/Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 69cb33b80d6d91d4ea69336ac63910c6 +timeCreated: 1553624370 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scriptable Objects.meta b/Assets/VIRTUOSO/Scriptable Objects.meta new file mode 100644 index 0000000..8823ae2 --- /dev/null +++ b/Assets/VIRTUOSO/Scriptable Objects.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a31c0d87e1b30e64bab723711cff5a41 +folderAsset: yes +timeCreated: 1557512301 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data.meta b/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data.meta new file mode 100644 index 0000000..5296a6f --- /dev/null +++ b/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f24ffd70e294ded4dac6e7dd5ccbd921 +folderAsset: yes +timeCreated: 1557512309 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset b/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset new file mode 100644 index 0000000..50101bd --- /dev/null +++ b/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c441f2904825f5c4f95a8d74509d8442, type: 3} + m_Name: HapticPatternWindowLineRenderer + m_EditorClassIdentifier: + lineMaterial: {fileID: 2100000, guid: 8e0e7d5234ddbdc48829ca867689274d, type: 2} + lineStartColor: {r: 0, g: 0, b: 1, a: 1} + lineEndColor: {r: 1, g: 0, b: 0, a: 1} + startLineWidth: 1 + endLineWidth: 1 + widthMultiplier: 0.01 + numCornerVertices: 3 + numCapVertices: 2 + receiveShadows: 0 + allowOcclusionWhenDynamic: 0 diff --git a/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset.meta b/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset.meta new file mode 100644 index 0000000..3fef244 --- /dev/null +++ b/Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4b6ada9ca411ada48b621c9611310349 +timeCreated: 1557512335 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts.meta b/Assets/VIRTUOSO/Scripts.meta new file mode 100644 index 0000000..5b6ff9b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b7328f77ca4a2934bb38c7c201e6cf5a +folderAsset: yes +timeCreated: 1544108878 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Attributes.meta b/Assets/VIRTUOSO/Scripts/Attributes.meta new file mode 100644 index 0000000..b2a8949 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Attributes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dccc3a1516eeb2a4bb9bc1145b26b43b +folderAsset: yes +timeCreated: 1544108878 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs b/Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs new file mode 100644 index 0000000..0f12044 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// A helper utility for the InteractionAreaReaction and GenericReaction scripts. Since some GenericReactions have an + /// empty StopReaction, use this script to hide the corresponding variable to set that method in any of the + /// general reaction scripts. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + [AttributeUsage(AttributeTargets.Method)] + public class HideMethodFromInspectorAttribute : Attribute + { + // No logic is needed as the presence of this attribute indicates it should be hidden + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs.meta b/Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs.meta new file mode 100644 index 0000000..ec2078a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0903e0741a6bf4640b5fb5bcdd2572ed +timeCreated: 1536697680 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor.meta b/Assets/VIRTUOSO/Scripts/Editor.meta new file mode 100644 index 0000000..03448fe --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4dc167518a5ce2548b9be669d0f714bd +folderAsset: yes +timeCreated: 1544108878 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors.meta new file mode 100644 index 0000000..bce846e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 66c8013bee42c7142b64729a3001cbba +folderAsset: yes +timeCreated: 1553805862 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs b/Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs new file mode 100644 index 0000000..8846176 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs @@ -0,0 +1,176 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace CharlesRiverAnalytics.Virtuoso.Gestures +{ + /// + /// Enables editing of AdvancedGestures which otherwise would be impossible since it uses subclasses to define behavior of the states. + /// + /// Author: Dan Duggan (dduggan@cra.com) October 2018, Updated January 2019 + /// + [CustomEditor(typeof(AdvancedGesture))] + public class AdvancedGestureEditor : Editor + { + #region Control Variables + protected AdvancedGestureState stateToDelete; + protected AdvancedGestureCondition conditionToDelete; + // reasonable width for enum fields in the editor so they don't stretch/contract too much + protected static float ENUM_WIDTH = 128; + #endregion + + #region Inspector Drawing Code + public override void OnInspectorGUI() + { + GUILayout.Label("Advanced Gesture States", EditorStyles.boldLabel); + // do not draw the control variables + AdvancedGesture advTarget = (AdvancedGesture)target; + advTarget.gestureCooldown = EditorGUILayout.FloatField("Cooldown (seconds)", advTarget.gestureCooldown); + + foreach (AdvancedGestureState advState in advTarget.advancedGestureStateList) + { + DrawAdvancedGestureState(advState); + } + + if (GUILayout.Button("Add Gesture State")) + { + advTarget.advancedGestureStateList.Add(new AdvancedGestureState()); + } + + if (stateToDelete != null) + { + advTarget.advancedGestureStateList.Remove(stateToDelete); + stateToDelete = null; + } + // set dirty to ensure the object is saved + EditorUtility.SetDirty(target); + } + + /// + /// Draws the inspector for a single AdvancedGestureState + /// + protected void DrawAdvancedGestureState(AdvancedGestureState advState) + { + GUILayout.BeginHorizontal(); + advState.gestureName = GUILayout.TextField(advState.gestureName); + if (GUILayout.Button("Remove Gesture State")) + { + stateToDelete = advState; + } + GUILayout.EndHorizontal(); + advState.coreGesture = (Gesture)EditorGUILayout.ObjectField("Core Gesture", advState.coreGesture, typeof(Gesture), false); + advState.holdTime = EditorGUILayout.Slider("Gesture Hold Time", advState.holdTime, 0.0f, 5.0f); + + foreach (AdvancedGestureCondition condition in advState.AdvancedGestureConditionList) + { + DrawAdvancedGestureCondition(condition); + } + + GUILayout.BeginHorizontal(); + advState.editorNewConditionType = (AdvancedGestureState.AdvancedConditionType)EditorGUILayout.EnumPopup(advState.editorNewConditionType, GUILayout.Width(ENUM_WIDTH)); + if (GUILayout.Button("Add")) + { + switch (advState.editorNewConditionType) + { + case AdvancedGestureState.AdvancedConditionType.Hold: + { + advState.holdConditionList.Add(new HoldGestureCondition()); + break; + } + case AdvancedGestureState.AdvancedConditionType.Movement: + { + advState.movementConditionList.Add(new MovementGestureCondition()); + break; + } + case AdvancedGestureState.AdvancedConditionType.PalmAngle: + { + advState.palmConditions.Add(new PalmNormalCondition()); + break; + } + case AdvancedGestureState.AdvancedConditionType.SimultaneousAction: + { + advState.simultaneousGestureConditionList.Add(new SimultaneousGesture()); + break; + } + } + } + GUILayout.EndHorizontal(); + + if (conditionToDelete != null) + { + if (conditionToDelete is HoldGestureCondition) + { + advState.holdConditionList.Remove((HoldGestureCondition)conditionToDelete); + } + else if (conditionToDelete is MovementGestureCondition) + { + advState.movementConditionList.Remove((MovementGestureCondition)conditionToDelete); + } + else if (conditionToDelete is PalmNormalCondition) + { + advState.palmConditions.Remove((PalmNormalCondition)conditionToDelete); + } + else if (conditionToDelete is SimultaneousGesture) + { + advState.simultaneousGestureConditionList.Remove((SimultaneousGesture)conditionToDelete); + } + conditionToDelete = null; + } + } + /// + /// Draws the inspector for an advanced gesture condition + /// + protected void DrawAdvancedGestureCondition(AdvancedGestureCondition condition) + { + GUILayout.BeginHorizontal(); + string header = condition.GetType().Name; + GUILayout.Label(header, EditorStyles.boldLabel); + if (GUILayout.Button("Remove")) + { + conditionToDelete = condition; + } + GUILayout.EndHorizontal(); + + if (condition is MovementGestureCondition) + { + MovementGestureCondition mvtCondition = (MovementGestureCondition)condition; + GUILayout.BeginHorizontal(); + mvtCondition.distanceFromPreviousGesture = EditorGUILayout.Slider("Distance from last gesture", mvtCondition.distanceFromPreviousGesture, 0.0f, 1.5f); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + mvtCondition.distanceOperator = (MovementGestureCondition.MovementOperator)EditorGUILayout.EnumPopup("Comparison Operator", mvtCondition.distanceOperator); + if (mvtCondition.distanceOperator == MovementGestureCondition.MovementOperator.EqualTo) + { + mvtCondition.distanceTolerance = EditorGUILayout.Slider("Tolerance", mvtCondition.distanceTolerance, 0.0f, 0.2f); + } + GUILayout.EndHorizontal(); + } + else if (condition is HoldGestureCondition) + { + HoldGestureCondition holdCondition = (HoldGestureCondition)condition; + holdCondition.gestureHoldTime = EditorGUILayout.FloatField("Hold Time", holdCondition.gestureHoldTime); + } + else if (condition is PalmNormalCondition) + { + PalmNormalCondition palmCondition = (PalmNormalCondition)condition; + GUILayout.BeginHorizontal(); + palmCondition.otherVectorToUse = (PalmNormalCondition.OtherVector)EditorGUILayout.EnumPopup("Other Vector", palmCondition.otherVectorToUse); + palmCondition.otherVectorDirection = (PalmNormalCondition.VectorType)EditorGUILayout.EnumPopup("Other Vector Direction", palmCondition.otherVectorDirection); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + palmCondition.eulerRotationFromOtherVector = EditorGUILayout.Vector3Field("Rotation of Other", palmCondition.eulerRotationFromOtherVector); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + palmCondition.tolerance = EditorGUILayout.Slider("Tolerance", palmCondition.tolerance, 0.0f, 1.0f); + GUILayout.EndHorizontal(); + } + else if (condition is SimultaneousGesture) + { + SimultaneousGesture simulCondition = (SimultaneousGesture)condition; + simulCondition.simultaneousGesture = (Gesture)EditorGUILayout.ObjectField("Other Gesture", simulCondition.simultaneousGesture, typeof(Gesture), false); + } + } + } + #endregion +} diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs.meta new file mode 100644 index 0000000..02ba722 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e08e75c827f97594eb5c101077e6836d +timeCreated: 1546533168 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs b/Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs new file mode 100644 index 0000000..b6384b0 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs @@ -0,0 +1,97 @@ +using UnityEditor; +using System.Reflection; +using System; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Custom editor for the GenericReaction classes. The main point of the custom editor is to hide + /// the start/stop reaction variable if the given ReactionEvent has one of it's methods marked + /// as HideMethodFromInspector. + /// + /// Since GenericReaction is a Generic type, each child implementation needs their own custom editor, + /// but can inherit from this one and pass in the genericStringName to reuse these functions. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// + public class GenericReactionEditor : Editor + { + protected SerializedProperty reactionEvent; + protected SerializedProperty genericEventSystem; + protected SerializedProperty startReaction; + protected SerializedProperty stopReaction; + protected string genericStringName; + + #region UnityFunctions + protected virtual void OnEnable() + { + reactionEvent = serializedObject.FindProperty("reactionEvent"); + genericEventSystem = serializedObject.FindProperty(genericStringName); + startReaction = serializedObject.FindProperty("startReaction"); + stopReaction = serializedObject.FindProperty("stopReaction"); + } + + public override void OnInspectorGUI() + { + // Reads the latest values on the current (serialized) object (i.e. the one that is selected) + serializedObject.Update(); + + // Display the default Unity prompt for objects in the scene + EditorGUILayout.PropertyField(reactionEvent); + EditorGUILayout.PropertyField(genericEventSystem); + + // For displaying the start/stop reaction dropdown menu, look at the given reaction and see if + // it has the HideMethodFromInspectorAttribute on either of its reaction method + if (reactionEvent != null) + { + object reactionObject = GetObjectFromProperty(reactionEvent); + + if (reactionObject != null) + { + MethodBase startMethod = reactionObject.GetType().GetMethod("StartReaction"); + var startAttribute = startMethod.GetCustomAttributes(typeof(HideMethodFromInspectorAttribute), true); + + // If the attribute length is 0, then it was not added to the method and the variable should be displayed + if (startAttribute.Length == 0) + { + EditorGUILayout.PropertyField(startReaction); + } + + // Same for StopReaction + MethodBase stopMethod = reactionObject.GetType().GetMethod("StopReaction"); + var stopAttribute = stopMethod.GetCustomAttributes(typeof(HideMethodFromInspectorAttribute), true); + + if (stopAttribute.Length == 0) + { + EditorGUILayout.PropertyField(stopReaction); + } + } + } + + // Write properties back to the serialized object + serializedObject.ApplyModifiedProperties(); + } + #endregion + + protected HideMethodFromInspectorAttribute GetHideMethodAttribute(Type givenType) + { + // Get instance of the attribute. + HideMethodFromInspectorAttribute hideMethodAttribute = + (HideMethodFromInspectorAttribute)Attribute.GetCustomAttribute(givenType, typeof(HideMethodFromInspectorAttribute)); + + if (hideMethodAttribute != null) + { + return hideMethodAttribute; + } + + return null; + } + + protected object GetObjectFromProperty(SerializedProperty property) + { + Type objectBaseType = property.serializedObject.targetObject.GetType(); + FieldInfo fieldInfo = objectBaseType.GetField(property.propertyPath); + return fieldInfo.GetValue(property.serializedObject.targetObject); + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs.meta new file mode 100644 index 0000000..5537a1f --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ad2406c79c66d744b94f1cf8e7b929e6 +timeCreated: 1537286201 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs b/Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs new file mode 100644 index 0000000..8628e76 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Custom editor for the GestureReaction. The main point of the custom editor is to hide + /// the start/stop reaction variable if the given ReactionEvent has one of it's methods marked + /// as HideMethodFromInspector. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// + public class GestureReactionEditor : GenericReactionEditor + { + #region UnityFunctions + protected override void OnEnable() + { + genericStringName = "gestureEvent"; + + base.OnEnable(); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs.meta new file mode 100644 index 0000000..13ce1eb --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 79ae585f482812b4292d42c99dfe9624 +timeCreated: 1537287414 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs b/Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs new file mode 100644 index 0000000..7ad147b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs @@ -0,0 +1,209 @@ +using CharlesRiverAnalytics.Virtuoso.Utilities; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Custom editor for the Haptic Manager class. Displays a list of all the available HapticDevices + /// if they are using the HapticSystem Attribute class. It allows the devices to be enabled/disabled + /// by the developer to indicate what haptic device they are targeting. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [CustomEditor(typeof(HapticManager))] + public class HapticManagerEditor : Editor + { + #region PrivateVariables + private HapticManager targetManager; + private bool useVisualizer; + private Dictionary> hapticSystemAndDevices; + private Dictionary hapticSystemEditorInfo; + #endregion + + #region Unity Functions + protected void Awake() + { + targetManager = target as HapticManager; + + hapticSystemAndDevices = new Dictionary>(); + hapticSystemEditorInfo = new Dictionary(); + + // Get all the haptic device classes in the project + foreach (Type type in Assembly.GetAssembly(typeof(HapticDevice)).GetTypes()) + { + object[] attributeList = type.GetCustomAttributes(typeof(HapticSystemAttribute), true); + + if (attributeList.Length > 0) + { + foreach (object currentAttribute in attributeList) + { + HapticSystemAttribute hapticAttribute = currentAttribute as HapticSystemAttribute; + + if (!hapticSystemAndDevices.ContainsKey(hapticAttribute.SystemName)) + { + hapticSystemAndDevices.Add(hapticAttribute.SystemName, new List() + { + new HapticDeviceInfo(hapticAttribute, type) + }); + + hapticSystemEditorInfo.Add(hapticAttribute.SystemName, new HapticSystemEditorInfo()); + } + else + { + hapticSystemAndDevices[hapticAttribute.SystemName].Add(new HapticDeviceInfo(hapticAttribute, type)); + } + } + } + } + + // Use EditorPrefs to find the devices that are being used by the developer + foreach (KeyValuePair> currentDevice in hapticSystemAndDevices) + { + for (int n = 0; n < currentDevice.Value.Count; n++) + { + currentDevice.Value[n].isSelected = EditorPrefs.GetBool(Constants.EditorPrefLocation + currentDevice.Key + "." + currentDevice.Value[n].systemAttribute.DeviceName); + } + } + + useVisualizer = EditorPrefs.GetBool(Constants.EditorPrefLocation + "UseVisualizer"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + // Check to see if the dictionary is set up, if not, then work cannot be done + if(hapticSystemAndDevices == null) + { + Awake(); + } + + // Reads the latest values on the current (serialized) object (i.e., the one that is selected) + serializedObject.Update(); + + // Ask if they want the visualizer attached + useVisualizer = EditorGUILayout.Toggle("Visualize Haptics", useVisualizer); + + if (useVisualizer) + { + HapticVisualizer attachedVisualizer = targetManager.gameObject.GetComponent(); + + if (attachedVisualizer == null) + { + targetManager.gameObject.AddComponent(); + } + } + else + { + HapticVisualizer attachedVisualizer = targetManager.gameObject.GetComponent(); + + if (attachedVisualizer != null) + { + DestroyImmediate(attachedVisualizer); + } + } + + foreach (var hapticDevice in hapticSystemAndDevices) + { + hapticSystemEditorInfo[hapticDevice.Key].isFoldedOut = EditorGUILayout.Foldout(hapticSystemEditorInfo[hapticDevice.Key].isFoldedOut, hapticDevice.Key); + + if (hapticSystemEditorInfo[hapticDevice.Key].isFoldedOut) + { + // Display each haptic device + foreach (HapticDeviceInfo currentDevice in hapticSystemAndDevices[hapticDevice.Key]) + { + currentDevice.isSelected = EditorGUILayout.Toggle(currentDevice.systemAttribute.DeviceName, currentDevice.isSelected); + } + } + + // Save values to the editor prefs + for (int n = 0; n < hapticDevice.Value.Count; n++) + { + // Add/remove any scripts that have changed + if (EditorPrefs.GetBool(Constants.EditorPrefLocation + hapticDevice.Key + "." + hapticDevice.Value[n].systemAttribute.DeviceName) != hapticDevice.Value[n].isSelected) + { + // Add component + if (hapticDevice.Value[n].isSelected) + { + GameObject deviceSystemObject = GameObject.Find(hapticDevice.Key); + + if (deviceSystemObject == null) + { + deviceSystemObject = new GameObject(hapticDevice.Key); + deviceSystemObject.transform.parent = (target as HapticManager).transform; + } + + GameObject deviceObject = new GameObject(hapticDevice.Value[n].systemAttribute.DeviceName); + deviceObject.transform.parent = deviceSystemObject.transform; + + HapticDevice deviceInfo = deviceObject.AddComponent(hapticDevice.Value[n].deviceType) as HapticDevice; + deviceInfo.ApplyDefaultData(hapticDevice.Value[n].systemAttribute); + } + // Remove component + else + { + GameObject objToRemove = GameObject.Find(hapticDevice.Key + "/" + hapticDevice.Value[n].systemAttribute.DeviceName); + + if (objToRemove != null) + { + GameObject parentObj = objToRemove.transform.parent.gameObject; + + DestroyImmediate(objToRemove); + + if (parentObj.transform.childCount == 0) + { + DestroyImmediate(parentObj); + } + } + } + } + + // Write to EditorPrefs so the used devices are saved + EditorPrefs.SetBool(Constants.EditorPrefLocation + hapticDevice.Key + "." + hapticDevice.Value[n].systemAttribute.DeviceName, hapticDevice.Value[n].isSelected); + } + } + + EditorPrefs.SetBool(Constants.EditorPrefLocation + "UseVisualizer", useVisualizer); + + // Write properties back to the serialized object + serializedObject.ApplyModifiedProperties(); + } + #endregion + } + + /// + /// Holdds data for each haptic device in a hpatic system for the haptic manager editor. + /// + public class HapticDeviceInfo + { + public HapticSystemAttribute systemAttribute; + public Type deviceType; + public bool isSelected; + + public HapticDeviceInfo(HapticSystemAttribute sysAttribute, Type devType) + { + systemAttribute = sysAttribute; + deviceType = devType; + + isSelected = false; + } + } + + /// + /// Holds data related to each haptic system for the haptic manager editor. + /// + public class HapticSystemEditorInfo + { + public bool isFoldedOut; + + public HapticSystemEditorInfo() + { + isFoldedOut = false; + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs.meta new file mode 100644 index 0000000..d271adc --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b73681e8a1c026848a304f51fa2a7da9 +timeCreated: 1556820882 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs b/Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs new file mode 100644 index 0000000..378443d --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs @@ -0,0 +1,243 @@ +using System.Collections.Generic; +using UnityEditor; +using CharlesRiverAnalytics.Virtuoso.Reaction; +using UnityEngine; +using System.Reflection; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Custom editor for the Reactor class. Allows the user to provide a component with event and provides feedback + /// to the user if there are any issues with the provided class. It then displays a list of all the events the + /// component has and builds a custom array to add any reaction that is currently in the scene. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), December 2018 + /// + [CustomEditor(typeof(Reactor))] + public class ReactorEditor : Editor + { + #region ProtectedVariables + protected SerializedProperty eventSender; + protected SerializedProperty lastUsedComponent; + protected Reactor targetReactor; + + protected Dictionary reactionsPerEventDictionary; + + protected const string UNDO_MESSAGE = "Undo Reactor Info"; + protected const string NO_EVENTS_WARNING_MESSAGE = "No events were found on the given eventSender. Please provide a different object."; + protected const string NO_REACTION_WARNING_MESSAGE = "No Reactions are currently in the scene. Please add at least one Reaction to the scene."; + protected const string PROVIDE_COMPONENT_MESSAGE = "Please provide a component with events."; + #endregion + + #region EditorHelperMethods + /// + /// Takes the list of EditorInfo (Reaction, Method Selection, etc.) from the target and rebuilds + /// the dictionary in the editor script. + /// + /// String array of events from the given component. + private void CopyFromTarget(string[] eventNameArray) + { + // Grab the dictionary items + List editorInfoList = targetReactor.GetDictionaryItems(); + + // Rebuild the dictionary + for (int n = 0; n < editorInfoList.Count; n++) + { + ReactorEditorInfo currentInfo = new ReactorEditorInfo + { + foldoutOpenStatus = editorInfoList[n].foldoutOpenStatus, + reactionList = editorInfoList[n].reactionList, + reactionTriggerMethodList = editorInfoList[n].reactionTriggerMethodList, + reactionTriggerIndexSelectionList = editorInfoList[n].reactionTriggerIndexSelectionList + }; + + if (reactionsPerEventDictionary.ContainsKey(eventNameArray[n])) + { + reactionsPerEventDictionary[eventNameArray[n]] = currentInfo; + } + else + { + reactionsPerEventDictionary.Add(eventNameArray[n], currentInfo); + } + } + } + #endregion + + #region UnityFunctions + protected virtual void OnEnable() + { + eventSender = serializedObject.FindProperty("eventSender"); + lastUsedComponent = serializedObject.FindProperty("lastUsedComponent"); + + targetReactor = target as Reactor; + + reactionsPerEventDictionary = new Dictionary(); + } + + public override void OnInspectorGUI() + { + // Reads the latest values on the current (serialized) object (i.e. the one that is selected) + serializedObject.Update(); + + // Display the default Unity prompt for objects in the scene + EditorGUILayout.PropertyField(eventSender); + + // Array holding the string names of the events on the given object + string[] eventNameArray; + + // Get all events for the given object + if (eventSender.objectReferenceValue != null) + { + eventNameArray = Utilities.EventUtility.GetEventNameArray(eventSender.objectReferenceValue); + + Component eventSenderComponent = eventSender.objectReferenceValue as Component; + + // Get the list of all reactions in the scene to display in a list + GenericReaction[] reactionsInScene = FindObjectsOfType(); + + // Check to make sure there is at least 1 reaction in scene + if (reactionsInScene.Length == 0) + { + EditorGUILayout.HelpBox(NO_REACTION_WARNING_MESSAGE, MessageType.Error); + + serializedObject.ApplyModifiedProperties(); + + // Since there are no reactions, don't processing the rest + return; + } + + // See if the dictionary needs to be updated with new events + if (eventSenderComponent != null && eventSenderComponent != lastUsedComponent.objectReferenceValue) + { + lastUsedComponent.objectReferenceValue = eventSenderComponent; + + reactionsPerEventDictionary.Clear(); + targetReactor.Clear(); + + // Create a list for each event from provided event sender + for (int n = 0; n < eventNameArray.Length; n++) + { + ReactorEditorInfo currentInfo = new ReactorEditorInfo + { + foldoutOpenStatus = false, + reactionList = new List(), + reactionTriggerMethodList = new List(), + reactionTriggerIndexSelectionList = new List() + }; + + reactionsPerEventDictionary.Add(eventNameArray[n], currentInfo); + } + } + // Otherwise, copy the one back from the target + else + { + CopyFromTarget(eventNameArray); + } + + // Display a warning if there are no events on the component + if (eventNameArray.Length == 0) + { + EditorGUILayout.HelpBox(NO_EVENTS_WARNING_MESSAGE, MessageType.Error); + } + // Otherwise, display the event list and allow the user to hook up reactions to the events + else + { + // Display every event that the event sender has + for (int n = 0; n < eventNameArray.Length; n++) + { + // Delta to minimize/maximize the specific event + reactionsPerEventDictionary[eventNameArray[n]].foldoutOpenStatus = EditorGUILayout.Foldout(reactionsPerEventDictionary[eventNameArray[n]].foldoutOpenStatus, eventNameArray[n]); + + // Show the psuedo array if the user has hit the delta + if (reactionsPerEventDictionary[eventNameArray[n]].foldoutOpenStatus) + { + // Display a prompt for a reaction based on the current event in the given component + for (int h = 0; h < reactionsPerEventDictionary[eventNameArray[n]].reactionList.Count; h++) + { + EditorGUILayout.BeginHorizontal(); + + // Prompt for the Reaction + reactionsPerEventDictionary[eventNameArray[n]].reactionList[h] = (GenericReaction)EditorGUILayout.ObjectField(reactionsPerEventDictionary[eventNameArray[n]].reactionList[h], typeof(GenericReaction), true); + + // Since some reactions use the HideMethod attribute, check here to see if they should be displayed + List reactionTriggers = new List(); + + if (reactionsPerEventDictionary[eventNameArray[n]].reactionList[h] != null) + { + foreach (string methodName in Utilities.Constants.reactionTriggerMethods) + { + MethodBase currentMethod = reactionsPerEventDictionary[eventNameArray[n]].reactionList[h].GetType().GetMethod(methodName); + + var currentAttribute = currentMethod.GetCustomAttributes(typeof(HideMethodFromInspectorAttribute), true); + + // If the attribute length is 0, then it was not added to the method and the variable should be displayed + if (currentAttribute.Length == 0) + { + reactionTriggers.Add(methodName); + } + } + } + else + { + reactionTriggers.Add(""); + } + + // Reaction method prompt (index selection) + reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerIndexSelectionList[h] = EditorGUILayout.Popup(reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerIndexSelectionList[h], reactionTriggers.ToArray()); + + // Store method name with the editor info + reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerMethodList[h] = reactionTriggers[reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerIndexSelectionList[h]]; + + // Add a button to remove this from the list + if (GUILayout.Button("-")) + { + reactionsPerEventDictionary[eventNameArray[n]].RemoveElementsAt(h); + } + + EditorGUILayout.EndHorizontal(); + } + + // Add a button to allow adding more reactions to the list + if (GUILayout.Button("+")) + { + // Add null values to the lists so that index exists in the list and can be autopopulated by the editor (until changed by user) + reactionsPerEventDictionary[eventNameArray[n]].reactionList.Add(null); + reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerMethodList.Add(null); + reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerIndexSelectionList.Add(0); + } + } + } + } + + // Copy the dictionary made in the Editor to the GameObject + targetReactor.Clear(); + + for (int n = 0; n < eventNameArray.Length; n++) + { + targetReactor.AddDictionaryKey(eventNameArray[n], + reactionsPerEventDictionary[eventNameArray[n]].foldoutOpenStatus, + reactionsPerEventDictionary[eventNameArray[n]].reactionList, + reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerMethodList, + reactionsPerEventDictionary[eventNameArray[n]].reactionTriggerIndexSelectionList); + } + } + // If no component is given, then all the info should be cleared + else + { + EditorGUILayout.HelpBox(PROVIDE_COMPONENT_MESSAGE, MessageType.None); + + // Reset the dictionary and associated information + reactionsPerEventDictionary.Clear(); + targetReactor.Clear(); + + lastUsedComponent.objectReferenceValue = null; + } + + // Write properties back to the serialized object + serializedObject.ApplyModifiedProperties(); + + Undo.RecordObject(targetReactor, UNDO_MESSAGE); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs.meta new file mode 100644 index 0000000..71ff953 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f86dac004d033a44086fc13d88ec84ba +timeCreated: 1544132562 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs new file mode 100644 index 0000000..3aa6673 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs @@ -0,0 +1,69 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// Allows the user to select a tracker from the tracker list available to an SDK. First, they must select + /// the SDK they want to pull the tracker from and then select the tracker from the tracker list. If the + /// SDK doesn't have the tracker in its own list, then it will not appear here. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), October 2018 + /// + [CustomEditor(typeof(TrackedObjectFollower))] + public class TrackedObjectFollowerEditor : Editor + { + #region SerializedProperties + SerializedProperty sdkIndex; + SerializedProperty trackerIndex; + #endregion + + #region PrivateVariables + private VRTK_SDKSetup[] sdkArray; + private List sdkNameList; + #endregion + + #region UnityEditorFunctions + public void Awake() + { + sdkArray = VRTK_SharedMethods.FindEvenInactiveComponents(); + sdkNameList = new List(); + + foreach (VRTK_SDKSetup currentSDK in sdkArray) + { + sdkNameList.Add(currentSDK.name); + } + + sdkIndex = serializedObject.FindProperty("sdkSelectionIndex"); + trackerIndex = serializedObject.FindProperty("trackerSelectionIndex"); + } + + public override void OnInspectorGUI() + { + // Read any updates on the serialized object + serializedObject.Update(); + + // Prompt the user for the SDK selection + sdkIndex.intValue = EditorGUILayout.Popup(sdkIndex.intValue, sdkNameList.ToArray()); + + VRTK_SDKSetup selectedSDK = sdkArray[sdkIndex.intValue]; + List trackerNames = new List(); + + // Turn the tracker list into an array of string names + foreach(GameObject currentTracker in selectedSDK.actualTrackers) + { + trackerNames.Add(currentTracker.name); + } + + // Prompt user for the tracker selection + trackerIndex.intValue = EditorGUILayout.Popup(trackerIndex.intValue, trackerNames.ToArray()); + + // Save changes made to the serialized object + serializedObject.ApplyModifiedProperties(); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs.meta new file mode 100644 index 0000000..615a020 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 51a8e9be7a9574b47a8db3849dd547ee +timeCreated: 1538750345 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs new file mode 100644 index 0000000..e676507 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs @@ -0,0 +1,168 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; +#if VRTK_DEFINE_SDK_STEAMVR +using Valve.VR; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// Helper struct to hold the list of Hardware IDs as strings. Promotes easy JSON Serialization + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// Updated: Nicolas Herrera (nherrera@cra.com), January 2019 + /// + public struct TrackerList + { + public List trackerList; + + public TrackerList(List givenList) + { + trackerList = givenList; + } + } + + /// + /// Custom editor for displaying the hardware IDs for Vive trackers and allowing the user to select the + /// needed ID. The user can refresh the list by hitting the refresh list button and it will pull all the + /// Vive Trackers that are currently paired with SteamVR. The list is then saved as an EditorPref so that + /// it can easily pull and dispaly the list. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// + [CustomEditor(typeof(TrackedObjectID))] + public class TrackedObjectIDEditor : Editor + { +#if VRTK_DEFINE_SDK_STEAMVR + #region PublicVariables + public const string TrackerListPrefLocation = "VIRTUOSO.TrackerList"; + #endregion + + #region UnityEditorFunctions + public override void OnInspectorGUI() + { + // Read + serializedObject.Update(); + + // Get properties of TrackeObjectID + SerializedProperty indexProperty = serializedObject.FindProperty("trackerPopupIndex"); + SerializedProperty hardwareID = serializedObject.FindProperty("trackerHardwareID"); + + // Give the user the option to manually empty the list + if (GUILayout.Button("Clear Tracker List")) + { + ClearTrackerIDPref(); + } + + // Give the user the option to manually refresh the list + if (GUILayout.Button("Refresh Tracker List")) + { + UpdateTrackerIDList(); + } + + // Give the user the ability to assign the index with a button push in the editor + if(GUILayout.Button("Assign Index")) + { + AssignIndex(); + } + + // Make sure that the key has been set at least once and if not, refresh the tracker list + string[] hardwareIDArray; + + // Check to see if their is a list in the Editor Preferences and use if it exists + if(EditorPrefs.HasKey(TrackerListPrefLocation)) + { + hardwareIDArray = GetHardwareIDArray(); + } + else + { + hardwareIDArray = new string[0]; + } + + indexProperty.intValue = EditorGUILayout.Popup(indexProperty.intValue, hardwareIDArray); + + // Check to make sure there is something in the option list, if not, use an empty string + if (hardwareIDArray.Length == 0) + { + hardwareID.stringValue = ""; + } + else + { + hardwareID.stringValue = hardwareIDArray[indexProperty.intValue]; + } + + // Save + serializedObject.ApplyModifiedProperties(); + } + #endregion + + #region TrackerHelperFunctions + private string[] GetHardwareIDArray() + { + string trackerJsonPref = EditorPrefs.GetString(TrackerListPrefLocation); + + TrackerList trackerListJson; + + try + { + trackerListJson = JsonUtility.FromJson(trackerJsonPref); + } + catch(NullReferenceException) + { + Debug.LogWarning("No tracker list found in EditorPrefs."); + return new string[0]; + } + + return trackerListJson.trackerList.ToArray(); + } + + /// + /// Allows for the Editor to assign the index of a SteamVR Tracked Object at Editor time. + /// + public void AssignIndex() + { + EVRInitError initError = EVRInitError.None; + OpenVR.Init(ref initError, EVRApplicationType.VRApplication_Overlay); + + (serializedObject.targetObject as TrackedObjectID).AssignIndex(); + + // Properly close reference to SteamVR so it can be access safely again later + OpenVR.Shutdown(); + } + + [MenuItem("VIRTUOSO/Update Tracker ID List")] + public static void UpdateTrackerIDList() + { + EVRInitError initError = EVRInitError.None; + OpenVR.Init(ref initError, EVRApplicationType.VRApplication_Overlay); + List hardwareIDList = new List(); + + for (uint n = 0; n < Constants.MAX_OPENVR_OBJECTS; n++) + { + ETrackedDeviceClass deviceClass = OpenVR.System.GetTrackedDeviceClass(n); + + if(deviceClass == ETrackedDeviceClass.GenericTracker) + { + + hardwareIDList.Add(TrackedObjectID.GetHardwareIDFromIndex((int)n)); + } + } + + // EditorPrefs cannot store lists but can store anything as a string, so convert the list to JSON and save that instead + string trackerListJson = JsonUtility.ToJson(new TrackerList(hardwareIDList)); + EditorPrefs.SetString(TrackerListPrefLocation, trackerListJson); + + // Properly close reference to SteamVR so it can be access safely again later + OpenVR.Shutdown(); + } + + public static void ClearTrackerIDPref() + { + EditorPrefs.SetString(TrackerListPrefLocation, ""); + } + #endregion +#endif + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs.meta new file mode 100644 index 0000000..cd948a0 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 44dbae16bc3787b42919625fc1fd3b75 +timeCreated: 1536346367 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers.meta b/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers.meta new file mode 100644 index 0000000..b6d73e0 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 72ff3c2576c4357489b673877625a9ec +folderAsset: yes +timeCreated: 1553805839 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs b/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs new file mode 100644 index 0000000..d55d750 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs @@ -0,0 +1,81 @@ +using UnityEngine; +using UnityEditor; +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using System; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Custom property drawer to help the user to select the proper VIRTUOSO event and based on the provided class, + /// the proper event methods available to that class for propogating the timeline events. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// + [CustomPropertyDrawer(typeof(TimelineEventSelection))] + public class TimelineEventSelectionDrawer : PropertyDrawer + { + #region PrivateVariables + // Number of boxes that will be made to fit on one line in the editor + private const float propertiesPerLine = 2.0f; + #endregion + + #region UnityFunctions + /// + /// Draws the custom property drawer for displaying a timeline event selection, which includes the VirtuosoEvent and the event to listen to + /// + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + EditorGUI.indentLevel = 0; + + // Fit 2 properties on one line + position.width /= propertiesPerLine; + + // Grab the providedEvent in the Selection object to find out what kind of enum to display + SerializedProperty providedEvent = property.FindPropertyRelative("providedEvent"); + EditorGUI.ObjectField(position, providedEvent, typeof(VirtuosoEvent), GUIContent.none); + + // Move the next field over horizontally + position.x += position.width; + + SerializedProperty selectedEventName = property.FindPropertyRelative("eventToListen"); + SerializedProperty selectedPopupValue = property.FindPropertyRelative("selectedPopupValue"); + + // Grab the actual passed in class to display the proper enum + VirtuosoEvent virtuosoEvent = (VirtuosoEvent)providedEvent.objectReferenceValue; + + if(virtuosoEvent is TimelineEvent) + { + DisplayEventList(position, virtuosoEvent as TimelineEvent, selectedPopupValue, selectedEventName); + } + else if(virtuosoEvent is InteractionArea) + { + DisplayEventList(position, virtuosoEvent as InteractionArea, selectedPopupValue, selectedEventName); + } + else if(virtuosoEvent is GestureInteraction) + { + DisplayEventList(position, virtuosoEvent as GestureInteraction, selectedPopupValue, selectedEventName); + } + else + { + EditorGUI.LabelField(position, "Provide VIRTUOSO Event"); + } + + EditorGUI.EndProperty(); + } + #endregion + + #region HelperFunctions + // Displays a popup box of event names for a given object + protected void DisplayEventList(Rect position, T givenEvent, SerializedProperty popupIntSelection, SerializedProperty eventString) + { + var eventNames = Utilities.EventUtility.GetEventNameArray(givenEvent); + + popupIntSelection.intValue = EditorGUI.Popup(position, popupIntSelection.intValue, eventNames); + + eventString.stringValue = eventNames[popupIntSelection.intValue]; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs.meta new file mode 100644 index 0000000..d668dc3 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a17faa89409619a478d09f87c627fb0f +timeCreated: 1537377478 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Windows.meta b/Assets/VIRTUOSO/Scripts/Editor/Windows.meta new file mode 100644 index 0000000..bae903b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Windows.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 452f17f6c3e11784cb4bd3354f0a3f50 +folderAsset: yes +timeCreated: 1551900643 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs b/Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs new file mode 100644 index 0000000..76ed3d7 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs @@ -0,0 +1,129 @@ +using CharlesRiverAnalytics.Virtuoso.Haptic; +using UnityEditor; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// Utility to setup the needed body coordinates on a character that uses an Animator. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class ConfigureHapticCharacter : EditorWindow + { + #region PrivateVariables + // Since this utility follows the body parts on the Ragdoll wizard (plus hands) + // If the value is set to true, will set up the needed scripts for the HapticSDK on that + private bool[] configureThisBodyPart; + + private static HumanBodyBones[] bodyParts = + { + HumanBodyBones.Hips, + HumanBodyBones.LeftUpperLeg, + HumanBodyBones.LeftLowerLeg, + HumanBodyBones.LeftFoot, + HumanBodyBones.RightUpperLeg, + HumanBodyBones.RightLowerLeg, + HumanBodyBones.RightFoot, + HumanBodyBones.LeftUpperArm, + HumanBodyBones.LeftLowerArm, + HumanBodyBones.LeftHand, + HumanBodyBones.RightUpperArm, + HumanBodyBones.RightLowerArm, + HumanBodyBones.RightHand, + HumanBodyBones.Spine, + HumanBodyBones.Head + }; + #endregion + + #region ConfigurationMethods + [MenuItem("VIRTUOSO/Haptics/Setup Haptic Character")] + private static void SetupHaptics() + { + EditorWindow.GetWindow(typeof(ConfigureHapticCharacter)); + } + + private static void SetupBodyPart(GameObject bodyPartObject, HumanBodyBones bodyPart) + { + Collider objCollider = bodyPartObject.GetComponent(); + + if (objCollider == null) + { + objCollider = bodyPartObject.AddComponent(); + + Debug.LogWarning("No collider was found on " + bodyPartObject.name + " and a CapsuleCollider " + + "was added. Please ensure it is set up properly.", bodyPartObject); + } + else if(!(objCollider is CapsuleCollider)) + { + GameObject.DestroyImmediate(objCollider); + + objCollider = bodyPartObject.AddComponent(); + + Debug.LogWarning("Non-CapsuleCollider was found on " + bodyPartObject.name + " and a CapsuleCollider " + + "was added. Please ensure it is set up properly.", bodyPartObject); + } + + // Triggers do not recieve collision info like point of collision, so make sure that is off + objCollider.isTrigger = false; + objCollider.gameObject.layer = LayerMask.NameToLayer("Body"); + BodyCoordinate bodyCoordinate = objCollider.gameObject.AddComponent(); + bodyCoordinate.attachedBody = bodyPart; + + Debug.Log("Set up BodyCoordinate on " + bodyPartObject.name, bodyPartObject); + } + + private void SetupCharacter(GameObject rootObject) + { + rootObject.AddComponent(); + + Animator animator = rootObject.GetComponent(); + + for (int n = 0; n < configureThisBodyPart.Length; n++) + { + if (configureThisBodyPart[n]) + { + SetupBodyPart(animator.GetBoneTransform(bodyParts[n]).gameObject, bodyParts[n]); + } + } + } + #endregion + + #region UnityFunctions + private void Awake() + { + configureThisBodyPart = new bool[bodyParts.Length]; + } + + void OnGUI() + { + GameObject obj = Selection.activeGameObject; + + EditorGUILayout.BeginVertical(); + + EditorGUILayout.HelpBox("This Wizard will help you set up the needed body coordinate systems on a rigged character. " + + "Select a rigged character with an Animator component in order to use this Wizard.", MessageType.None); + + if (obj != null && obj.GetComponent()) + { + // Prompt for each body part + for (int n = 0; n < bodyParts.Length; n++) + { + configureThisBodyPart[n] = EditorGUILayout.Toggle(bodyParts[n].ToString(), configureThisBodyPart[n]); + } + + if (GUILayout.Button("Configure Character")) + { + SetupCharacter(obj); + } + } + else + { + EditorGUILayout.HelpBox("Please select a GameObject with an Animator to use this wizard.", MessageType.Error); + } + + EditorGUILayout.EndVertical(); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs.meta new file mode 100644 index 0000000..b4042b7 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 74fc4bd2c6011774bb8ddf70cf5a7400 +timeCreated: 1551900658 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs b/Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs new file mode 100644 index 0000000..e931a51 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs @@ -0,0 +1,86 @@ +using CharlesRiverAnalytics.Virtuoso.Utilities; +using UnityEditor; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Editor window for adjusting the settings used by the Haptic SDK. This works by setting the + /// values on the ScriptableHapticSetting class to save them. Also provides a utility to reset + /// the values to their default. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class HapticSettingsWindow : EditorWindow + { + #region PrivateVariables + private ScriptableHapticSettings persistentSettingsData; + private ScriptableHapticSettings temporarySettingsData; + #endregion + + #region SettingMethods + [MenuItem("VIRTUOSO/Haptics/HapticSDK Settings")] + private static void SetupHaptics() + { + EditorWindow.GetWindow(typeof(HapticSettingsWindow)); + } + + private void GetMostRecentSettings() + { + persistentSettingsData = ScriptableHapticSettings.GetSettings(); + + temporarySettingsData = persistentSettingsData; + } + #endregion + + #region Unity Functions + private void Awake() + { + GetMostRecentSettings(); + } + + private void OnGUI() + { + EditorGUILayout.BeginVertical(); + + // Prompt for default save location for patterns + temporarySettingsData.defaultPatternSaveLocation = EditorGUILayout.DelayedTextField("Pattern Save Location", temporarySettingsData.defaultPatternSaveLocation); + + // Prompt for default save location for curves + temporarySettingsData.defaultCurveSaveLocation = EditorGUILayout.DelayedTextField("Curve Save Location", temporarySettingsData.defaultCurveSaveLocation); + + // Prompt for time granularity + temporarySettingsData.defaultTimeGranularity = EditorGUILayout.FloatField("Time Granularity", temporarySettingsData.defaultTimeGranularity); + + // Prompt for default intensity + temporarySettingsData.defaultIntensity = EditorGUILayout.FloatField("Default Intensity", temporarySettingsData.defaultIntensity); + + // Prompt for curve granularity + temporarySettingsData.defaultCurveRenderingGranularity = EditorGUILayout.IntField("Curve Granularity", temporarySettingsData.defaultCurveRenderingGranularity); + + EditorGUILayout.BeginHorizontal(); + + // Reset to default + if (GUILayout.Button("Reset to Default")) + { + // Delete the scriptable object, it will be recreated next time it is accessed with the default settings + ScriptableObjectUtility.DeleteScriptableObject(persistentSettingsData); + + GetMostRecentSettings(); + } + + // Save Settings + if (GUILayout.Button("Save Settings")) + { + temporarySettingsData.OnValidate(); + + persistentSettingsData = temporarySettingsData; + } + + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.EndVertical(); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs.meta b/Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs.meta new file mode 100644 index 0000000..f795b6b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f2e75fc075bf2ce4f989e717b45f6b62 +timeCreated: 1556137180 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events.meta b/Assets/VIRTUOSO/Scripts/Events.meta new file mode 100644 index 0000000..69cefaa --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 49fa689777912894c86e45b586dbd1c9 +folderAsset: yes +timeCreated: 1544108878 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/ArgSender.meta b/Assets/VIRTUOSO/Scripts/Events/ArgSender.meta new file mode 100644 index 0000000..776c902 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/ArgSender.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f04ef79e47bd8694f906b93d9aa9ca08 +folderAsset: yes +timeCreated: 1551199493 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs b/Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs new file mode 100644 index 0000000..574094c --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs @@ -0,0 +1,62 @@ +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using System; +using VRTK; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Ensures that the controller that causes the initial interaction on an InteractableObject is passed to + /// a reaction if needed. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [RequireComponent(typeof(VRTK_InteractableObject))] + public class ControllerEventArgSender : EventArgSender + { + #region PrivateVariables + private VRTK_InteractableObject interactableObject; + private GameObject controllerGameObject; + #endregion + + #region EventArgSenderImplementation + public override EventArgs GetEventArgs() + { + ControllerReactionEventArgs snapEventArgs = new ControllerReactionEventArgs() + { + interactingController = controllerGameObject + }; + + return snapEventArgs; + } + #endregion + + #region EventHandlers + private void InteractingObject_InteractableObjectUngrabbed(object sender, InteractableObjectEventArgs e) + { + controllerGameObject = null; + } + + private void InteractingObject_InteractableObjectGrabbed(object sender, InteractableObjectEventArgs e) + { + controllerGameObject = e.interactingObject.transform.parent.gameObject; + } + #endregion + + #region UnityFunctions + private void Awake() + { + interactableObject = GetComponent(); + + interactableObject.InteractableObjectGrabbed += InteractingObject_InteractableObjectGrabbed; + interactableObject.InteractableObjectUngrabbed += InteractingObject_InteractableObjectUngrabbed; + } + + private void OnApplicationQuit() + { + interactableObject.InteractableObjectGrabbed -= InteractingObject_InteractableObjectGrabbed; + interactableObject.InteractableObjectUngrabbed -= InteractingObject_InteractableObjectUngrabbed; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs.meta b/Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs.meta new file mode 100644 index 0000000..1fa1a97 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5ee916bf3143e1b4aa7f294201d95003 +timeCreated: 1551199532 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs b/Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs new file mode 100644 index 0000000..5f670ed --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// A component used in conjuction with VRTK_InteractableObject. When placed with an InteractableObject, + /// it will provide a (specified) EventArgs to be used by reactions. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [RequireComponent(typeof(VRTK_InteractableObject))] + public abstract class EventArgSender : MonoBehaviour + { + public abstract EventArgs GetEventArgs(); + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs.meta b/Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs.meta new file mode 100644 index 0000000..21e739e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9540d1f41631cfd42bacb57df15039d3 +timeCreated: 1550607624 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs b/Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs new file mode 100644 index 0000000..04577b5 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs @@ -0,0 +1,37 @@ +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Sends a SnapReactionEventArgs when requested by an InteractableObject. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class SnapEventArgSender : EventArgSender + { + #region PublicVariables + [Tooltip("A specific location on the object where the snap should occur.")] + public Transform snapTransform; + [Tooltip("When true, the snapped GameObject's collider will not be disabled when snapped.")] + public bool canGrabObjectAfterSnap; + #endregion + + #region EventArgSenderImplementation + public override EventArgs GetEventArgs() + { + SnapReactionEventArgs snapEventArgs = new SnapReactionEventArgs() + { + interactionObject = gameObject, + snapLocation = snapTransform, + keepObjectGrabbable = canGrabObjectAfterSnap + }; + + return snapEventArgs; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs.meta b/Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs.meta new file mode 100644 index 0000000..0c21f02 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 57c005fe2baffa14a9d2d521caae0116 +timeCreated: 1550608655 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/EventArgs.meta b/Assets/VIRTUOSO/Scripts/Events/EventArgs.meta new file mode 100644 index 0000000..7cbe4e2 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/EventArgs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 24beb6ec71306594599eba8921f27c7b +folderAsset: yes +timeCreated: 1550609279 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs b/Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs new file mode 100644 index 0000000..453ef9d --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// EventArgs for holding controller information as this can be lost between + /// Interactable Objects and Interaction Areas. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class ControllerReactionEventArgs : InteractionAreaEventArgs + { + public GameObject interactingController; + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs.meta b/Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs.meta new file mode 100644 index 0000000..a1dd25b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5565f29df323e794e93d6ed4284a28df +timeCreated: 1551199749 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs b/Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs new file mode 100644 index 0000000..2e22589 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// Event Payload + /// The game object that causes the event to go off in the Interaction Area + /// + public class InteractionAreaEventArgs : EventArgs + { + public GameObject interactionObject; + // When marked true, a reaction will query the interactionObject for it's own special EventArgs + // since many reactions can be hooked into a single event + public bool hasMoreReactionInfo = false; + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs.meta b/Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs.meta new file mode 100644 index 0000000..d0f9e5b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: be021a25b73366d40bfaffee7bfa0e52 +timeCreated: 1550609357 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs b/Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs new file mode 100644 index 0000000..c4286c4 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// Helper class for the Snap Reaction. If extra information is needed for snapping, this class + /// can be expanded to hold the information and get passed to the Interaction Area when the + /// InteractableObject interacts with the IA. + /// + public class SnapReactionEventArgs : InteractionAreaEventArgs + { + public Transform snapLocation; + public bool keepObjectGrabbable; + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs.meta b/Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs.meta new file mode 100644 index 0000000..6dc8a94 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2034e045c20bf4943b7724ce48e0aa39 +timeCreated: 1550609290 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs b/Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs new file mode 100644 index 0000000..7ea8d51 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs @@ -0,0 +1,179 @@ +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using CharlesRiverAnalytics.Virtuoso.Reaction; +using CharlesRiverAnalytics.Virtuoso.Utilities; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso +{ + public delegate void TimelineEventHandler(object sender, EventArgs e); + + /// + /// Timeline events are used for propogating events happening for the entire scenario. This would include + /// the background events of the scenario. Events can be held off from firing by filling in the + /// dependencies for either other Timeline events, by Interaction Areas, gesture events, or anything + /// that inherits the VirtuosoEvent. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class TimelineEvent : VirtuosoEvent + { + #region PublicVariables + [Tooltip("The time (in ms) the timeline event will wait before firing the reactions.")] + public int startDelay = 0; + [Tooltip("The list of other timeline events, interaction areas, and gesture events that can constrain this event.")] + public List dependencyList; + [Tooltip("The list of reactions that will fire when all dependencies have been met.")] + public List reactionList; + #endregion + + #region ProtectedVariables + protected HashSet awaitingEvents; + protected List dynamicDelegateList; + #endregion + + #region EventVariables + // Emitted when the timeline event finishes + public event TimelineEventHandler TimelineEventFinish; + + protected virtual void OnTimelineEventFinish(EventArgs timelineArgs) + { + if (TimelineEventFinish != null) + { + TimelineEventFinish(this, timelineArgs); + } + } + #endregion + + #region UnityFunctions + protected void Awake() + { + awaitingEvents = new HashSet(); + dynamicDelegateList = new List(); + } + + protected void OnEnable() + { + for (int n = 0; n < dependencyList.Count; n++) + { + if (dependencyList[n].providedEvent is TimelineEvent) + { + TimelineEvent currentEvent = dependencyList[n].providedEvent as TimelineEvent; + + awaitingEvents.Add(currentEvent); + + dynamicDelegateList.Add(EventUtility.SubscribeToEvent(this, + currentEvent, + dependencyList[n].eventToListen, + "OnDependentTimeline", + null, + GetType(), + BindingFlags.Instance | BindingFlags.NonPublic)); + } + else if(dependencyList[n].providedEvent is InteractionArea) + { + InteractionArea currentEvent = dependencyList[n].providedEvent as InteractionArea; + + awaitingEvents.Add(currentEvent); + + dynamicDelegateList.Add(EventUtility.SubscribeToEvent(this, + currentEvent, + dependencyList[n].eventToListen, + "OnDependentInteractionArea", + null, + GetType(), + BindingFlags.Instance | BindingFlags.NonPublic)); + } + else if(dependencyList[n].providedEvent is GestureInteraction) + { + GestureInteraction currentEvent = dependencyList[n].providedEvent as GestureInteraction; + + awaitingEvents.Add(currentEvent); + + dynamicDelegateList.Add(EventUtility.SubscribeToEvent(this, + currentEvent, + dependencyList[n].eventToListen, + "OnDependentTimeline", + null, + GetType(), + BindingFlags.Instance | BindingFlags.NonPublic)); + } + } + + // If there are no dependencies, you start at the scene's start + CheckDependencyCount(); + } + + protected void OnDisable() + { + for(int n = 0; n < dynamicDelegateList.Count; n++) + { + dynamicDelegateList[n].UnsubscribeEvent(); + } + } + #endregion + + #region EventHandling + protected void OnDependentTimeline(object sender, EventArgs e) + { + awaitingEvents.Remove(sender as TimelineEvent); + + CheckDependencyCount(); + } + + protected void OnDependentInteractionArea(object sender, InteractionAreaEventArgs e) + { + awaitingEvents.Remove(sender as InteractionArea); + + CheckDependencyCount(); + } + + // TODO Add back with gestures [VIRTUOSO-169] + /*protected void OnDependentGesture(object sender, GestureEventArgs e) + { + awaitingEvents.Remove(sender as InteractGesture); + + CheckDependencyCount(); + }*/ + #endregion + + #region HelperFunctions + /// + /// Helper function to check the size of the awaitingEvent set. Since objects are removed from the set + /// after they are fired, when the set is empty, the timeline event has no more dependencies and + /// can now fire off the finish event. + /// + protected void CheckDependencyCount() + { + if(awaitingEvents.Count == 0) + { + StartCoroutine(FireEvent()); + } + } + #endregion + + #region Coroutines + protected IEnumerator FireEvent() + { + yield return new WaitForSeconds(startDelay / Constants.MS_TO_SECONDS); + + for (int n = 0; n < reactionList.Count; n++) + { + if(reactionList[n] != null) + { + // TODO Fix connection with reactions [VIRTUOSO-180] + //reactionList[n].StartReaction(); + } + } + + OnTimelineEventFinish(new EventArgs()); + + // Disable self as it is no longer needed + enabled = false; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs.meta b/Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs.meta new file mode 100644 index 0000000..96d2229 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0ff36da1c5a8bb5478071642f103c055 +timeCreated: 1534875337 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs b/Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs new file mode 100644 index 0000000..3446607 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; + +namespace CharlesRiverAnalytics.Virtuoso +{ + [Serializable] + public class TimelineEventSelection + { + // The actual object that will give off the event + public VirtuosoEvent providedEvent; + // Hold the string value of an enum and convert it when the type is known at runtime + public string eventToListen; + + // Used for data persistence in the property drawer, stores the popup index so it can survive the serialization process + public int selectedPopupValue; + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs.meta b/Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs.meta new file mode 100644 index 0000000..5d1f9c5 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7ab8bd0dcacb4144b92ce95b45ec87bd +timeCreated: 1537903034 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs b/Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs new file mode 100644 index 0000000..26d6aa3 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Base class for any Virtuoso Event System to inherit from. It does not provide + /// any functionality or data, but allows for collections to hold different + /// event systems (such as the case in TimeLineEvent dependencies). + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// + public class VirtuosoEvent : MonoBehaviour + { + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs.meta b/Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs.meta new file mode 100644 index 0000000..769c18a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b71f5346745d5f846b1bb9b349048db6 +timeCreated: 1537294487 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Gestures.meta b/Assets/VIRTUOSO/Scripts/Gestures.meta new file mode 100644 index 0000000..93a0650 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ec3ddf9ce8b47b945a963b4351dbecd8 +folderAsset: yes +timeCreated: 1544458162 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs b/Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs new file mode 100644 index 0000000..c5b959e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs @@ -0,0 +1,547 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using CharlesRiverAnalytics.Virtuoso; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Gestures +{ + /// + /// An advanced gesture combines raw gestures with contextual information in a state machine to allow for multistep gestures + /// that also include more complex elements like basic movement, palm angle, etc. + /// + /// Author: Dan Duggan (dduggan@cra.com) October 2018 + /// + [CreateAssetMenu(menuName = "VIRTUOSO/Advanced Gesture")] + public class AdvancedGesture : Gesture + { + #region Public Variables + public List advancedGestureStateList = new List(); + [System.NonSerialized] + protected int currentGestureStateIndex; + [System.NonSerialized] + public Vector3 prevLeftPalmPosition; + [System.NonSerialized] + public Vector3 prevRightPalmPosition; + [NonSerialized] + protected VRTK_InteractGrab cachedLeftHandGrabber = null; + [NonSerialized] + protected VRTK_InteractGrab cachedRightHandGrabber = null; + [System.NonSerialized] + public float gestureStartTime = 0; + public bool allowedWhileHoldingObjects = false; + // Adds a delay after a gesture is triggered to prevent it from turning on/off too quickly + public float gestureCooldown; + #endregion + #region Control Variables + [System.NonSerialized] + protected float gestureCooldownStartTime = 0; + protected float startupDelayTime = 1.0f; + #endregion + + #region Gesture Detection Code + + public override bool IsGestureOccuring(SDK_BaseGestureLibrary.Hand specificHand) + { + // if not detected, it cannot be gesturing + if(! VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary().IsHandDetected(specificHand)) + { + return false; + } + + // OpenMG has a habit of claiming gestures are occuring at the start of the scene before hands are even detected. + // this delay ensures that no gesture fire until the system is fully started + if (Time.time < startupDelayTime) + { + return false; + } + + if (!allowedWhileHoldingObjects) + { + if (IsHoldingObject(SDK_BaseGestureLibrary.Hand.Left) || IsHoldingObject(SDK_BaseGestureLibrary.Hand.Right)) + { + return false; + } + } + + bool isCooldownActive = Time.time <= (gestureCooldownStartTime + gestureCooldown); + bool isCurrentStateOccuring = advancedGestureStateList[currentGestureStateIndex].coreGesture.IsGestureOccuring(specificHand); + foreach (AdvancedGestureCondition advCondition in advancedGestureStateList[currentGestureStateIndex].AdvancedGestureConditionList) + { + isCurrentStateOccuring = isCurrentStateOccuring && advCondition.IsConditionOccuring(specificHand, this); + } + if (isCurrentStateOccuring && advancedGestureStateList.Count == currentGestureStateIndex + 1) + { + if (isCooldownActive == false) + { + gestureCooldownStartTime = Time.time; + } + return true; + } + else if (isCurrentStateOccuring) + { + currentGestureStateIndex++; + gestureStartTime = Time.time; + prevLeftPalmPosition = GetLeftHandPosition(); + prevRightPalmPosition = GetRightHandPosition(); + } + else + { + if (advancedGestureStateList[currentGestureStateIndex].holdTime != 0 && advancedGestureStateList[currentGestureStateIndex].holdTime + gestureStartTime <= Time.time) + { + ResetGestureChain(); + } + + } + return isCooldownActive; + } + #endregion + + #region Helper Functions + /// + /// Returns true if the specified hand is holding an object and false otherwise. + /// + public bool IsHoldingObject(SDK_BaseGestureLibrary.Hand hand) + { + Transform handRoot = VRTK_SDK_Bridge.GetHandSDK().GetRootTransform(); + if (handRoot == null) + { + // if the hand is not visible, the user isn't holding an object + return false; + } + + if (hand == SDK_BaseGestureLibrary.Hand.Left && IsInteractGrabValid(cachedLeftHandGrabber)) + { + // if not null, an object is being held + return cachedLeftHandGrabber.GetGrabbedObject() != null; + } + + if (hand == SDK_BaseGestureLibrary.Hand.Right && IsInteractGrabValid(cachedRightHandGrabber)) + { + // if not null, an object is being held + return cachedRightHandGrabber.GetGrabbedObject() != null; + } + + // either caches aren't set up, or hands are no longer being tracked + VRTK_InteractGrab[] handGrabbers = handRoot.GetComponentsInChildren(); + foreach(VRTK_InteractGrab grabber in handGrabbers) + { + if(! IsInteractGrabValid(grabber)) + { + continue; + } + if(grabber.controllerEvents is GestureControllerEvent) + { + GestureControllerEvent gestureController = (GestureControllerEvent)grabber.controllerEvents; + if(gestureController.controllerHandId == SDK_BaseGestureLibrary.Hand.Left) + { + cachedLeftHandGrabber = grabber; + } + else if(gestureController.controllerHandId == SDK_BaseGestureLibrary.Hand.Right) + { + cachedRightHandGrabber = grabber; + } + + if(gestureController.controllerHandId == hand) + { + return grabber.GetGrabbedObject() != null; + } + } + } + // fell through because hand was not found + return false; + } + /// + /// Returns the position of the left hand, or Vector3.zero if unavailable + /// + public Vector3 GetLeftHandPosition() + { + SDK_BaseGestureLibrary currentLibrary = VRTK.VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary(); + if (currentLibrary == null) + { + Debug.LogWarning("Unable to find gesture library for current Hand SDK"); + return Vector3.zero; + } + else + { + return currentLibrary.GetHandPosition(SDK_BaseGestureLibrary.Hand.Left); + } + } + + /// + /// Returns the position vector for the right hand or Vector3.zero if it is unavailable + /// + public Vector3 GetRightHandPosition() + { + SDK_BaseGestureLibrary currentLibrary = VRTK.VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary(); + if (currentLibrary == null) + { + Debug.LogWarning("Unable to find gesture library for current Hand SDK"); + return Vector3.zero; + } + else + { + return currentLibrary.GetHandPosition(SDK_BaseGestureLibrary.Hand.Right); + } + } + + /// + /// Returns the euler rotation in degrees for the left hand or Vector3.zero if it is unavailable + /// + public Vector3 GetLeftHandNormal() + { + SDK_BaseGestureLibrary currentLibrary = VRTK.VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary(); + if (currentLibrary == null) + { + Debug.LogWarning("Unable to find gesture library for current Hand SDK"); + return Vector3.zero; + } + else + { + return currentLibrary.GetHandNormal(SDK_BaseGestureLibrary.Hand.Left); + } + } + + /// + /// Returns the euler rotation in degrees for the right hand or Vector3.zero if it is unavailable + /// + public Vector3 GetRightHandNormal() + { + SDK_BaseGestureLibrary currentLibrary = VRTK.VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary(); + if (currentLibrary == null) + { + Debug.LogWarning("Unable to find gesture library for current Hand SDK"); + return Vector3.zero; + } + else + { + return currentLibrary.GetHandNormal(SDK_BaseGestureLibrary.Hand.Right); + } + } + /// + /// Sets the state machine for the advanced gesture back to start + /// + protected void ResetGestureChain() + { + currentGestureStateIndex = 0; + gestureStartTime = 0; + prevLeftPalmPosition = GetLeftHandPosition(); + prevRightPalmPosition = GetRightHandPosition(); + } + + protected bool IsInteractGrabValid(VRTK_InteractGrab interactGrab) + { + if(interactGrab == null) + { + interactGrab = null; + return false; + } + + if(interactGrab.gameObject.activeInHierarchy == false) + { + interactGrab = null; + return false; + } + + if(interactGrab.isActiveAndEnabled == false) + { + return false; + } + + return true; + } + #endregion + + } + #region Embedded Classes + /// + /// The advanced gesture state represents a step in an advanced gesture. It holds a number of gesture conditions that + /// are each check to determine if the state is occuring as well as a single coreGesture that must be active for the + /// state to be active. + /// + [System.Serializable] + public class AdvancedGestureState + { + #region Class Enum + public enum AdvancedConditionType + { + Movement, + PalmAngle, + SimultaneousAction, + Hold + } + #endregion + #region Public Variables and Properties + // name is for readability but serves no other function + public string gestureName = "GestureName"; + public Gesture coreGesture; + [Tooltip("How long the advanced gesture will hold at this state before dropping back to the initial state.")] + public float holdTime; + // this property conglomerates the separate conditions. They are in separate lists for easier management + public List AdvancedGestureConditionList + { + get + { + List conditions = new List(); + foreach (MovementGestureCondition condition in movementConditionList) + { + conditions.Add(condition); + } + foreach (HoldGestureCondition condition in holdConditionList) + { + conditions.Add(condition); + } + foreach (PalmNormalCondition condition in palmConditions) + { + conditions.Add(condition); + } + foreach (SimultaneousGesture condition in simultaneousGestureConditionList) + { + conditions.Add(condition); + } + return conditions; + } + } + public List movementConditionList = new List(); + public List holdConditionList = new List(); + public List palmConditions = new List(); + public List simultaneousGestureConditionList = new List(); + + // used to decide the class for new conditions created in the editor + public AdvancedConditionType editorNewConditionType; + #endregion + + + } + + /// + /// The base class for gesture conditions is non-abstract because Unity serialization breaks with abstract class hierarchies + /// + [System.Serializable] + public class AdvancedGestureCondition + { + /// + /// Returns true if the condition is occuring and false otherwise, except in the base version which will always return false. + /// This method is not marked as abstract because Unity cannot serialize classes that have abstract base classes. New Advanced Gesture Conditions + /// should implement this method. + /// + public virtual bool IsConditionOccuring(SDK_BaseGestureLibrary.Hand specificHand, AdvancedGesture advancedGestureInfo) + { + return false; + } + + } + + /// + /// The movement gesture condition determines if the hand making the gesture has moved since the previous state. + /// It has several options but it is noteable that none of those options allow for specific directions of travel. + /// + [System.Serializable] + public class MovementGestureCondition : AdvancedGestureCondition + { + #region Embedded Enum + // determines how the movement check is made + public enum MovementOperator { GreaterThan, LessThan, EqualTo } + #endregion + #region Public Variables + public MovementOperator distanceOperator; + public float distanceFromPreviousGesture; + public float distanceTolerance = 0.001f; + #endregion + + #region AdvancedGestureCondition Override + public override bool IsConditionOccuring(SDK_BaseGestureLibrary.Hand specificHand, AdvancedGesture advancedGestureInfo) + { + Vector3 palmPosition; + Vector3 previousPalmPosition; + if (specificHand == SDK_BaseGestureLibrary.Hand.Left) + { + previousPalmPosition = advancedGestureInfo.prevLeftPalmPosition; + palmPosition = advancedGestureInfo.GetLeftHandPosition(); + } + else + { + previousPalmPosition = advancedGestureInfo.prevRightPalmPosition; + palmPosition = advancedGestureInfo.GetRightHandPosition(); + } + + if (palmPosition == Vector3.zero) + { + // vector3 zero is the 'null' for vectors + return false; + } + + float palmMovementDistance = Vector3.Distance(palmPosition, previousPalmPosition); + // switch statement effectively controls which operator is used when comparing the actual palm movement amount to the desired palm movement amount + switch (distanceOperator) + { + case MovementOperator.LessThan: + { + if (palmMovementDistance < distanceFromPreviousGesture) + { + return true; + } + break; + } + case MovementOperator.GreaterThan: + { + if (palmMovementDistance > distanceFromPreviousGesture) + { + return true; + } + break; + } + case MovementOperator.EqualTo: + { + if ((distanceFromPreviousGesture - distanceTolerance <= palmMovementDistance && palmMovementDistance <= distanceFromPreviousGesture + distanceTolerance)) + { + return true; + } + break; + } + } + return false; + } + #endregion + } + + /// + /// The palm vector condition passes/fails based on where the player's palm is facing relative to other objects + /// + [System.Serializable] + public class PalmNormalCondition : AdvancedGestureCondition + { + #region Embedded Enums + // no left/right vector at the moment, because the meaning of each varies on each hand (e.g. left on left is outward, left on right is inward) + public enum VectorType { Up, Forward } + public enum OtherVector { World, Hmd } + #endregion + + #region Public Variables + public OtherVector otherVectorToUse; + public VectorType otherVectorDirection; + public Vector3 eulerRotationFromOtherVector; + public float tolerance = 0.15f; + #endregion + + #region Advanced Gesture Condition Override + public override bool IsConditionOccuring(SDK_BaseGestureLibrary.Hand specificHand, AdvancedGesture advancedGestureInfo) + { + SDK_BaseGestureLibrary currentLibrary = VRTK.VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary(); + if (currentLibrary == null) + { + Debug.LogWarning("No gesture library detected for the current Hand SDK"); + return false; + } + Vector3 palmNormal = currentLibrary.GetHandNormal(specificHand); + if (palmNormal == Vector3.zero) + { + // hand tracking lost + return false; + } + // otherVec is a normal vector that will be compared to the palm vector + Vector3 otherVec; + Quaternion rotationToUse = Quaternion.Euler(eulerRotationFromOtherVector); + if (otherVectorToUse == OtherVector.World) + { + switch (otherVectorDirection) + { + case VectorType.Forward: + { + otherVec = rotationToUse * Vector3.forward; + break; + } + case VectorType.Up: + { + otherVec = rotationToUse * Vector3.up; + break; + } + default: + { + otherVec = rotationToUse * Vector3.up; + break; + } + } + } + else if (otherVectorToUse == OtherVector.Hmd) + { + Transform hmd = VRTK_SDK_Bridge.GetHeadset(); + switch (otherVectorDirection) + { + case VectorType.Forward: + { + otherVec = hmd.TransformDirection(rotationToUse * Vector3.forward); + break; + } + case VectorType.Up: + { + otherVec = hmd.TransformDirection(rotationToUse * Vector3.up); + break; + } + default: + { + otherVec = hmd.TransformDirection(rotationToUse * Vector3.up); + break; + } + } + } + else + { + // for whatever reason, otherVec is undefined. return false + return false; + } + + float dotProduct = Vector3.Dot(otherVec, palmNormal); + // close to 1 -> similar direction + if (dotProduct >= 1 - tolerance) + { + return true; + } + else + { + return false; + } + } + #endregion + } + + /// + /// The hold gesture condition passes if the core gesture is held for a specific amount of time + /// + [System.Serializable] + public class HoldGestureCondition : AdvancedGestureCondition + { + #region Public Variables + public float gestureHoldTime; + #endregion + + #region Advanced Gesture Condition Override + public override bool IsConditionOccuring(SDK_BaseGestureLibrary.Hand specificHand, AdvancedGesture advancedGestureInfo) + { + return Time.time >= advancedGestureInfo.gestureStartTime + gestureHoldTime; + } + #endregion + } + + /// + /// Checks if a specific gesture is being held by the other hand. Checking if another advanced gesutre is occuring is NOT recommended + /// because it could lead to recursion. + /// + [System.Serializable] + public class SimultaneousGesture : AdvancedGestureCondition + { + #region Public Variables + public Gesture simultaneousGesture; + #endregion + + #region Advanced Gesture Condition Override + public override bool IsConditionOccuring(SDK_BaseGestureLibrary.Hand specificHand, AdvancedGesture advancedGestureInfo) + { + SDK_BaseGestureLibrary.Hand otherHand = specificHand == SDK_BaseGestureLibrary.Hand.Left ? SDK_BaseGestureLibrary.Hand.Right : SDK_BaseGestureLibrary.Hand.Left; + return simultaneousGesture.IsGestureOccuring(otherHand); + } + #endregion + } + #endregion +} diff --git a/Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs.meta b/Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs.meta new file mode 100644 index 0000000..c0d303c --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a270cc344602b6f48ad85c8184e27d08 +timeCreated: 1546526679 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs b/Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs new file mode 100644 index 0000000..a126374 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs @@ -0,0 +1,119 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VRTK; +using UnityEngine.UI; + +namespace CharlesRiverAnalytics.Virtuoso.Gestures +{ + /// + /// A class container for defining a gesture. This class follows the booleans that are provided + /// by the SDK_BaseGestureLibrary for gesture recognition. A gesture here is defined as a combination + /// of bools that must be true (though all others do not necessarily have to be false). + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// Last Modified: Dan Duggan (dduggan@cra.com) October 2018: Added code related to handedness of gestures + /// + [CreateAssetMenu(fileName = "New Gesture", menuName = "VIRTUOSO/Create Gesture")] + public class Gesture : ScriptableObject + { + #region Public Variables + [Tooltip("This gesture is occuring if every item in this list is true")] + public List gestureConditionList; + [Tooltip("If true, the gesture can only be performed with the hand specified in specificHand")] + public bool handSpecific = false; + [Tooltip("When handSpecific is true, this field specifies which hand the gesture must be performed with")] + public SDK_BaseGestureLibrary.Hand specificHand; + + public enum BasicGesture + { + IsThumbBent, + IsIndexFingerBent, + IsMiddleFingerBent, + IsRingFingerBent, + IsPinkyFingerBent, + IsHandOpen, + IsHandClosed, + IsHandPinching + } + #endregion + + #region Public API + public virtual bool IsGestureOccuring(SDK_BaseGestureLibrary.Hand handToCheck) + { + // if not detected, it cannot be gesturing + if (!VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary().IsHandDetected(handToCheck)) + { + return false; + } + + bool isGestureOccuring = true; + + if (handSpecific && specificHand != handToCheck) + { + return false; + } + + for (int gestureConditionIndex = 0; gestureConditionIndex < gestureConditionList.Count; gestureConditionIndex++) + { + GestureCondition condition = gestureConditionList[gestureConditionIndex]; + bool thisConditionIsMet = true; + thisConditionIsMet = GetBoolValue(condition.featureToCheck, handToCheck) == condition.featureValue; + isGestureOccuring = isGestureOccuring && thisConditionIsMet; + // Quick return, if at any time one is false, then it would not execute + if (!isGestureOccuring) + { + return isGestureOccuring; + } + } + + return isGestureOccuring; + } + + public virtual bool GetBoolValue(BasicGesture givenGesture, SDK_BaseGestureLibrary.Hand handIndex) + { + SDK_BaseGestureLibrary currentLibrary = VRTK.VRTK_SDK_Bridge.GetHandSDK().GetGestureLibrary(); + if (currentLibrary == null) + { + // preventing a null exception, but this really should use some error handling + // since currently it doesn't differentiate between a gesture not happening and a hand not existing + // does not print a warning because it would flood the log + return false; + } + + switch (givenGesture) + { + case BasicGesture.IsThumbBent: + return currentLibrary.IsFingerBent(handIndex, SDK_BaseGestureLibrary.Finger.Thumb); + case BasicGesture.IsIndexFingerBent: + return currentLibrary.IsFingerBent(handIndex, SDK_BaseGestureLibrary.Finger.Index); + case BasicGesture.IsMiddleFingerBent: + return currentLibrary.IsFingerBent(handIndex, SDK_BaseGestureLibrary.Finger.Middle); + case BasicGesture.IsRingFingerBent: + return currentLibrary.IsFingerBent(handIndex, SDK_BaseGestureLibrary.Finger.Ring); + case BasicGesture.IsPinkyFingerBent: + return currentLibrary.IsFingerBent(handIndex, SDK_BaseGestureLibrary.Finger.Pinky); + case BasicGesture.IsHandOpen: + return currentLibrary.IsHandOpen(handIndex); + case BasicGesture.IsHandClosed: + return currentLibrary.IsHandClosed(handIndex); + case BasicGesture.IsHandPinching: + return currentLibrary.IsHandPinched(handIndex); + default: + return false; + } + } + #endregion + } + + /// + /// Encapsulates data that determines whether or not the gesture is active + /// + [System.Serializable] + public class GestureCondition + { + public Gesture.BasicGesture featureToCheck; + [Tooltip("This is the value that the gesturebool should be")] + public bool featureValue = true; + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs.meta b/Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs.meta new file mode 100644 index 0000000..6208108 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3a946ec1f6eba3847a40b65e89f9f034 +timeCreated: 1544458172 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs b/Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs new file mode 100644 index 0000000..20e7530 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs @@ -0,0 +1,209 @@ +using CharlesRiverAnalytics.Virtuoso.Scriptable; +using System; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Gestures +{ + /// + /// Allows the end user to designate gesture to VRTK button presses. For now, there is only + /// a way to simulate pressing a button since a gesture is either done or not, so not all + /// of VRTK's button mapping (like trigger hairline) have been defined yet. + /// + /// Based on VRTK/Scripts/Interactions/VRTK_ControllerEvents + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// Last Modified: Dan Duggan (dduggan@cra.com) January 2019 + /// + /// This class only provides calls to the Pressed/Released method calls. The classes are left + /// virtual so anyone may override them and expand functionality to the other button states. + /// + public class GestureControllerEvent : VRTK_ControllerEvents + { + #region PublicVariables + public SDK_BaseGestureLibrary.Hand controllerHandId; + public Gesture triggerGesture; + public Gesture gripGesture; + public Gesture touchpadGesture; + public Gesture buttonOneGesture; + public Gesture buttonTwoGesture; + public Gesture startMenuGesture; + #endregion + + #region ProtectedVariables + protected struct GestureButtonStates + { + public GestureButtonStates(bool allValues) + { + isGestureButtonPressed = allValues; + wasPressedLastFrame = allValues; + wasPressedThisFrame = allValues; + wasReleasedThisFrame = allValues; + wasReleasedLastFrame = allValues; + } + + public bool isGestureButtonPressed; + public bool wasPressedLastFrame; + public bool wasPressedThisFrame; + public bool wasReleasedThisFrame; + public bool wasReleasedLastFrame; + } + + protected GestureButtonStates triggerGestureButton; + protected GestureButtonStates gripGestureButton; + protected GestureButtonStates touchPadGestureButton; + protected GestureButtonStates buttonOneGestureButton; + protected GestureButtonStates buttonTwoGestureButton; + protected GestureButtonStates startMenuGestureButton; + + #endregion + + #region UnityFunctions + protected override void Awake() + { + base.Awake(); + + triggerGestureButton = new GestureButtonStates(false); + gripGestureButton = new GestureButtonStates(false); + touchPadGestureButton = new GestureButtonStates(false); + buttonOneGestureButton = new GestureButtonStates(false); + buttonTwoGestureButton = new GestureButtonStates(false); + startMenuGestureButton = new GestureButtonStates(false); + } + protected override void Update() + { + CheckTriggerGesture(); + CheckGripGesture(); + CheckTouchpadGesture(); + CheckButtonOneGesture(); + CheckButtonTwoGesture(); + CheckStartMenuGesture(); + } + #endregion + + #region GestureControllerChecks + /// + /// General call for checking if a gesture button has reached it's press/release state + /// + /// The parameter that holds the state of the gesture button + /// The Gesture that contains the gesture info of what needs to be checked + /// What actions to take when the gesture-button reaches the press state + /// What actions to take when the gesture-button reaches the release state + protected virtual void CheckGestureButton(ref GestureButtonStates givenGestureButton, Gesture givenGesture, Action buttonPressAction, Action buttonReleaseAction) + { + if (givenGesture == null) + return; + + CheckGestureButtonPressed(ref givenGestureButton, givenGesture, buttonPressAction); + CheckGestureButtonReleased(ref givenGestureButton, givenGesture, buttonReleaseAction); + + //Save frame information + givenGestureButton.wasPressedLastFrame = givenGestureButton.wasPressedThisFrame; + givenGestureButton.wasReleasedLastFrame = givenGestureButton.wasReleasedThisFrame; + } + + protected virtual void CheckGestureButtonPressed(ref GestureButtonStates givenGestureButton, Gesture givenGesture, Action buttonPressAction) + { + // Pressed start + givenGestureButton.wasPressedThisFrame = givenGesture.IsGestureOccuring(controllerHandId); + + if (givenGestureButton.wasPressedThisFrame && !givenGestureButton.wasPressedLastFrame && !givenGestureButton.isGestureButtonPressed) + { + givenGestureButton.isGestureButtonPressed = true; + + buttonPressAction(); + } + } + + protected virtual void CheckGestureButtonReleased(ref GestureButtonStates givenGestureButton, Gesture givenGesture, Action buttonReleaseAction) + { + // Pressed end + givenGestureButton.wasReleasedThisFrame = !givenGesture.IsGestureOccuring(controllerHandId); + + if (givenGestureButton.wasReleasedThisFrame && !givenGestureButton.wasReleasedLastFrame && givenGestureButton.isGestureButtonPressed) + { + givenGestureButton.isGestureButtonPressed = false; + + buttonReleaseAction(); + } + } + + protected virtual void CheckTriggerGesture() + { + CheckGestureButton(ref triggerGestureButton, triggerGesture, + () => + { + OnTriggerPressed(SetControllerEvent(ref triggerPressed, true, 1.0f)); + }, + () => + { + OnTriggerReleased(SetControllerEvent(ref triggerPressed, false, 0f)); + }); + } + + protected virtual void CheckGripGesture() + { + CheckGestureButton(ref gripGestureButton, gripGesture, + () => + { + OnGripPressed(SetControllerEvent(ref gripPressed, true, 1.0f)); + }, + () => + { + OnGripReleased(SetControllerEvent(ref gripPressed, false, 0f)); + }); + } + + protected virtual void CheckTouchpadGesture() + { + CheckGestureButton(ref touchPadGestureButton, touchpadGesture, + () => + { + OnTouchpadPressed(SetControllerEvent(ref touchpadPressed, true, 1f)); + }, + () => + { + OnTouchpadReleased(SetControllerEvent(ref touchpadPressed, false, 0f)); + }); + } + + protected virtual void CheckButtonOneGesture() + { + CheckGestureButton(ref buttonOneGestureButton, buttonOneGesture, + () => + { + OnButtonOnePressed(SetControllerEvent(ref buttonOnePressed, true, 1f)); + }, + () => + { + OnButtonOneReleased(SetControllerEvent(ref buttonOnePressed, false, 0f)); + }); + } + + protected virtual void CheckButtonTwoGesture() + { + CheckGestureButton(ref buttonTwoGestureButton, buttonTwoGesture, + () => + { + OnButtonTwoPressed(SetControllerEvent(ref buttonTwoPressed, true, 1f)); + }, + () => + { + OnButtonTwoReleased(SetControllerEvent(ref buttonTwoPressed, false, 0f)); + }); + } + + protected virtual void CheckStartMenuGesture() + { + CheckGestureButton(ref startMenuGestureButton, startMenuGesture, + () => + { + OnStartMenuPressed(SetControllerEvent(ref startMenuPressed, true, 1f)); + }, + () => + { + OnStartMenuReleased(SetControllerEvent(ref startMenuPressed, false, 0f)); + }); + } + #endregion + } +} diff --git a/Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs.meta b/Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs.meta new file mode 100644 index 0000000..0c67cd2 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 08224c2548b75214e81b837a73fae0f9 +timeCreated: 1546447659 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs b/Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs new file mode 100644 index 0000000..ab9aa3e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using CharlesRiverAnalytics.Virtuoso.Gestures; +using VRTK; + + +namespace CharlesRiverAnalytics.Virtuoso +{ + /// + /// Event Payload - provides the object the gesture is attached to + /// whenever a gesture event happens + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class GestureEventArgs : EventArgs + { + public GameObject gestureObject; + + public string gestureName; + + public SDK_BaseGestureLibrary.Hand gestureHand; + + public GestureEventArgs(GameObject gameObject, string name, SDK_BaseGestureLibrary.Hand hand) + { + gestureObject = gameObject; + gestureName = name; + gestureHand = hand; + } + } + + /// + /// Event Payload + /// + /// this object + /// + public delegate void GestureEventHandler(object sender, GestureEventArgs e); + + public enum GestureEvents + { + GestureStarted, + GestureEnded + } + + /// + /// Allows the user to make gestures with events going off when the user first makes the gesture + /// and when they end it. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class GestureInteraction : VirtuosoEvent + { + #region PublicVariables + public string gestureName; + public Gesture gesture; + #endregion + + #region PrivateVariables + private bool gestureHasStartedLeft = false; + private bool gestureHasStartedRight = false; + private bool hasGestureLibraryFinishedSetup = false; + private const float LIBRARY_TIME_CHECK_SECONDS = 1.0f; + #endregion + + #region EventVariables + // Emitted when the gesture is first done by either hand + public event GestureEventHandler GestureStarted; + + // Emitted when the gesture finishes by either hand + public event GestureEventHandler GestureEnded; + + public virtual void OnGestureStarted(GestureEventArgs e) + { + if (GestureStarted != null) + { + GestureStarted(this, e); + } + } + + public virtual void OnGestureEnded(GestureEventArgs e) + { + if (GestureEnded != null) + { + GestureEnded(this, e); + } + } + #endregion + + #region HelperMethods + /// + /// Continually checks for Gesture Library attached to the active Hand SDK. This must happen after + /// the first frame or else the InteractGesture script will crash on the first frame as the Gesture + /// Library may not be active in the scene yet. + /// + protected IEnumerator CheckForGestureLibrary() + { + // Don't let this occur before the first frame as the SDK will not be fully set up + yield return new WaitForEndOfFrame(); + + GameObject currentHandSDK = VRTK_SDKManager.instance.loadedSetup.actualHand; + + if (currentHandSDK == null) + { + Debug.LogError("No Hand SDK is currently seen by active SDK. Please make sure that Hand is filled in the SDK Setup.", this); + + enabled = false; + + yield break; + } + + while (!hasGestureLibraryFinishedSetup) + { + if (currentHandSDK.activeInHierarchy) + { + hasGestureLibraryFinishedSetup = true; + + yield break; + } + + yield return new WaitForSecondsRealtime(LIBRARY_TIME_CHECK_SECONDS); + } + } + + private void WaitForSDKSetup(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + StartCoroutine(CheckForGestureLibrary()); + } + #endregion + + #region UnityFunctions + protected void Awake() + { + VRTK_SDKManager.SubscribeLoadedSetupChanged(WaitForSDKSetup); + } + + protected void OnApplicationQuit() + { + VRTK_SDKManager.UnsubscribeLoadedSetupChanged(WaitForSDKSetup); + } + + protected void LateUpdate() + { + if (hasGestureLibraryFinishedSetup) + { + bool isLeftGesturing = gesture.IsGestureOccuring(SDK_BaseGestureLibrary.Hand.Left); + bool isRightGesturing = gesture.IsGestureOccuring(SDK_BaseGestureLibrary.Hand.Right); + + // Check if the left hand started a gesture + if (isLeftGesturing && !gestureHasStartedLeft) + { + OnGestureStarted(new GestureEventArgs(gameObject, gestureName, SDK_BaseGestureLibrary.Hand.Left)); + + gestureHasStartedLeft = true; + } + // Check if the left hand stopped doing a gesture + else if (!isLeftGesturing && gestureHasStartedLeft) + { + OnGestureEnded(new GestureEventArgs(gameObject, gestureName, SDK_BaseGestureLibrary.Hand.Left)); + + gestureHasStartedLeft = false; + } + + // Check if the right hand started a gesture + if (isRightGesturing && !gestureHasStartedRight) + { + OnGestureStarted(new GestureEventArgs(gameObject, gestureName, SDK_BaseGestureLibrary.Hand.Right)); + + gestureHasStartedRight = true; + } + // Check if the right hand stopped a gesture + else if (!isRightGesturing && gestureHasStartedRight) + { + OnGestureEnded(new GestureEventArgs(gameObject, gestureName, SDK_BaseGestureLibrary.Hand.Right)); + + gestureHasStartedRight = false; + } + } + } + #endregion + } +} diff --git a/Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs.meta b/Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs.meta new file mode 100644 index 0000000..85786aa --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f18ea628d2a12f748b7a6f33b8a6811b +timeCreated: 1544459946 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK.meta b/Assets/VIRTUOSO/Scripts/HapticSDK.meta new file mode 100644 index 0000000..2038dfc --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 11b57922b469158438f96431cde94dcf +folderAsset: yes +timeCreated: 1551902009 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs new file mode 100644 index 0000000..8adc613 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs @@ -0,0 +1,450 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// This monobehavior is attached to the GameObject for the neccessary body and responsible for determining + /// where on that body part a hit has taken place in the body coordinate space. This object must also be + /// set up to have the correct polar axis to get the expected behavior with haptic patterns. + /// + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [RequireComponent(typeof(CapsuleCollider)), ExecuteInEditMode] + public class BodyCoordinate : MonoBehaviour + { + #region PublicVariables + [Tooltip("Automatically set if using on a rigged character. Otherwise, set what portion of the body this is suppose to be.")] + public HumanBodyBones attachedBody; + [Tooltip("The axis (local space) at which 0 degrees starts for calculating hit direction when looking down the height of the collider.")] + public Vector3 polarAxis = Vector3.right; + [Tooltip("When true, the body coordinate will traverse a pattern in a Counter-Clockwise direction.")] + public bool invertAngleDirection = false; + [Tooltip("Select this if you would like to see the Polar Axis on the GameObject without having it selected.")] + public bool drawGizmoUnselected = false; + #endregion + + #region PrivateVariables + private CapsuleCollider capCollider; + private HapticManager manager; + private Vector3 distalColliderPosition; + private Vector3 proximalColliderPosition; + // If the collider's proximal end is actually the distal (due to the way the transform are set up), then mark this as true + private bool isHeightInverted = false; +#if UNITY_EDITOR + private const float ARROW_SIZE_MULTIPLIER = .75f; + private const float GIZMO_SPHERE_SIZE = .005f; +#endif + #endregion + + #region PublicAPI + public Vector3 ProximalPosition + { + get + { + if (isHeightInverted) + { + return distalColliderPosition; + } + else + { + return proximalColliderPosition; + } + } + } + + public Vector3 DistalPosition + { + get + { + if (isHeightInverted) + { + return proximalColliderPosition; + } + else + { + return distalColliderPosition; + } + } + } + + /// + /// Used to determine the normalized height and hit angle on the collider + /// + /// The position in world space + /// The BodyCoordinateHit that contains the normalized height and angle on the capsule + public BodyCoordinateHit CalculateBodyCoordinateHitFromPosition(Vector3 collisionPoint) + { + Vector3 localHitPosition = transform.InverseTransformPoint(collisionPoint); + + float hitHeight = CalculateNormalizedHitHeightFromLocalPosition(localHitPosition); + float hitDegree = CalculateDegreeOfCollisionFromPosition(collisionPoint); + + return new BodyCoordinateHit(hitHeight, hitDegree); + } + + /// + /// Calculates the world position of a BodyCoordinateHit. + /// + /// The height and angle of the collider to find the position + /// If true, the position should account for the circle ends on the capsule + /// The world position based on the collider and provided body hit + public Vector3 CalculatePositionFromBodyCoordinateHit(BodyCoordinateHit bodyHit, bool accountForCapsule = false) + { + float heightPosition = CalculatePositionFromNormalizedHeight(bodyHit.hitHeight); + Vector3 radius = CalculatePositionFromAngle(bodyHit, heightPosition, accountForCapsule); + + switch (capCollider.direction) + { + // X Axis + case 0: + return new Vector3(heightPosition, radius.y, radius.z); + // Y Axis + case 1: + return new Vector3(radius.x, heightPosition, radius.z); + // Z Axis + case 2: + return new Vector3(radius.x, radius.y, heightPosition); + default: + return Vector3.zero; + } + } + #endregion + + #region BodyCoordinateMethods + private float CalculateNormalizedHeight(float value, float extremeValueOne, float extremeValueTwo) + { + // Comparisons with values less than 0 can screw things up, so shift everything up by the lowest value + float minVal = Mathf.Abs(Mathf.Min(value, extremeValueOne, extremeValueTwo)); + value += minVal; + extremeValueOne += minVal; + extremeValueTwo += minVal; + + float normalizedValue; + + if (extremeValueOne < extremeValueTwo) + { + normalizedValue = Utilities.VirtMath.Normalize(value, extremeValueOne, extremeValueTwo); + } + else + { + normalizedValue = Utilities.VirtMath.Normalize(value, extremeValueTwo, extremeValueOne); + } + + if (isHeightInverted) + { + return (1.0f - normalizedValue); + } + else + { + return normalizedValue; + } + } + + private float CalculateNormalizedHitHeightFromLocalPosition(Vector3 localHitPosition) + { + float hitHeight = 0.0f; + + // Use the direction of the collider to calculate the normalized height in local space + switch (capCollider.direction) + { + // X Axis + case 0: + hitHeight = CalculateNormalizedHeight(localHitPosition.x, proximalColliderPosition.x, distalColliderPosition.x); + + break; + // Y Axis + case 1: + hitHeight = CalculateNormalizedHeight(localHitPosition.y, proximalColliderPosition.y, distalColliderPosition.y); + + break; + // Z Axis + case 2: + hitHeight = CalculateNormalizedHeight(localHitPosition.z, proximalColliderPosition.z, distalColliderPosition.z); + + break; + } + + return Mathf.Clamp01(hitHeight); + } + + private float CalculatePositionFromNormalizedHeight(float normalizedHeight) + { + float colliderStartPoint = 0; + + switch (capCollider.direction) + { + // X Axis + case 0: + colliderStartPoint = transform.TransformPoint(ProximalPosition).x; + break; + // Y Axis + case 1: + colliderStartPoint = transform.TransformPoint(ProximalPosition).y; + break; + // Z Axis + case 2: + colliderStartPoint = transform.TransformPoint(ProximalPosition).z; + break; + } + + if (isHeightInverted) + { + colliderStartPoint -= normalizedHeight * capCollider.height; + } + else + { + colliderStartPoint += normalizedHeight * capCollider.height; + } + + return colliderStartPoint; + } + + private Vector3 CalculatePositionFromAngle(BodyCoordinateHit bodyHit, float heightPosition = 0.0f, bool positionOnCapsule = false) + { + // Short circuit, if the height is at the extremes, then it will be at the poles + if (positionOnCapsule) + { + if (bodyHit.hitHeight == 0.0f) + { + return transform.TransformPoint(ProximalPosition); + } + else if (bodyHit.hitHeight == 1.0f) + { + return transform.TransformPoint(DistalPosition); + } + } + + // Calculate the directional vector towards the hit point + Vector3 rotationDirection = Vector3.zero; + + if (invertAngleDirection) + { + bodyHit.hitAngle = 360 - bodyHit.hitAngle; + } + + switch (capCollider.direction) + { + // X Axis + case 0: + rotationDirection = Quaternion.AngleAxis(bodyHit.hitAngle, transform.right) * polarAxis; + break; + // Y Axis + case 1: + rotationDirection = Quaternion.AngleAxis(bodyHit.hitAngle, transform.up) * polarAxis; + break; + // Z Axis + case 2: + rotationDirection = Quaternion.AngleAxis(bodyHit.hitAngle, transform.forward) * polarAxis; + break; + } + + // Account for the angle of the collider + Vector3 positionByAngle = rotationDirection * capCollider.radius; + + // Since the capsule has two circles at the ends, make sure the position is along the curve on the circle if required + if (positionOnCapsule) + { + // Don't bother doing this if new height is not at one of the circles extremes + float radiusNormalizedPerHeight = capCollider.radius / capCollider.height; + + if (bodyHit.hitHeight >= radiusNormalizedPerHeight && bodyHit.hitHeight <= (1 - radiusNormalizedPerHeight)) + { + return transform.TransformPoint(positionByAngle); + } + + // Get the transform that is aligned with this point along the axis + Vector3 leveledTransform = transform.TransformPoint(capCollider.center); + + switch (capCollider.direction) + { + case 0: // X Axis + leveledTransform = new Vector3(heightPosition, leveledTransform.y, leveledTransform.z); + positionByAngle = new Vector3(heightPosition, positionByAngle.y, positionByAngle.z); + break; + case 1: // Y Axis + leveledTransform = new Vector3(leveledTransform.x, heightPosition, leveledTransform.z); + positionByAngle = new Vector3(positionByAngle.x, heightPosition, positionByAngle.z); + break; + case 2: // Z Axis + leveledTransform = new Vector3(leveledTransform.x, leveledTransform.y, heightPosition); + positionByAngle = new Vector3(positionByAngle.x, positionByAngle.y, heightPosition); + break; + } + + // Get the direction from the point towards the transform + Vector3 directionTowardsCapsule = leveledTransform - positionByAngle; + + RaycastHit[] hitInfo; + + // Shoot a ray to find the edge of the capsule collider in the calculated direction + hitInfo = Physics.RaycastAll(positionByAngle, directionTowardsCapsule.normalized, .5f); + + for (int n = 0; n < hitInfo.Length; n++) + { + if (hitInfo[n].collider.gameObject.name == "Capsule") + { + // Move the positionByAngle in the direction towards the transform at the proper distance + positionByAngle += (directionTowardsCapsule.normalized * hitInfo[n].distance); + } + } + } + + return transform.TransformPoint(positionByAngle); + } + + private float CalculateDegreeOfCollisionFromPosition(Vector3 hitPosition) + { + Vector3 hitDirection = hitPosition - transform.position; + float signAngle = 0.0f; + + switch (capCollider.direction) + { + // X Axis + case 0: + signAngle = Utilities.VirtMath.AngleSigned(transform.TransformDirection(polarAxis), hitDirection, transform.right); + + break; + // Y Axis + case 1: + signAngle = Utilities.VirtMath.AngleSigned(transform.TransformDirection(polarAxis), hitDirection, transform.up); + + break; + // Z Axis + case 2: + signAngle = Utilities.VirtMath.AngleSigned(transform.TransformDirection(polarAxis), hitDirection, transform.forward); + + break; + } + + // Make sure a value between 0 and 360 is returned + if (signAngle < 0) + { + signAngle += 360; + } + + if (invertAngleDirection) + { + signAngle = 360 - signAngle; + } + + return signAngle; + } + + private void CalculateColliderEndPoints(Vector3 directionOfCollider) + { + // If the height is less than double the radius, then it acts as a sphere + float halfLengthOfCollider = (capCollider.height >= 2 * capCollider.radius) ? capCollider.height / 2f : capCollider.radius; + + proximalColliderPosition = capCollider.center - (directionOfCollider * halfLengthOfCollider); + distalColliderPosition = capCollider.center + (directionOfCollider * halfLengthOfCollider); + + // Depending on the transform that the collider is attached to, the proximal end may actually be closer to the transform and + // therefore be the distal end, so mark that as inverted so that the normalized height value will be correct + float proximalDistanceToTransformOrigin = Vector3.Distance(proximalColliderPosition, Vector3.zero); + float distalDistanceToTransformOrigin = Vector3.Distance(distalColliderPosition, Vector3.zero); + + isHeightInverted = (distalDistanceToTransformOrigin < proximalDistanceToTransformOrigin); + } + #endregion + + #region UnityFunctions + void Awake() + { + capCollider = GetComponent(); + + manager = FindObjectOfType(); + + // Calculate the local positions of the ends of the collider + switch (capCollider.direction) + { + // X Axis + case 0: + CalculateColliderEndPoints(transform.InverseTransformDirection(transform.right)); + break; + // Y Axis + case 1: + CalculateColliderEndPoints(transform.InverseTransformDirection(transform.up)); + break; + // Z Axis + case 2: + CalculateColliderEndPoints(transform.InverseTransformDirection(transform.forward)); + break; + } + } + + private void OnCollisionEnter(Collision collision) + { + BodyCoordinateHit bodyHit = CalculateBodyCoordinateHitFromPosition(collision.contacts[0].point); + HapticPatternCollisionHolder hitPattern = collision.gameObject.GetComponent(); + + if (hitPattern != null) + { + manager.BodyPartHit(attachedBody, bodyHit, hitPattern.GetHapticPattern()); + } + else + { + manager.BodyPartHit(attachedBody, bodyHit); + } + } + +#if UNITY_EDITOR + private void Update() + { + if(transform.hasChanged) + { + transform.localScale = Vector3.one; + } + } + + private void OnDrawGizmos() + { + if (drawGizmoUnselected) + { + DrawGizmo(); + } + } + + private void OnDrawGizmosSelected() + { + DrawGizmo(); + } + + private void DrawGizmo() + { + Handles.color = Color.cyan; + Handles.ArrowHandleCap( + 0, + transform.TransformPoint(capCollider.center), + transform.rotation * ((polarAxis != Vector3.zero) ? Quaternion.LookRotation(polarAxis) : Quaternion.identity), + HandleUtility.GetHandleSize(transform.position) * ARROW_SIZE_MULTIPLIER, + EventType.Repaint); + + if (isHeightInverted) + { + Gizmos.DrawSphere(transform.TransformPoint(capCollider.center), GIZMO_SPHERE_SIZE); + + Gizmos.color = Color.red; + Gizmos.DrawSphere(transform.TransformPoint(distalColliderPosition), GIZMO_SPHERE_SIZE); + + Gizmos.color = Color.blue; + Gizmos.DrawSphere(transform.TransformPoint(proximalColliderPosition), GIZMO_SPHERE_SIZE); + } + else + { + Gizmos.color = Color.red; + Gizmos.DrawSphere(transform.TransformPoint(proximalColliderPosition), GIZMO_SPHERE_SIZE); + + Gizmos.color = Color.blue; + Gizmos.DrawSphere(transform.TransformPoint(distalColliderPosition), GIZMO_SPHERE_SIZE); + } + } +#endif + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs.meta new file mode 100644 index 0000000..ccc31a8 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b723a283540a41e48a91402afa4a18a7 +timeCreated: 1551902017 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs new file mode 100644 index 0000000..c9012e2 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Structure that holds the normalized height and the angle of a hit. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public struct BodyCoordinateHit + { + #region PublicVariables + [Range(0, 1)] + public float hitHeight; + [Range(0, 360)] + public float hitAngle; + #endregion + + #region Constructors + public BodyCoordinateHit(float height, float angle) + { + hitHeight = height; + hitAngle = angle; + } + + public BodyCoordinateHit(BodyCoordinateHit otherHit) + { + hitHeight = otherHit.hitHeight; + hitAngle = otherHit.hitAngle; + } + #endregion + + #region DefaultOverrides + public override string ToString() + { + return "(" + hitHeight + ", " + hitAngle + ")"; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs.meta new file mode 100644 index 0000000..ca79b8a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7e152d57a0c4b42498f05adc2d92b9b7 +timeCreated: 1553107616 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs new file mode 100644 index 0000000..1858e57 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// The Body Coordinate Space is a section on a body part that can be triggered by some haptic + /// actuator. It uses the same body coordinate space of a normalized height and angle. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [Serializable] + public class BodyCoordinateSpace + { + #region PublicVariables + [Range(0, 1), Delayed] + public float startHeight = 0; + [Range(0, 1), Delayed] + public float endHeight = 1; + [Range(0, 360), Delayed] + public float startAngle = 0; + [Range(0, 360), Delayed] + public float endAngle = 360; + #endregion + + #region PublicAPI + public bool HitInsideSpace(BodyCoordinateHit hitLocation) + { + if (hitLocation.hitHeight >= startHeight && + hitLocation.hitHeight <= endHeight && + hitLocation.hitAngle >= startAngle && + hitLocation.hitAngle <= endAngle) + { + return true; + } + else + { + return false; + } + } + #endregion + + #region Unity Functions + public void OnValidate() + { + // StartHeight always needs to be less, so flip these values if that's not the case + if (startHeight > endHeight) + { + float tempHeight = endHeight; + + endHeight = startHeight; + startHeight = tempHeight; + } + + // Similiarly, StartAngle also needs to be less than the end angle + if (startAngle > endAngle) + { + float tempAngle = endAngle; + + endAngle = startAngle; + startAngle = tempAngle; + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs.meta new file mode 100644 index 0000000..8ff6419 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2c1605f0da651ca4fab41bfe2e72083c +timeCreated: 1551986059 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices.meta new file mode 100644 index 0000000..83750a6 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f08f403aa2e1c040a05fb2c8018d26f +folderAsset: yes +timeCreated: 1551985383 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs new file mode 100644 index 0000000..7540cce --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs @@ -0,0 +1,119 @@ +#if VRTK_DEFINE_SDK_BHAPTICS +using Bhaptics.Tact.Unity; +using System; +#endif +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// BHaptics Haptic Device. The BHaptics has several actuators on their devices that can affect + /// multiple body parts. This script can target any body part with the position variable. Additionally, + /// a mapping needs to be provided that lets a specific physical actuator know which body coordinate space + /// they must react to. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// +#if VRTK_DEFINE_SDK_BHAPTICS + [HapticSystem("Bhaptics", "TACTAL", "BodyCoordinates/Head", Pos.Head, "DeviceMappings/BHapticsFaceMapping")] + [HapticSystem("Bhaptics", "TACTOT Front", "BodyCoordinates/ChestFront", Pos.VestFront, "DeviceMappings/BHapticsFrontVestMapping")] + [HapticSystem("Bhaptics", "TACTOT Back", "BodyCoordinates/ChestBack", Pos.VestBack, "DeviceMappings/BHapticsBacktVestMapping")] + [HapticSystem("Bhaptics", "Left TACTOSY", "BodyCoordinates/LeftForearm", Pos.LeftArm, "DeviceMappings/BHapticsLeftWristMapping")] + [HapticSystem("Bhaptics", "Right TACTOSY", "BodyCoordinates/RightForearm", Pos.RightArm, "DeviceMappings/BHapticsRightWristMapping")] + [HapticSystem("Bhaptics", "Left TACTOSY Hand", "BodyCoordinates/LeftHand", Pos.LeftHand)] + [HapticSystem("Bhaptics", "Right TACTOSY Hand", "BodyCoordinates/RightHand", Pos.RightHand)] + [HapticSystem("Bhaptics", "Left TACTOSY Foot", "BodyCoordinates/LeftFoot", Pos.LeftFoot)] + [HapticSystem("Bhaptics", "Right TACTOSY Foot", "BodyCoordinates/RightFoot", Pos.RightFoot)] +#endif + public class BHapticsDevice : HapticDevice + { + #region PublicVariables +#if VRTK_DEFINE_SDK_BHAPTICS + [Tooltip("The position tag for where the device is attached to.")] + public Pos devicePosition; +#endif + public ScriptableDeviceMapping bhapticsMapping; + #endregion + + #region PrivateVariables +#if VRTK_DEFINE_SDK_BHAPTICS + private TactSource tactSource; +#endif + private const int HAPTIC_ACTUATOR_COUNT = 20; + // The DotPoint array that will be filled to play the haptic patterns + private byte[] hapticBytes = new byte[HAPTIC_ACTUATOR_COUNT]; + #endregion + + #region HapticDeviceImplementation + protected override void CancelHaptics() + { +#if VRTK_DEFINE_SDK_BHAPTICS + tactSource.Stop(); +#endif + // Clear the array + hapticBytes = new byte[HAPTIC_ACTUATOR_COUNT]; + } + + protected override void StartHaptics(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, float intensity) + { + int hitIndex = affectedBodyPart.BodyCoordinateHitIndex(bodyPart, hitLocation); + + // If -1 is returned, then the hitLocation is not in the CoordinateSpace that the device is attached to + if (hitIndex == -1) + { + return; + } + + // Assign the intensity value for each of the mapped effector + for (int n = 0; n < bhapticsMapping.mapping[hitIndex].indexMapping.Length; n++) + { + // The intensity needs to be between 0 and 100, so convert the intensity to that range + hapticBytes[bhapticsMapping.mapping[hitIndex].indexMapping[n]] = (byte)(intensity * 100); + } + + // Assign the intensity values and play +#if VRTK_DEFINE_SDK_BHAPTICS + tactSource.DotPoints = hapticBytes; + tactSource.Play(); +#endif + + // Clear the array since it will need different values on the next frame + hapticBytes = new byte[HAPTIC_ACTUATOR_COUNT]; + } + + public override void ApplyDefaultData(HapticSystemAttribute hapticSystemInfo) + { + base.ApplyDefaultData(hapticSystemInfo); + +#if VRTK_DEFINE_SDK_BHAPTICS + devicePosition = (Pos) Enum.Parse(typeof(Pos), hapticSystemInfo.AdditionalData[0].ToString()); +#endif + + if (hapticSystemInfo.AdditionalData.Length > 1) + { + ScriptableDeviceMapping mapping = Resources.Load(hapticSystemInfo.AdditionalData[1] as string); + + if (mapping != null) + { + bhapticsMapping = mapping; + } + } + } + #endregion + + #region Unity Functions + protected override void Start() + { + base.Start(); + +#if VRTK_DEFINE_SDK_BHAPTICS + tactSource = gameObject.AddComponent(); + + tactSource.FeedbackType = FeedbackType.DotMode; + tactSource.Position = devicePosition; + tactSource.TimeMillis = hapticDuration; +#endif + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs.meta new file mode 100644 index 0000000..836d6ef --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b66cbf23014e0364fb0c144eb87cb5ba +timeCreated: 1553613258 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs new file mode 100644 index 0000000..e035ac3 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs @@ -0,0 +1,426 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// EventArgs for when a haptic pulse is sent out. Allows listeners to know where the haptic pulse is felt + /// as well as the intensity of the feedback. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), April 2019 + /// + public class HapticFeedbackEventArgs : EventArgs + { + public HumanBodyBones bodyPart; + public BodyCoordinateHit hitLocation; + public float feedbackIntensity; + + public HapticFeedbackEventArgs(HumanBodyBones body, BodyCoordinateHit hit, float intense) + { + bodyPart = body; + hitLocation = hit; + feedbackIntensity = intense; + } + } + + /// + /// Generalized class for haptic devices. A specific device must specify how it triggers a haptic pulse + /// in a single frame and how to cancle that pulse. The developer must then specify in the editor what + /// body parts the device instance will affect in terms of the body coordinate system. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public abstract class HapticDevice : MonoBehaviour + { + #region PublicVariables + public ScriptableBodyCoordinate affectedBodyPart; + [Tooltip("The amount of time that a single haptic pulse should take (in ms)")] + [Range(20, 10000)] + public int hapticDuration = 100; + #endregion + + #region ProtectedVariables + protected HapticManager manager; + [SerializeField] + protected HapticSystemAttribute hapticSystemInfo; + #endregion + + #region PrivateVariables + private ScriptableHapticPattern patternPlaying; + private HumanBodyBones bodyPartHit; + private float patternTime = 0.0f; + #endregion + + #region Events + public event EventHandler HapticFeedbackPlayed; + + public virtual void OnHapticFeedbackPlayed(HapticFeedbackEventArgs e) + { + if (HapticFeedbackPlayed != null) + { + HapticFeedbackPlayed(this, e); + } + } + #endregion + + #region PublicAPI + /// + /// A single haptic pulse that is triggered by an object hitting a body part that has been + /// set up to recieve haptic events. + /// + /// The body part of the hit + /// The body coordinate system hit + /// The intensity to play the haptic vibration + public void TriggerDevice(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, float intensity) + { + if (affectedBodyPart.HitInsideAffectedArea(bodyPart, hitLocation)) + { + StartHaptics(bodyPart, hitLocation, intensity); + } + } + + /// + /// Plays a pattern that is triggered by an object hitting a body part that has been + /// set up to recieve haptic events. + /// + /// The body part of the hit + /// The body coordinate system hit + /// The haptic pattern + public void TriggerDevice(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, ScriptableHapticPattern hapticPattern) + { + if(bodyPart == affectedBodyPart.affectableBodyParts) + { + hapticPattern.hitOffset = hitLocation; + + PlayPattern(bodyPart, hapticPattern); + } + } + + /// + /// Starts playing a pattern on a given bodypart + /// + /// The body part to play the pattern on + /// The haptic pattern to play + public void PlayPattern(HumanBodyBones bodyLocation, ScriptableHapticPattern pattern) + { + patternPlaying = pattern; + bodyPartHit = bodyLocation; + patternTime = 0.0f; + + if (patternPlaying.playbackTiming == PlaybackTiming.Custom) + { + StartCoroutine(Play()); + } + } + + /// + /// Stops playing a pattern on a specific body part. + /// + /// The body part that is current playing a pattern + public void StopPattern(HumanBodyBones bodyLocation) + { + if(bodyLocation == affectedBodyPart.affectableBodyParts) + { + CancelHaptics(); + + ResetHapticPattern(); + } + } + #endregion + + #region PatternPlayingMethods + protected IEnumerator Play() + { + while (patternPlaying != null) + { + bool keepPlaying = PlayPatternWithTiming(patternPlaying.customPlaybackTiming); + + // Wait that set amount of time + if (keepPlaying) + { + yield return new WaitForSeconds(patternPlaying.customPlaybackTiming); + } + } + } + + /// + /// Plays the current haptic pattern with the given frame time. + /// + /// The time adjustment based on either DeltaTime, FixedDeltaTime, or custom + /// False when the timing of the pattern is over + protected bool PlayPatternWithTiming(float frameTime) + { + // Stop playing the pattern if it is over + if (patternTime > patternPlaying.EndTime) + { + CancelHaptics(); + + ResetHapticPattern(); + + return false; + } + + // Get the current pattern value hit locations and intensity + BodyCoordinateHit[] hits = patternPlaying.GetHitLocationsAtCurrentTime(patternTime); + float[] intensities = patternPlaying.GetIntenstiyValuesAtCurrentTime(patternTime); + + // Tell the device to play + PlayHapticList(bodyPartHit, hits, intensities); + + // Update the timing information + patternTime += frameTime; + + return true; + } + + protected void ResetHapticPattern() + { + if(patternPlaying != null) + { + patternPlaying.hitOffset = new BodyCoordinateHit(); + } + + patternTime = 0; + patternPlaying = null; + } + + protected void PlayHapticList(HumanBodyBones bodyPartHit, BodyCoordinateHit[] hitLocations, float[] intensities) + { + for (int n = 0; n < hitLocations.Length; n++) + { + // Ignore any pulses that have negative infinity since those are marked to be skipped + if(float.IsNegativeInfinity(hitLocations[n].hitAngle) || float.IsNegativeInfinity(hitLocations[n].hitHeight)) + { + continue; + } + + StartHaptics(bodyPartHit, hitLocations[n], intensities[n]); + + // Send an event with the haptic info you are playing + OnHapticFeedbackPlayed(new HapticFeedbackEventArgs(bodyPartHit, hitLocations[n], intensities[n])); + } + } + + protected void ResolvePatternConflicts(ref BodyCoordinateHit[] hits, ref float[] intensities) + { + // Must have a valid pattern assigned + if (patternPlaying != null) + { + int[] indiceArray = new int[hits.Length]; + Dictionary> indiceCounter = new Dictionary>(); + + // Collisions are detected based on hitting the same coordinate space, so grab all the + // needed indices from all the hits + for (int n = 0; n < hits.Length; n++) + { + indiceArray[n] = affectedBodyPart.BodyCoordinateHitIndex(bodyPartHit, hits[n]); + } + + // Iterate through the indices, saving the duplicates + for (int n = 0; n < indiceArray.Length; n++) + { + if (indiceCounter.ContainsKey(indiceArray[n])) + { + indiceCounter[indiceArray[n]].Add(n); + } + else + { + indiceCounter[indiceArray[n]] = new List + { + n + }; + } + } + + // Iterate throught keyes, lists with more than 1 key in the list are the duplicates + foreach (KeyValuePair> item in indiceCounter) + { + if (item.Value.Count > 1) + { + float adjustedIntensityValue = 0; + + // Calculate the intensity from multiple collisions + switch (patternPlaying.collisionResolution) + { + // New intensity will be the smallest intensity value + case PatternCollisionResolution.Min: + float minValue = float.MaxValue; + + for (int n = 0; n < item.Value.Count; n++) + { + if (intensities[item.Value[n]] < minValue) + { + minValue = intensities[item.Value[n]]; + } + } + + adjustedIntensityValue = minValue; + + break; + // New intensity will be the greatest intensity value + case PatternCollisionResolution.Max: + float maxValue = float.MinValue; + + for (int n = 0; n < item.Value.Count; n++) + { + if (intensities[item.Value[n]] > maxValue) + { + maxValue = intensities[item.Value[n]]; + } + } + + adjustedIntensityValue = maxValue; + + break; + // New intensity will be the average of all the intensity value + case PatternCollisionResolution.Average: + float average = 0; + + for (int n = 0; n < item.Value.Count; n++) + { + average += intensities[item.Value[n]]; + } + + adjustedIntensityValue = average / item.Value.Count; + + break; + // New intensity will be calculated by adding all the intensity values + case PatternCollisionResolution.Add: + float sum = 0; + + for (int n = 0; n < item.Value.Count; n++) + { + sum += intensities[item.Value[n]]; + } + + adjustedIntensityValue = sum; + break; + // New intensity will be calculated by multiplying all the intensity values + case PatternCollisionResolution.Multiply: + float product = 0; + + for (int n = 0; n < item.Value.Count; n++) + { + product *= intensities[item.Value[n]]; + } + + adjustedIntensityValue = product; + break; + // New intensity will be determined by a specific curve, otherwise it will default to the first curve in the list + case PatternCollisionResolution.CurvePriority: + if (item.Value.Contains(patternPlaying.curvePriorityIndex)) + { + adjustedIntensityValue = intensities[patternPlaying.curvePriorityIndex]; + } + else + { + adjustedIntensityValue = intensities[0]; + } + + break; + } + + adjustedIntensityValue = Mathf.Clamp01(adjustedIntensityValue); + + // Apply the calculated intensity back to the array + for (int n = 0; n < item.Value.Count; n++) + { + intensities[item.Value[n]] = adjustedIntensityValue; + } + } + } + } + } + + public virtual void ApplyDefaultData(HapticSystemAttribute hapticSystemAtt) + { + // Check to see if the first data point is a BodyCoordinateSystem + ScriptableBodyCoordinate bodyCoordinate = Resources.Load(hapticSystemAtt.AffectedBodyFileLocation); + + if (bodyCoordinate != null) + { + affectedBodyPart = bodyCoordinate; + } + + hapticSystemInfo = hapticSystemAtt; + } + #endregion + + #region AbstractMethods + /// + /// How the device plays a single haptic pulse + /// + /// The hit location in the BodyCoordinate space + /// The normalized (0-1) intensity value + protected abstract void StartHaptics(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, float intensity); + + /// + /// How the device stops haptics + /// + protected abstract void CancelHaptics(); + #endregion + + #region UnityFunctions + protected virtual void Start() + { + manager = FindObjectOfType(); + + if (manager == null) + { + Debug.LogWarning("No HapticManager found in scene. Please add a Haptic Manager to the scene."); + + enabled = false; + } + else + { + manager.AddDevicePerBodyLocation(this, affectedBodyPart); + } + + // Since some types aren't serializable, use this method to rebuild them from serialized data + hapticSystemInfo.ResetAfterSerialization(); + + if (hapticSystemInfo.ConnectedSDKType != null) + { + VRTK_SDKManager.instance.LoadedSetupChanged += Instance_LoadedSetupChanged; + } + } + + protected void OnEnable() + { + ResetHapticPattern(); + } + + protected void Update() + { + if (patternPlaying != null && patternPlaying.playbackTiming == PlaybackTiming.Update) + { + PlayPatternWithTiming(Time.deltaTime); + } + } + + protected void FixedUpdate() + { + if (patternPlaying != null && patternPlaying.playbackTiming == PlaybackTiming.FixedUpdate) + { + PlayPatternWithTiming(Time.fixedDeltaTime); + } + } + + protected void OnApplicationQuit() + { + if (hapticSystemInfo.ConnectedSDKType != null) + { + VRTK_SDKManager.instance.LoadedSetupChanged -= Instance_LoadedSetupChanged; + } + } + #endregion + + protected virtual void Instance_LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + // No-op + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs.meta new file mode 100644 index 0000000..9b17d92 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b5ebc3e60221e6b4f9446685dd4e23da +timeCreated: 1551903306 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs new file mode 100644 index 0000000..ff3f29d --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs @@ -0,0 +1,71 @@ +using UnityEngine; +using VRTK; +#if VRTK_DEFINE_SDK_MANUS_VR +using Assets.ManusVR.Scripts; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Haptic device for the Manus VR Gloves. The Manus VR gloves have one actuator on each hand, so this + /// script must be used with each hand as well. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// +#if VRTK_DEFINE_SDK_MANUS_VR + [HapticSystem("ManusVR", "Left Glove", "BodyCoordinates/LeftHand", typeof(SDK_ManusVRHand), false)] + [HapticSystem("ManusVR", "Right Glove", "BodyCoordinates/RightHand", typeof(SDK_ManusVRHand), true)] +#endif + public class ManusVRDevice : HapticDevice + { + #region PublicVariables + [Tooltip("The side the glove is on.")] + public bool isRightGlove; + #endregion + + #region PrivateVariables +#if VRTK_DEFINE_SDK_MANUS_VR + private HandData handData; +#endif + #endregion + + #region HapticDeviceImplementation + protected override void CancelHaptics() + { +#if VRTK_DEFINE_SDK_MANUS_VR + Manus.ManusSetVibration(handData.Session, + isRightGlove ? device_type_t.GLOVE_RIGHT : device_type_t.GLOVE_LEFT, + 0, + (ushort)hapticDuration); +#endif + } + + protected override void StartHaptics(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, float intensity) + { +#if VRTK_DEFINE_SDK_MANUS_VR + Manus.ManusSetVibration(handData.Session, + isRightGlove ? device_type_t.GLOVE_RIGHT : device_type_t.GLOVE_LEFT, + intensity, + (ushort)hapticDuration); +#endif + } + + public override void ApplyDefaultData(HapticSystemAttribute hapticSystemInfo) + { + base.ApplyDefaultData(hapticSystemInfo); + + isRightGlove = (bool)hapticSystemInfo.AdditionalData[0]; + } + + protected override void Instance_LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + if (e.currentSetup.handSDKInfo.type == hapticSystemInfo.ConnectedSDKType) + { +#if VRTK_DEFINE_SDK_MANUS_VR + handData = e.currentSetup.handSDK.GetHandController().GetComponent(); +#endif + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs.meta new file mode 100644 index 0000000..5544568 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fc4743e317274a24a959faef230c14a5 +timeCreated: 1553632923 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs new file mode 100644 index 0000000..08b214b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs @@ -0,0 +1,84 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Haptic device for the Oculus controllers. Each has a single actuator. + /// To use this script, attach it to each controller. + /// + /// Author: Dan Duggan (dduggan@cra.com) May 2019 + /// +#if VRTK_DEFINE_SDK_OCULUS + [HapticSystem("Oculus", "Left Controller", "BodyCoordinates/LeftHand", typeof(SDK_OculusController), false)] + [HapticSystem("Oculus", "Right Controller", "BodyCoordinates/RightHand", typeof(SDK_OculusController), true)] +#endif + public class OculusDevice : HapticDevice + { + #region Public Variables + public bool isLeftController; + #endregion + + #region Control Variables +#if VRTK_DEFINE_SDK_OCULUS + // used to convert incoming pattern into something OVR can understand + protected OVRHapticsClip hapticsClipLeft; + // used to convert incoming pattern into something OVR can understand + protected OVRHapticsClip hapticsClipRight; +#endif + #endregion + + protected override void CancelHaptics() + { +#if VRTK_DEFINE_SDK_OCULUS + if (isLeftController) + { + OVRHaptics.LeftChannel.Clear(); + } + else + { + OVRHaptics.RightChannel.Clear(); + } +#endif + } + + protected override void StartHaptics(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, float intensity) + { +#if VRTK_DEFINE_SDK_OCULUS + if (isLeftController) + { + hapticsClipLeft.Reset(); + hapticsClipLeft.WriteSample((byte)(intensity * byte.MaxValue)); + OVRHaptics.LeftChannel.Preempt(hapticsClipLeft); + } + else + { + hapticsClipRight.Reset(); + hapticsClipRight.WriteSample((byte)(intensity * byte.MaxValue)); + OVRHaptics.RightChannel.Preempt(hapticsClipRight); + } +#endif + } + + public override void ApplyDefaultData(HapticSystemAttribute hapticSystemInfo) + { + base.ApplyDefaultData(hapticSystemInfo); + + isLeftController = ! (bool) hapticSystemInfo.AdditionalData[0]; + } + + protected override void Instance_LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { +#if VRTK_DEFINE_SDK_OCULUS + if (e.currentSetup.controllerSDKInfo.type == hapticSystemInfo.ConnectedSDKType) + { + OVRHaptics.Config.Load(); + hapticsClipLeft = new OVRHapticsClip(); + hapticsClipRight = new OVRHapticsClip(); + } +#endif + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs.meta new file mode 100644 index 0000000..a70ed72 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a5bfb33c069db8459f6fb5b81aa4f08 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs new file mode 100644 index 0000000..6dba9e7 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs @@ -0,0 +1,32 @@ +using System; + +namespace VRTK +{ + /// + /// Handles all of the scripting define symbols for the BHaptics SDK + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public static class SDK_BhapticsDefines + { + /// + /// The scripting define symbol for the Leap Motion SDK. + /// + public const string ScriptingDefineSymbol = SDK_ScriptingDefineSymbolPredicateAttribute.RemovableSymbolPrefix + "SDK_BHAPTICS"; + + [SDK_ScriptingDefineSymbolPredicate(ScriptingDefineSymbol, "Standalone")] + private static bool IsBHapticsInstalled() + { + Type pluginClass = VRTK_SharedMethods.GetTypeUnknownAssembly("Bhaptics.Tact.Unity.BhapticsManager"); + + if (pluginClass == null) + { + return false; + } + else + { + return true; + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs.meta new file mode 100644 index 0000000..312e230 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 66a9ad0a6d999fe4587ce730ec9c8fc0 +timeCreated: 1557173733 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs new file mode 100644 index 0000000..6d9a15b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs @@ -0,0 +1,153 @@ +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Haptic device for the Sense Gloves. It handles the actuators for a single hand so each + /// hand will need one of these scripts and a body coordinate system for each finger. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// +#if VRTK_DEFINE_SDK_SENSE_GLOVE + [HapticSystem("SenseGlove", "Left Glove", "BodyCoordinates/Finger_LeftThumb", typeof(SDK_SenseGloveHand), + "BodyCoordinates/Finger_LeftIndex", + "BodyCoordinates/Finger_LeftMiddle", + "BodyCoordinates/Finger_LeftRing", + "BodyCoordinates/Finger_LeftPinky", + false)] + [HapticSystem("SenseGlove", "Right Glove", "BodyCoordinates/Finger_RightThumb", typeof(SDK_SenseGloveHand), + "BodyCoordinates/Finger_RightIndex", + "BodyCoordinates/Finger_RightMiddle", + "BodyCoordinates/Finger_RightRing", + "BodyCoordinates/Finger_RightPinky", + true)] +#endif + public class SenseGloveDevice : HapticDevice + { + #region PublicFingerCoordinates + public ScriptableBodyCoordinate indexFingerCoordinates; + public ScriptableBodyCoordinate middleFingerCoordinates; + public ScriptableBodyCoordinate ringFingerCoordinates; + public ScriptableBodyCoordinate pinkyFingerCoordinates; + #endregion + + #region PrivateVariables + [SerializeField] + private bool isRightHand; + // Describes each finger from thumb to pinky + private bool[] fingers = new bool[5]; + private int[] intensities = new int[5]; + private int[] duration = new int[5]; +#if VRTK_DEFINE_SDK_SENSE_GLOVE + private SenseGlove_Object glove; +#endif + #endregion + + #region HapticDeviceImplementation + protected override void CancelHaptics() + { +#if VRTK_DEFINE_SDK_SENSE_GLOVE + glove.StopBuzzMotors(); + + fingers = new bool[5]; + intensities = new int[5]; + duration = new int[5]; +#endif + } + + protected override void StartHaptics(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, float intensity) + { +#if VRTK_DEFINE_SDK_SENSE_GLOVE + int fingerIndex = FindHitFingerIndex(bodyPart); + + if (fingerIndex != -1) + { + fingers[fingerIndex] = true; + intensities[fingerIndex] = (int)(intensity * 100); + duration[fingerIndex] = hapticDuration; + } + + glove.SendBuzzCmd(fingers, intensities, duration); +#endif + } + + public override void ApplyDefaultData(HapticSystemAttribute hapticSystemInfo) + { + base.ApplyDefaultData(hapticSystemInfo); + + indexFingerCoordinates = Resources.Load(hapticSystemInfo.AdditionalData[0] as string); + middleFingerCoordinates = Resources.Load(hapticSystemInfo.AdditionalData[1] as string); + ringFingerCoordinates = Resources.Load(hapticSystemInfo.AdditionalData[2] as string); + pinkyFingerCoordinates = Resources.Load(hapticSystemInfo.AdditionalData[3] as string); + + isRightHand = (bool)hapticSystemInfo.AdditionalData[4]; + } + + protected override void Instance_LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + if (e.currentSetup.handSDKInfo.type == hapticSystemInfo.ConnectedSDKType) + { +#if VRTK_DEFINE_SDK_SENSE_GLOVE + if (isRightHand) + { + glove = e.currentSetup.handSDK.GetRightHand().GetComponent(); + } + else + { + glove = e.currentSetup.handSDK.GetLeftHand().GetComponent(); + } +#endif + } + } + #endregion + + #region SenseGloveMethods + /// + /// Provides the index of the finger that was hit based on the assigned coordinate system + /// + /// The body part that was hit + /// The index that represents the finger that was hit (0 - thumb to 4 - Pinky) + private int FindHitFingerIndex(HumanBodyBones bodyPart) + { + if (affectedBodyPart?.affectableBodyParts == bodyPart) + { + return 0; + } + else if (indexFingerCoordinates?.affectableBodyParts == bodyPart) + { + return 1; + } + else if (middleFingerCoordinates?.affectableBodyParts == bodyPart) + { + return 2; + } + else if (ringFingerCoordinates?.affectableBodyParts == bodyPart) + { + return 3; + } + else if (pinkyFingerCoordinates?.affectableBodyParts == bodyPart) + { + return 4; + } + + return -1; + } + #endregion + + #region Unity Functions + protected override void Start() + { + base.Start(); + + if (manager != null) + { + manager.AddDevicePerBodyLocation(this, indexFingerCoordinates); + manager.AddDevicePerBodyLocation(this, middleFingerCoordinates); + manager.AddDevicePerBodyLocation(this, ringFingerCoordinates); + manager.AddDevicePerBodyLocation(this, pinkyFingerCoordinates); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs.meta new file mode 100644 index 0000000..4c435d8 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7fa16c992ca715c40a5a9637c48ac7f8 +timeCreated: 1553696506 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs new file mode 100644 index 0000000..1e24666 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs @@ -0,0 +1,95 @@ +using UnityEngine; +using VRTK; +using CharlesRiverAnalytics.Virtuoso.Utilities; +#if VRTK_DEFINE_STEAMVR_PLUGIN_2_0_0_OR_NEWER +using Valve.VR; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Haptic device for the Vive controllers. A controller has a single actuator so it only has to + /// activate the vibration motor on that controller. Use this script on each controller. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// +#if VRTK_DEFINE_STEAMVR_PLUGIN_1_2_1_OR_NEWER || VRTK_DEFINE_STEAMVR_PLUGIN_2_0_0_OR_NEWER + [HapticSystem("Vive", "Left Controller", "BodyCoordinates/LeftHand", typeof(SDK_SteamVRController), false)] + [HapticSystem("Vive", "Right Controller", "BodyCoordinates/RightHand", typeof(SDK_SteamVRController), true)] +#endif + public class ViveDevice : HapticDevice + { + #region PublicVariables +#if VRTK_DEFINE_STEAMVR_PLUGIN_2_0_0_OR_NEWER + public SteamVR_Action_Vibration vibration; +#endif + [Range(0, 320)] + ///How often the haptic motor should bounce (0 - 320 in hz) + public float frequency = 100.0f; + #endregion + + #region PrivateVariables + [SerializeField] + private bool isRightController; +#if VRTK_DEFINE_STEAMVR_PLUGIN_2_0_0_OR_NEWER + private SteamVR_Behaviour_Pose trackedObject; +#elif VRTK_DEFINE_STEAMVR_PLUGIN_1_2_1_OR_NEWER && VRTK_DEFINE_STEAMVR_PLUGIN_2_0_0_OR_NEWER + // The max timing of a haptic pulse in microseconds for the controller, this also determines the max intensity + private const float VIVE_VIBRATION_VALUE = 3999; + private SteamVR_TrackedObject trackedObject; +#endif + #endregion + + #region HapticDeviceOverride + protected override void StartHaptics(HumanBodyBones bodyPart, BodyCoordinateHit hitLocation, float intensity) + { +#if VRTK_DEFINE_STEAMVR_PLUGIN_2_0_0_OR_NEWER + vibration.Execute(0.0f, hapticDuration / Constants.MS_TO_SECONDS, frequency, intensity, trackedObject.inputSource); +#elif VRTK_DEFINE_STEAMVR_PLUGIN_1_2_1_OR_NEWER + SteamVR_Controller.Input((int)trackedObject.index).TriggerHapticPulse((ushort)(intensity * VIVE_VIBRATION_VALUE)); +#endif + } + + protected override void CancelHaptics() + { + // No-op + } + + public override void ApplyDefaultData(HapticSystemAttribute hapticSystemInfo) + { + base.ApplyDefaultData(hapticSystemInfo); + + isRightController = (bool)hapticSystemInfo.AdditionalData[0]; + } + + protected override void Instance_LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + if (e.currentSetup.controllerSDKInfo.type == hapticSystemInfo.ConnectedSDKType) + { + GameObject controllerGameObject; + + if (isRightController) + { + controllerGameObject = e.currentSetup.controllerSDK.GetControllerRightHand(true); + } + else + { + controllerGameObject = e.currentSetup.controllerSDK.GetControllerLeftHand(true); + } + + + if (controllerGameObject != null) + { +#if VRTK_DEFINE_STEAMVR_PLUGIN_2_0_0_OR_NEWER + trackedObject = controllerGameObject.GetComponent(); + vibration = SteamVR_Actions.naturalistic_Haptic; +#elif VRTK_DEFINE_STEAMVR_PLUGIN_1_2_1_OR_NEWER + trackedObject = controllerGameObject.GetComponent(); +#endif + } + + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs.meta new file mode 100644 index 0000000..40c1e88 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5c0be7d8c5eaf734ba7c5cc56c7cc00d +timeCreated: 1551904591 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs new file mode 100644 index 0000000..087da9e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs @@ -0,0 +1,55 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// Holds all the enums that are used throughout the Haptic SDK. +/// +/// Written by: Nicolas Herrera (nherrera@cra.com), 2019 +/// +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + public enum OffsetUse + { + // Don't use the offset to play the pattern + Ignore, + // The first point in the pattern will start at the offset + SetAtFirstPoint + } + + public enum PatternOvershootResolution + { + // Any value outside the range will be ignored + Discard, + // Any value outside the range will be set to the max/min value + Clamp, + // Any value outside the range will be set to the opposite + Wrap + } + + public enum PatternCollisionResolution + { + // Use the minium value from all curves + Min, + // Use the maximum value from all curves + Max, + // Take the average value from all curves + Average, + // Add all the values from all curves + Add, + // Multiple the values from all curves + Multiply, + // One specified curve value will always be used + CurvePriority + } + + public enum PlaybackTiming + { + // Use the Update loop to play the pattern + Update, + // Use the FixedUpdate loop to play the pattern + FixedUpdate, + // Use a custom timing scheme to play the pattern + Custom + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs.meta new file mode 100644 index 0000000..f6e9588 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fde99571fbf427248b799ff74d66b5a9 +timeCreated: 1556222849 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs new file mode 100644 index 0000000..fc69b2a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Manages all the haptic devices that have an affect on the Body Coordinates in the scene. + /// + /// If attached to a class with an Animator, it will also automatically set up the body parts on any + /// transforms that have a BodyCoordinate attached to them. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class HapticManager : MonoBehaviour + { + #region PrivateVariables + private Animator animator; + private Dictionary> bodyAffectedByDevice; + // Body parts in this set will not receive haptics + private HashSet ignoreBoneSet; + // Devices in this set will get haptic patterns + private HashSet ignoreHapticDevices; + #endregion + + #region PublicAPI + /// + /// Checks to see if the given body part that was hit has a device that should be triggered. If it does, + /// it tells that device to play their haptic for that hit location. + /// + /// The body part that was hit + /// The height/angle of the hit on the body part + public void BodyPartHit(HumanBodyBones bodyLocation, BodyCoordinateHit hitLocation, ScriptableHapticPattern hapticPattern = null) + { + // Check to make sure this body part isn't ignored + if (ignoreBoneSet.Contains(bodyLocation)) + { + return; + } + + if (bodyAffectedByDevice.ContainsKey(bodyLocation)) + { + // Tell every device that has this body part to trigger the haptics at the given location + for (int n = 0; n < bodyAffectedByDevice[bodyLocation].Count; n++) + { + // Check to make sure this haptic device isn't ignored + if(ignoreHapticDevices.Contains(bodyAffectedByDevice[bodyLocation][n])) + { + return; + } + + if (hapticPattern == null) + { + bodyAffectedByDevice[bodyLocation][n].TriggerDevice(bodyLocation, hitLocation, 0.5f); + } + else + { + bodyAffectedByDevice[bodyLocation][n].TriggerDevice(bodyLocation, hitLocation, hapticPattern); + } + } + } + } + + /// + /// Allows the manager to know that a device is able to target a specific body part + /// + /// The haptic device that is able to target a body coordinate + /// The body coordinate system that it can handle + public void AddDevicePerBodyLocation(HapticDevice device, ScriptableBodyCoordinate hitLocation) + { + if (bodyAffectedByDevice.ContainsKey(hitLocation.affectableBodyParts)) + { + bodyAffectedByDevice[hitLocation.affectableBodyParts].Add(device); + } + else + { + bodyAffectedByDevice[hitLocation.affectableBodyParts] = new List + { + device + }; + } + } + + /// + /// Plays a specified haptic pattern on a specific body part. Use this method if one + /// simply needs to give a notification to a body part through scripting. + /// + /// The body part to notify + /// The haptic pattern to play + public void PlayPattern(HumanBodyBones bodyLocation, ScriptableHapticPattern pattern) + { + // Check to make sure this body part isn't ignored + if (ignoreBoneSet.Contains(bodyLocation)) + { + return; + } + + if (bodyAffectedByDevice.ContainsKey(bodyLocation)) + { + // Tell every device that has this body part to play the pattern + for (int n = 0; n < bodyAffectedByDevice[bodyLocation].Count; n++) + { + // Check to make sure this haptic device isn't ignored + if (ignoreHapticDevices.Contains(bodyAffectedByDevice[bodyLocation][n])) + { + return; + } + + bodyAffectedByDevice[bodyLocation][n].PlayPattern(bodyLocation, pattern); + } + } + } + + /// + /// Stops any patterns that are playing on the given body part. + /// + public void CancelPatternPlayingOnBody(HumanBodyBones bodyLocation) + { + if (bodyAffectedByDevice.ContainsKey(bodyLocation)) + { + // Tell every device that has this body part to stop + for (int n = 0; n < bodyAffectedByDevice[bodyLocation].Count; n++) + { + bodyAffectedByDevice[bodyLocation][n].StopPattern(bodyLocation); + } + } + } + + /// + /// Used to retrieve every unique haptic device that the manager + /// + /// A HashSet of every haptic device that the manager is aware of. + public HashSet GetSetOfActiveDevices() + { + HashSet deviceSet = new HashSet(); + + // Go through every entry in the body to device dictionary and add them to the hashset + foreach (List deviceList in bodyAffectedByDevice.Values) + { + foreach (HapticDevice device in deviceList) + { + deviceSet.Add(device); + } + } + + return deviceSet; + } + + public void IgnoreHapticsOnBodyPart(HumanBodyBones bodyPartToIgnore) + { + ignoreBoneSet.Add(bodyPartToIgnore); + + CancelPatternPlayingOnBody(bodyPartToIgnore); + } + + public void ReconsiderHapticsOnBodyPart(HumanBodyBones bodyPartToReconsider) + { + if (ignoreBoneSet.Contains(bodyPartToReconsider)) + { + ignoreBoneSet.Remove(bodyPartToReconsider); + } + } + + public void IgnoreHapticsByDevice(HapticDevice deviceToIgnore) + { + ignoreHapticDevices.Add(deviceToIgnore); + } + + public void ReconsiderHapticsByDevice(HapticDevice deviceToReconsider) + { + if (ignoreHapticDevices.Contains(deviceToReconsider)) + { + ignoreHapticDevices.Remove(deviceToReconsider); + } + } + #endregion + + #region Unity Functions + void Awake() + { + bodyAffectedByDevice = new Dictionary>(); + ignoreBoneSet = new HashSet(); + ignoreHapticDevices = new HashSet(); + + animator = GetComponent(); + + if (animator != null) + { + foreach (HumanBodyBones bone in Enum.GetValues(typeof(HumanBodyBones))) + { + Transform boneTransform = animator.GetBoneTransform(bone); + + if (boneTransform != null) + { + BodyCoordinate attachedCoordinate = boneTransform.gameObject.GetComponent(); + + if (attachedCoordinate != null) + { + attachedCoordinate.attachedBody = bone; + } + } + } + } + else + { + Debug.LogWarning("No Animator found on HapticManager. Bones cannot be automatically set, please make sure it was manually done.", this); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs.meta new file mode 100644 index 0000000..b27fb7e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a75400c659f89a34caa71e27eafcf332 +timeCreated: 1551902273 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: -500 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs new file mode 100644 index 0000000..a157f62 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Component that holds a haptic pattern. When the GameObject that this component is attached + /// to hits a body coordinate, it will pull the attached pattern and play that pattern on that + /// body part. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class HapticPatternCollisionHolder : MonoBehaviour + { + #region PublicVariables + public ScriptableHapticPattern patternToSend; + #endregion + + #region PublicAPI + public ScriptableHapticPattern GetHapticPattern() + { + return patternToSend; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs.meta new file mode 100644 index 0000000..6497d87 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 11dd23e0d1b103642b773b8b2eaf26b6 +timeCreated: 1556206181 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs new file mode 100644 index 0000000..2508ed7 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs @@ -0,0 +1,116 @@ +using System; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Attribute to be used by a haptic device to define the system info for the editor. The attributes + /// that are placed on the device are used in the editor to easily enable/disable the devices + /// that the developer is trying to target. Additionaly, they can be used to set the default + /// values for the device as well. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [Serializable, AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + public class HapticSystemAttribute : Attribute + { + #region PrivateVariables + [SerializeField] + private string systemName; + [SerializeField] + private string deviceName; + [SerializeField] + private string affectedBodyFileLocation; + [SerializeField] + private Type connectedSDKType; + [SerializeField] + private string connectedSDKTypeName; + [SerializeField] + private object[] additionalData; + #endregion + + public HapticSystemAttribute(string sysName, string devName, params object[] addData) + { + systemName = sysName; + deviceName = devName; + + additionalData = addData; + } + + public HapticSystemAttribute(string sysName, string devName, string bodyFileLocation, params object[] addData) + { + systemName = sysName; + deviceName = devName; + affectedBodyFileLocation = bodyFileLocation; + + additionalData = addData; + } + + public HapticSystemAttribute(string sysName, string devName, string bodyFileLocation, Type sdkSetupType, params object[] addData) + { + systemName = sysName; + deviceName = devName; + affectedBodyFileLocation = bodyFileLocation; + connectedSDKType = sdkSetupType; + connectedSDKTypeName = connectedSDKType.AssemblyQualifiedName; + additionalData = addData; + } + + public string SystemName + { + get + { + return systemName; + } + } + + public string DeviceName + { + get + { + return deviceName; + } + } + + public string AffectedBodyFileLocation + { + get + { + return affectedBodyFileLocation; + } + } + + public Type ConnectedSDKType + { + get + { + return connectedSDKType; + } + } + + public string ConnectedSDKTypeName + { + get + { + return connectedSDKTypeName; + } + } + + public object[] AdditionalData + { + get + { + return additionalData; + } + } + + public virtual void ResetAfterSerialization() + { + if(!string.IsNullOrEmpty(ConnectedSDKTypeName)) + { + connectedSDKType = Type.GetType(ConnectedSDKTypeName); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs.meta new file mode 100644 index 0000000..7a85b19 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 55b74a171a3462b429dbb4e3507ce3c3 +timeCreated: 1556818419 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects.meta new file mode 100644 index 0000000..1c73517 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 47dc23d4f164c5949a39cafd0608eafc +folderAsset: yes +timeCreated: 1553705601 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs new file mode 100644 index 0000000..c72970d --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs @@ -0,0 +1,80 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Defines the division of a body part for the purpose of allowing a haptic device that + /// has multiple actuators define what area of the body part it can affect. It can also + /// be used by an object with a single actuator to define the area that can effect it by + /// limiting the available area. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [CreateAssetMenu(fileName = "New Body Coordinate System", menuName = "VIRTUOSO/Haptics/Create Body Coordinate System")] + public class ScriptableBodyCoordinate : ScriptableObject + { + #region PublicVariables + public HumanBodyBones affectableBodyParts; + public List affectedAreaList; + #endregion + + #region PublicAPI + /// + /// Use to tell if a specific body part was hit + /// + /// The body part of the hit + /// The exact hit on the body coordinate system + /// True if the hit is in an active body coordinate space + public bool HitInsideAffectedArea(HumanBodyBones hitBone, BodyCoordinateHit hitLocation) + { + // Check if it's on the same bone + if (hitBone == affectableBodyParts) + { + for (int n = 0; n < affectedAreaList.Count; n++) + { + // Check if it's an affect area on the same bone + if (affectedAreaList[n].HitInsideSpace(hitLocation)) + { + return true; + } + } + } + + return false; + } + + public int BodyCoordinateHitIndex(HumanBodyBones hitBone, BodyCoordinateHit hitLocation) + { + // Check if it's on the same bone + if (hitBone == affectableBodyParts) + { + for (int n = 0; n < affectedAreaList.Count; n++) + { + // Check if it's an affect area on the same bone + if (affectedAreaList[n].HitInsideSpace(hitLocation)) + { + return n; + } + } + } + + return -1; + } + #endregion + + #region Unity Functions + void OnValidate() + { + for(int n = 0; n < affectedAreaList.Count; n++) + { + if(affectedAreaList[n] != null) + { + affectedAreaList[n].OnValidate(); + } + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs.meta new file mode 100644 index 0000000..d169395 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1def597fc958b34428d434d67f612575 +timeCreated: 1551986644 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs new file mode 100644 index 0000000..aebd24c --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Takes a BodyCoordinate body part and creates an index mapping between the spaces availble from the mapping + /// and the actuators on the device. The IndexMapping class assumes that the actuators can be referenced from + /// an index value represented by an int. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [CreateAssetMenu(fileName = "New Device Mapping", menuName = "VIRTUOSO/Haptics/Create Device Mapping")] + public class ScriptableDeviceMapping : ScriptableObject + { + #region PublicVariables + public ScriptableBodyCoordinate affectedBodyArea; + public IndexMapping[] mapping; + #endregion + + #region Unity Functions + void OnValidate() + { + if(affectedBodyArea != null) + { + Array.Resize(ref mapping, affectedBodyArea.affectedAreaList.Count); + } + else + { + mapping = new IndexMapping[0]; + } + } + #endregion + + [Serializable] + public class IndexMapping + { + public int[] indexMapping; + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs.meta new file mode 100644 index 0000000..7e5aba0 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 652134711068581419c729823ab6e5d3 +timeCreated: 1553284629 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs new file mode 100644 index 0000000..9e4840c --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs @@ -0,0 +1,204 @@ +using System.IO; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Defines what a single curve on a Haptic Pattern is. The class consists of three AnimationCurves that + /// define how the curve will traverse the height and angle of the Body Coordinate System as well as the intensity + /// value at each of the inflection point. Since these are mathematical curves, there cannot be two points defined + /// at the same time, hence the need for a set of curves in order to define more complex haptic patterns. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [CreateAssetMenu(fileName = "New Haptic Curve", menuName = "VIRTUOSO/Haptics/Create Haptic Curve")] + public class ScriptableHapticCurve : ScriptableObject + { + #region PublicVariables + public AnimationCurve heightCurve = new AnimationCurve(); + public AnimationCurve angleCurve = new AnimationCurve(); + public AnimationCurve intensityCurve = new AnimationCurve(); + // Used by the Haptic Pattern UI, if this is marked true, it will be deleted by discard + public bool temporaryCurve = false; + #endregion + + #region PublicAPI + public float EndTime + { + get + { + return (heightCurve.keys.Length > 0) ? heightCurve.keys[heightCurve.length - 1].time : 0; + } + } + + /// + /// Provides the height and angle for the curve at the given time + /// + /// The timing information for the hit + /// The BodyCoordinateHit that provides the height and angle of the hit + public BodyCoordinateHit GetHitLocationAtTime(float currentTime) + { + return new BodyCoordinateHit(Mathf.Clamp01(heightCurve.Evaluate(currentTime)), + Mathf.Clamp(angleCurve.Evaluate(currentTime), 0.0f, 360.0f)); + } + + /// + /// Provides the intensity value for a given time + /// + /// The timing information for the hit + /// The intensity value evaluated at the given time, clamped between 0 and 1 + public float GetIntensityAtTime(float currentTime) + { + return Mathf.Clamp01(intensityCurve.Evaluate(currentTime)); + } + + /// + /// Adds a keyframe to the Haptic Pattern at the specified time. + /// + /// The time for the keyframe + /// The hit angle and height + /// The intensity between 0 and 1 + public void AddKey(float time, BodyCoordinateHit location, float intensity) + { + heightCurve.AddKey(time, location.hitHeight); + angleCurve.AddKey(time, location.hitAngle); + intensityCurve.AddKey(time, intensity); + } + + /// + /// Adjusts the values of a specific keyframe + /// + /// The index for the keyframe to update + /// The new height value for the keyframe + /// The new angle value for the keyframe + /// The new intensity of the keyframe + /// The new timing value for the keyframe + /// The index of the keyframe that was changed, timing information may change this value from the passed in keyIndex + public int UpdateKey(int keyIndex, float newHeight, float newAngle, float newIntensity, float newTime) + { + int newIndex = heightCurve.MoveKey(keyIndex, new Keyframe(newTime, newHeight)); + angleCurve.MoveKey(keyIndex, new Keyframe(newTime, newAngle)); + intensityCurve.MoveKey(keyIndex, new Keyframe(newTime, newIntensity)); + + return newIndex; + } + + /// + /// Removes a keyframe from the Haptic Pattern. + /// + /// The index for the keyframe to remove + public void RemoveKey(int keyIndex) + { + heightCurve.RemoveKey(keyIndex); + angleCurve.RemoveKey(keyIndex); + intensityCurve.RemoveKey(keyIndex); + } + #endregion + + #region PatternMethods + private void AddNewKeys(ref AnimationCurve curveWithLessKeys, ref AnimationCurve moreKeys) + { + int keyDifference = moreKeys.length - curveWithLessKeys.length; + + for (int n = 0; n < keyDifference; n++) + { + curveWithLessKeys.AddKey(moreKeys.keys[curveWithLessKeys.length + n].time, 0f); + } + } + + private void KeepCurveInRange(ref AnimationCurve curve, float minValue, float maxValue) + { + for (int n = 0; n < curve.keys.Length; n++) + { + // Keep value within the proper range + if (curve.keys[n].value < minValue) + { + curve.MoveKey(n, AdjustKeyFrameValue(curve.keys[n], minValue)); + } + else if (curve.keys[n].value > maxValue) + { + curve.MoveKey(n, AdjustKeyFrameValue(curve.keys[n], maxValue)); + } + + // Keep time value above zero as well + if (curve.keys[n].time < 0) + { + curve.MoveKey(n, AdjustKeyFrameTime(curve.keys[n], 0)); + } + } + } + + private void KeepCurvesInSync() + { + for (int n = 0; n < heightCurve.keys.Length; n++) + { + if (heightCurve.keys[n].time != angleCurve.keys[n].time) + { + angleCurve.MoveKey(n, AdjustKeyFrameTime(angleCurve.keys[n], heightCurve.keys[n].time)); + } + + if (heightCurve.keys[n].time != intensityCurve.keys[n].time) + { + intensityCurve.MoveKey(n, AdjustKeyFrameTime(intensityCurve.keys[n], heightCurve.keys[n].time)); + } + } + } + + private Keyframe AdjustKeyFrameValue(Keyframe key, float value) + { + return new Keyframe(key.time, value, key.inTangent, key.outTangent); + } + + private Keyframe AdjustKeyFrameTime(Keyframe key, float time) + { + return new Keyframe(time, key.value, key.inTangent, key.outTangent); + } + #endregion + + #region UnityFunctions + private void OnValidate() + { + // Keep curves the same length + if (angleCurve.length < heightCurve.length) + { + AddNewKeys(ref angleCurve, ref heightCurve); + } + else if (intensityCurve.length < heightCurve.length) + { + AddNewKeys(ref intensityCurve, ref heightCurve); + } + else if(angleCurve.length > heightCurve.length) + { + AddNewKeys(ref heightCurve, ref angleCurve); + } + else if(intensityCurve.length > heightCurve.length) + { + AddNewKeys(ref heightCurve, ref intensityCurve); + } + + // Make sure the curves have the proper ranges + KeepCurveInRange(ref heightCurve, 0.0f, 1.0f); + KeepCurveInRange(ref angleCurve, 0.0f, 360.0f); + KeepCurveInRange(ref intensityCurve, 0.0f, 1.0f); + + // Make sure each infliction point on the curves are aligned among time, angle + intensity matches height's timing + KeepCurvesInSync(); + } + + public override string ToString() + { +#if UNITY_EDITOR + string assetPath = AssetDatabase.GetAssetPath(this.GetInstanceID()); + + return Path.GetFileNameWithoutExtension(assetPath); +#else + return "Haptic Curve"; +#endif + + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs.meta new file mode 100644 index 0000000..2ddaccb --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 614963222c5fc264abeee260e20d8641 +timeCreated: 1553102906 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs new file mode 100644 index 0000000..dc6ac60 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs @@ -0,0 +1,278 @@ +using CharlesRiverAnalytics.Virtuoso.Utilities; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Defines a haptic pattern to use with the Haptic SDK. A haptic pattern is composed of a set of haptic curves. Some + /// additional information includes playback timing, which determines how often to tell the device to make a haptic pulse. + /// Collision resolution deals with how two or more curves will resolve the intensity if they affect the same actuator. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [CreateAssetMenu(fileName = "New Haptic Pattern", menuName = "VIRTUOSO/Haptics/Create Haptic Pattern")] + public class ScriptableHapticPattern : ScriptableObject + { + #region PublicVariables + // The curves that make up the haptic pattern + public List curveList = new List(); + // How to resolve the intensity when 2 or more curves intersect in a section of a body coordinate space + public PatternCollisionResolution collisionResolution = PatternCollisionResolution.Average; + // The curve index to use if curve priority is selected as the resolution + public int curvePriorityIndex = 0; + // How to time playing successive haptic pulses in the pattern + public PlaybackTiming playbackTiming; + // If using a custom playback timing, this is the value between successive haptic pulses + public float customPlaybackTiming = 0.333f; + // What happens when a pattern's evaluated height goes above the range + public PatternOvershootResolution heightOvershootResolution = PatternOvershootResolution.Clamp; + // What happens when a pattern's evaluated height goes above the range + public PatternOvershootResolution angleOvershootResolution = PatternOvershootResolution.Wrap; + // The last body hit with this pattern + public BodyCoordinateHit hitOffset; + // Whether to use the hitoffset when evaluating the haptic pattern being played + public OffsetUse offsetUse = OffsetUse.Ignore; + #endregion + + #region PublicProperties + public float EndTime + { + get + { + return Mathf.Max(curveList.Select(C => (C.EndTime)).ToArray()); + } + } + #endregion + + #region PrivateVariables + private float[] intensityEvaluationBuffer; + private BodyCoordinateHit[] hitLocationBuffer; + #endregion + + #region PublicAPI + /// + /// Provides the intensity values for all the curve values in the pattern for a specified time + /// + /// The timing information + /// An array of intensity value for each curve in the pattern + public float[] GetIntenstiyValuesAtCurrentTime(float currentTime) + { + // Get the intensity value for each curve + for (int n = 0; n < curveList.Count; n++) + { + intensityEvaluationBuffer[n] = curveList[n].GetIntensityAtTime(currentTime); + } + + return intensityEvaluationBuffer; + } + + /// + /// Provides the hit location (angle and height) values for all the curve values in the pattern for a specified time + /// + /// The timing information + /// An array of BodyCoordinateHit value for each curve in the pattern + public BodyCoordinateHit[] GetHitLocationsAtCurrentTime(float currentTime) + { + // Get the hit location for each curve + for (int n = 0; n < curveList.Count; n++) + { + BodyCoordinateHit hitLocation = curveList[n].GetHitLocationAtTime(currentTime); + + // Adjust the hitLocation based on the offset + switch (offsetUse) + { + case OffsetUse.SetAtFirstPoint: + // Get the difference between the offset and the first point + float heightDifference = hitOffset.hitHeight - curveList[n].heightCurve[0].value; + float angleDifference = hitOffset.hitAngle - curveList[n].angleCurve[0].value; + + // Apply the difference to the current hit location + hitLocation.hitHeight += heightDifference; + hitLocation.hitAngle += angleDifference; + + break; + } + + // Adjust the hitLocation based on the overshoot resolution for the height + hitLocation.hitHeight = AdjustHitLocation(hitLocation.hitHeight, 0.0f, 1.0f, heightOvershootResolution); + + // Adjust the hitLocation based on the overshoot resolution for the angle + hitLocation.hitAngle = AdjustHitLocation(hitLocation.hitAngle, 0.0f, 360.0f, angleOvershootResolution); + + hitLocationBuffer[n] = hitLocation; + } + + return hitLocationBuffer; + } + + /// + /// Adds a keyframe to the pattern for a given curve + /// + /// The curve index to add the keyframe to + /// The timing for the new keyframe + /// The height/angle of the keyframe + /// The intensity value of the keyframe + public void AddKey(int curveIndex, float time, BodyCoordinateHit location, float intensity) + { + curveList[curveIndex].AddKey(time, location, intensity); + } + + /// + /// Removes a keyframe from a specified curve + /// + /// The index of the curve to remove a keyframe from + /// The index of the keyframe within the curve to remove + public void RemoveKey(int curveIndex, int keyIndex) + { + curveList[curveIndex].RemoveKey(keyIndex); + } + + /// + /// Provides the number of keyframes in a specific curve + /// + /// The index of the curve + /// -1 if an invalid curve index is given, otherwise the total number of keyframes in the curve + public int GetKeyCountForCurve(int curveIndex) + { + if (curveIndex < 0 || curveIndex >= curveList.Count) + { + return -1; + } + else + { + return curveList[curveIndex].heightCurve.length; + } + } + + /// + /// Adds an empty curve to the pattern through scripting. This will also save the curve to an .asset file so that the reference and changes + /// made to this curve are not lost to serilization issues. + /// + /// The index of the new curve + public int AddNewCurve(string filePath, string patternName) + { + curveList.Add(ScriptableObject.CreateInstance()); + +#if UNITY_EDITOR + // Save the curve so that it can be found in the UI list + ScriptableObjectUtility.SaveScriptableObject(curveList[curveList.Count - 1], filePath, patternName + "_Curve" + (curveList.Count - 1)); +#endif + + return curveList.Count - 1; + } + + /// + /// Adds a curve to the curveList. This method is used when the curve already has an .asset file associated + /// with it and does not require tweaking it in any way. + /// + /// The curve to add to the list + /// The index of the added curve + public int AddSavedCurve(ScriptableHapticCurve hapticCurve) + { + curveList.Add(hapticCurve); + + return curveList.Count - 1; + } + + /// + /// Removes a specific curve from the pattern. If the curve is temporary, it will delete the + /// associated .asset file as well. + /// + /// The index of the curve to remove in the curveList + public void RemoveCurve(int curveIndex) + { + if (curveIndex < 0 || curveIndex >= curveList.Count) + { + return; + } + +#if UNITY_EDITOR + // If it is a temporary curve, delete the asset first since it is no longer needed + if (curveList[curveIndex].temporaryCurve) + { + ScriptableObjectUtility.DeleteScriptableObject(curveList[curveIndex]); + } +#endif + + curveList.RemoveAt(curveIndex); + } + + /// + /// Utility to get the length of a curve in the pattern for the specified curve + /// + /// The index of the curve in the curveList + /// -1 if the index is invalid, otherwise the last keyframe timing information for the curve + public float GetCurveEndTime(int curveIndex) + { + if (curveIndex < 0 || curveIndex >= curveList.Count) + { + return -1; + } + + return curveList[curveIndex].heightCurve[curveList[curveIndex].heightCurve.length - 1].time; + } + #endregion + + #region PrivateMethods + private float AdjustHitLocation(float value, float minValue, float maxValue, PatternOvershootResolution overshootResolution) + { + switch (overshootResolution) + { + case PatternOvershootResolution.Discard: + if (value < minValue || value > maxValue) + { + // Return negative infinity as this number will never be reached and can easily be checked to skip + return float.NegativeInfinity; + } + break; + case PatternOvershootResolution.Clamp: + if (value > maxValue) + { + return maxValue; + } + else if (value < minValue) + { + return minValue; + } + break; + case PatternOvershootResolution.Wrap: + if (value < minValue || value > maxValue) + { + return VirtMath.WrapBetweenRange(value, minValue, maxValue); + } + break; + } + + return value; + } + #endregion + + #region Unity Functions + private void OnEnable() + { + intensityEvaluationBuffer = new float[curveList.Count]; + hitLocationBuffer = new BodyCoordinateHit[curveList.Count]; + } + + private void OnDisable() + { + // Don't keep a saved offset value since it's only set by a collision + hitOffset = new BodyCoordinateHit(); + } + + private void OnValidate() + { + if (curvePriorityIndex < 0) + { + curvePriorityIndex = 0; + } + else if (curvePriorityIndex >= curveList.Count) + { + curvePriorityIndex = curveList.Count - 1; + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs.meta new file mode 100644 index 0000000..7eac547 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4c110b34a208c8c43abc687227bfacc0 +timeCreated: 1553102915 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs new file mode 100644 index 0000000..87bd928 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs @@ -0,0 +1,83 @@ +using CharlesRiverAnalytics.Virtuoso.Utilities; +using System.IO; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Holds reusable data that is needed through out the Haptic SDK. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class ScriptableHapticSettings : ScriptableObject + { + #region PublicVariables + // Where the default setting file will be hosted + public const string DEFAULT_SETTING_LOCATION = "Assets/VIRTUOSO/Resources/Editor/"; + // What the default setting file will be named + public const string DEFAULT_SETTING_NAME = "HapticSettings"; + + // Where any patterns created by the UI will be saved + public string defaultPatternSaveLocation = "Assets/VIRTUOSO/Resources/Patterns/"; + // Where any curves created by the UI will be saved + public string defaultCurveSaveLocation = "Assets/VIRTUOSO/Resources/Curves/"; + // The default intensity value for any new inflection point + public float defaultIntensity = 0.5f; + // The default time increase when a new inflection point is added + public float defaultTimeGranularity = 0.5f; + // The amount of samples that will be used when rendering the curve between two points in a haptic curve + public int defaultCurveRenderingGranularity = 10; + #endregion + + #region PublicAPI + public static ScriptableHapticSettings GetSettings() + { + ScriptableHapticSettings settings = Resources.Load(DEFAULT_SETTING_NAME) as ScriptableHapticSettings; + + // If there is no settings, create one with the default values + if (settings == null) + { + settings = ScriptableObject.CreateInstance(); +#if UNITY_EDITOR + ScriptableObjectUtility.SaveScriptableObject(settings, DEFAULT_SETTING_LOCATION, DEFAULT_SETTING_NAME); +#endif + } + + return settings; + } + #endregion + + #region UnityFunctions + public void OnValidate() + { + // Keep intensity between 0 and 1 + defaultIntensity = Mathf.Clamp01(defaultIntensity); + + // Keep timing non-negative + if (defaultTimeGranularity <= 0.0f) + { + defaultTimeGranularity = 0.01f; + } + +#if UNITY_EDITOR + // Make sure the directory exists + if (!Directory.Exists(defaultPatternSaveLocation)) + { + Directory.CreateDirectory(defaultPatternSaveLocation); + AssetDatabase.Refresh(); + } + + // Make sure the directory exists + if (!Directory.Exists(defaultCurveSaveLocation)) + { + Directory.CreateDirectory(defaultCurveSaveLocation); + AssetDatabase.Refresh(); + } +#endif + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs.meta new file mode 100644 index 0000000..67580b5 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e28766c9060caff42bd7a43852aadbec +timeCreated: 1556137234 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization.meta new file mode 100644 index 0000000..9855ad1 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e98d8c6cd383dfb4ba79718adff77d51 +folderAsset: yes +timeCreated: 1555527446 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs new file mode 100644 index 0000000..5415c7f --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs @@ -0,0 +1,133 @@ +#if UNITY_EDITOR +using System; +using UnityEngine; +using UnityEditor; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Works with the HapticPatternWindow class to work in the In-Scene UI for creating haptic + /// pattern. This class is responsible for listening for double clicks on the inflection + /// points for the pattern. If they are double clicked on, it will open up a menu that will + /// allow the developer to edit the values for the point. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public sealed class BodyHitListener : IDisposable + { + #region PrivateVariables + private BodyHitUI lastUIHit; + #endregion + + #region BodyHitMethods + public BodyHitListener() + { + SceneView.onSceneGUIDelegate += GetMouseClicks; + } + + public void Dispose() + { + CleanUp(); + } + + private void CleanUp() + { + SceneView.onSceneGUIDelegate -= GetMouseClicks; + } + #endregion + + #region ListenerMethods + public void GetMouseClicks(SceneView sceneView) + { + // Only care about mouse down events + if (Event.current.type != EventType.MouseDown) + { + return; + } + + // convert GUI coordinates to screen coordinates + Vector3 screenPosition = Event.current.mousePosition; + Vector3 cameraScreenPosition = screenPosition; + cameraScreenPosition.y = Camera.current.pixelHeight - cameraScreenPosition.y; + + Ray ray = Camera.current.ScreenPointToRay(cameraScreenPosition); + RaycastHit hit; + + // Wait for double clicks on left mouse + if (Event.current.clickCount == 2 && Event.current.button == 0) + { + // Cast ray into the scene + if (Physics.Raycast(ray, out hit)) + { + Event.current.Use(); + + BodyCoordinate bodyPart = hit.collider.GetComponent(); + + if (bodyPart != null) + { + BodyCoordinateHit hitLocation = bodyPart.CalculateBodyCoordinateHitFromPosition(hit.point); + + OnBodyPartHit(bodyPart, hitLocation, hit.point); + + return; + } + + BodyHitUI uiHit = hit.collider.GetComponent(); + + if (uiHit != null) + { + // Make sure that another UI is not already displaying + lastUIHit?.HideUI(screenPosition, true); + + lastUIHit = uiHit; + + lastUIHit.DisplayUI(screenPosition); + return; + } + } + } + else if (Event.current.clickCount == 1) + { + // Close the hitUI if they click outside of it + if (lastUIHit != null) + { + // Right/middle clicks will force close the UI + bool wasHidden = (Event.current.button != 0) ? lastUIHit.HideUI(screenPosition, true) : lastUIHit.HideUI(screenPosition); + + if (wasHidden) + { + lastUIHit = null; + } + } + } + } + #endregion + + #region Events + public event EventHandler BodyPartHit; + + public void OnBodyPartHit(BodyCoordinate bodyCoordinate, BodyCoordinateHit hitInfo, Vector3 hitLocation) + { + if (BodyPartHit != null) + { + BodyPartHit(this, new HapticInformation(bodyCoordinate, hitInfo, hitLocation)); + } + } + + public class HapticInformation : EventArgs + { + public BodyCoordinate bodyPart; + public BodyCoordinateHit bodyHitInfo; + public Vector3 worldHitLocation; + + public HapticInformation(BodyCoordinate bodyCoordinate, BodyCoordinateHit hitInfo, Vector3 hitLocation) + { + bodyPart = bodyCoordinate; + bodyHitInfo = hitInfo; + worldHitLocation = hitLocation; + } + } + #endregion + } +} +#endif \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs.meta new file mode 100644 index 0000000..5fb713c --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a2d7de4c9a423c346b192082a2b50e0b +timeCreated: 1554905415 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs new file mode 100644 index 0000000..0bc4a7d --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs @@ -0,0 +1,219 @@ +using UnityEngine; +using System; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// In-Scene UI for a keyframe in the Haptic Pattern. When the GameObject that holds the keyframe data is double + /// clicked in the scene, the UI generated in this class will appear. It allows a user to either remove the keyframe + /// or set a new height, angle, intensity, or timing information for the keyframe. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + { + #region PublicVariables + public float hitAngle; + public float hitHeight; + public float intensity; + public float timing; + public int keyFrameIndex; + // This is true when the Pattern UI has added the point but it has not been committed to the curve yet + public bool isTemporary = false; + #endregion + + #region PrivateVariables + private ScriptableHapticCurve hapticCurve; + private int hapticCurveIndex; + private bool shouldDisplayUI = false; + private Vector3 lastScreenPosition; + private Rect uiRect; + + private const int UI_WIDTH = 200; + private const int UI_HEIGHT = 400; + #endregion + + #region PublicAPI + public void SetValues(float angle, float height, float intense, float time, int keyIndex, int curveIndex, ScriptableHapticCurve curve) + { + hitAngle = angle; + hitHeight = height; + intensity = intense; + timing = time; + keyFrameIndex = keyIndex; + hapticCurveIndex = curveIndex; + hapticCurve = curve; + } + + /// + /// Shows the UI with the angle, height, timing, and intensity that the point has. + /// + /// The position on the screen where the UI was asked to be displayed + public void DisplayUI(Vector3 screenPosition) + { + lastScreenPosition = screenPosition; + + shouldDisplayUI = true; + } + + /// + /// Hides the UI when it is no longer needed. If the UI has focus, it cannot be hidden. + /// + /// The position on the screen where the mouse was clicked + /// True if the UI was hidden, otherwise false + public bool HideUI(Vector3 screenPosition, bool forceClose = false) + { + if (forceClose || !uiRect.Contains(screenPosition)) + { + shouldDisplayUI = false; + + lastScreenPosition = Vector3.zero; + + return true; + } + else + { + return false; + } + } + #endregion + + #region BodyHitMethods + private void UpdateCurve() + { + // Set the new keyframe in the curves + int newKey = hapticCurve.UpdateKey(keyFrameIndex, hitHeight, hitAngle, intensity, timing); + +#if UNITY_EDITOR + // If the new key is different, then all the other keys above it may different as well, update them here + if (newKey != keyFrameIndex) + { + FindObjectOfType().UpdateKeyIndices(hapticCurveIndex, keyFrameIndex, newKey); + } +#endif + + // Update GO position to match new location + transform.position = GetComponentInParent().CalculatePositionFromBodyCoordinateHit(new BodyCoordinateHit(hitHeight, hitAngle), true); + } + + private void RemovePointOnCurve() + { + hapticCurve.RemoveKey(keyFrameIndex); + +#if UNITY_EDITOR + // Make sure that keys are updated since this index is now gone + FindObjectOfType().UpdateKeyIndices(hapticCurveIndex, keyFrameIndex); +#endif + + DestroyImmediate(gameObject); + } + #endregion + + #region EventListener +#if UNITY_EDITOR + public void RenderSceneGUI(SceneView sceneview) + { + if (shouldDisplayUI) + { + sceneview.Repaint(); + + Handles.BeginGUI(); + uiRect = new Rect(lastScreenPosition.x, lastScreenPosition.y, UI_WIDTH, UI_HEIGHT); + + GUILayout.BeginArea(uiRect); + + // Make a gray, slightly transparent canvas + EditorGUI.DrawRect(uiRect, new Color(1.0f, 0.5f, 0.5f, 1.0f)); + + Rect rect = EditorGUILayout.BeginVertical(); + GUI.Box(rect, GUIContent.none); + + // Prompt and display angle + hitAngle = EditorGUILayout.FloatField("Angle: ", hitAngle); + + // Sanitize + hitAngle = Mathf.Clamp(hitAngle, 0.0f, 360.0f); + + // Prompt and display height + hitHeight = EditorGUILayout.FloatField("Height: ", hitHeight); + + // Sanitize + hitHeight = Mathf.Clamp01(hitHeight); + + // Prompt and display intensity + intensity = EditorGUILayout.FloatField("Intensity: ", intensity); + + // Sanitize + intensity = Mathf.Clamp01(intensity); + + // Prompt and display timing + timing = EditorGUILayout.FloatField("Timing: ", timing); + + // Sanitize + if(timing < 0.0f) + { + timing = 0.0f; + } + + // Display update button + if (GUILayout.Button("Update")) + { + UpdateCurve(); + } + + // Display remove point button + if (GUILayout.Button("Remove")) + { + RemovePointOnCurve(); + } + + EditorGUILayout.EndVertical(); + GUILayout.EndArea(); + Handles.EndGUI(); + } + } +#endif + #endregion + + #region IComparableImplementation + public int CompareTo(BodyHitUI other) + { + if (other == null) + { + return 1; + } + + if (this.keyFrameIndex > other.keyFrameIndex) + { + return 1; + } + else if (other.keyFrameIndex > this.keyFrameIndex) + { + return -1; + } + else + { + return 0; + } + } + #endregion + + #region UnityFunctions +#if UNITY_EDITOR + private void OnEnable() + { + SceneView.onSceneGUIDelegate += RenderSceneGUI; + } + + private void OnDisable() + { + SceneView.onSceneGUIDelegate -= RenderSceneGUI; + } +#endif + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs.meta new file mode 100644 index 0000000..832dea6 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 68547b836d856594492dc71ce6e4d9e8 +timeCreated: 1554232724 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs new file mode 100644 index 0000000..e3492c8 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs @@ -0,0 +1,30 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Single method class to add a menu item to create a new haptic pattern. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public static class CreateHapticPattern + { + [MenuItem("VIRTUOSO/Haptics/Create Haptic Pattern")] + public static void CreatePattern() + { + EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo(); + + string activeScene = EditorSceneManager.GetActiveScene().path; + + // Set up the scene to edit the pattern + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single); + + HapticPatternWindow activePatternWindow = Camera.main.gameObject.AddComponent(); + activePatternWindow.SetupCapsuleScene(activeScene); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs.meta new file mode 100644 index 0000000..bfb4e39 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 116691607af234f4e97ead0719ed29c4 +timeCreated: 1556568490 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs new file mode 100644 index 0000000..e73842f --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs @@ -0,0 +1,593 @@ +#if UNITY_EDITOR +using System.Collections.Generic; +using UnityEngine; +using CharlesRiverAnalytics.Virtuoso.Utilities; +using UnityEditor; +using UnityEditor.SceneManagement; +using CharlesRiverAnalytics.Virtuoso.Scriptable; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// A portion of the In-Scene UI for creating haptic patterns. This class is the one responsbile for the actual + /// haptic pattern and managing the state of information that is known about the pattern, such as keeping a reference + /// to all the GameObjects that refer to a specific keyframe in the curve. If a pattern has to be loaded or saved, it + /// is down through the script. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + [ExecuteInEditMode] + public class HapticPatternWindow : MonoBehaviour + { + #region PublicVariables + public GameObject hitLocationPrefab; + public Material activeHitMaterial; + public Material inactiveHitMaterial; + public Material capsuleMaterial; + public ScriptableLineRenderer lineRendererData; + #endregion + + #region PrivateVariables + private string previousScene; + private GameObject capsuleGO; + private BodyHitListener hitListener; + private HapticSceneViewGUI hapticSceneView; + private BodyCoordinate capsuleBodyCoordinate; + private ScriptableHapticPattern currentPattern; + private bool setupComplete = false; + // When true, the scene is cleaning up and will stop a few process + private bool isClosing = false; + private int currentCurveIndex = 0; + private LineRenderer currentCurveLineRenderer; + private ScriptableHapticSettings hapticSettings; + // Stores the inflection points for each curve attached to the pattern + private Dictionary> bodyHitsPerCurve; + #endregion + + #region PublicProperties + public int CurveIndex + { + get + { + return currentCurveIndex; + } + set + { + if (!isClosing) + { + // Since a new curve value is about to be set, update the visualization on the keyframe GO to inactive + UpdateCurveKeyFrameVisualization(currentCurveIndex, false); + } + + currentCurveIndex = value; + + if (!isClosing) + { + // A new value was set, now make these keyframes the active one + UpdateCurveKeyFrameVisualization(currentCurveIndex, true); + + DrawCurrentCurvePath(); + } + } + } + + public ScriptableHapticPattern HapticPattern + { + get + { + return currentPattern; + } + } + #endregion + + #region PublicAPI + /// + /// Sets up a new scene for pattern creation. This method will set up a capsule with a body coordinate system, a line + /// renderer for the haptic points, and the GUI and listeners needed to manage the new pattern. + /// + /// The string of the scene that the user needs to return to when the leave this Scene UI + public void SetupCapsuleScene(string previousSceneName) + { + previousScene = previousSceneName; + + // Don't allow playmode to be entered while in this scene + EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged; + + // Hook into mouse events from the scene + hitListener = new BodyHitListener(); + hitListener.BodyPartHit += HitListener_BodyPartHit; + + // Set up the In-Scene GUI + hapticSceneView = new HapticSceneViewGUI + { + patternWindow = this + }; + + // Connect to the OnGUI event cycle + SceneView.onSceneGUIDelegate += OnGUIDelegate; + + // Set up the capsule + capsuleGO = GameObject.CreatePrimitive(PrimitiveType.Capsule); + capsuleGO.GetComponent().material = capsuleMaterial; + capsuleGO.hideFlags = HideFlags.HideInInspector; + capsuleBodyCoordinate = capsuleGO.AddComponent(); + capsuleBodyCoordinate.drawGizmoUnselected = true; + + // Set up the line render for the active curve line + GameObject lineHolder = new GameObject("Line Holder", typeof(LineRenderer)); + lineHolder.transform.parent = capsuleGO.transform; + lineHolder.hideFlags = HideFlags.HideInHierarchy; + + currentCurveLineRenderer = lineHolder.GetComponent(); + + currentCurveLineRenderer.widthMultiplier = lineRendererData.widthMultiplier; + currentCurveLineRenderer.numCornerVertices = lineRendererData.numCornerVertices; + currentCurveLineRenderer.numCapVertices = lineRendererData.numCapVertices; + currentCurveLineRenderer.material = lineRendererData.lineMaterial; + currentCurveLineRenderer.receiveShadows = lineRendererData.receiveShadows; + currentCurveLineRenderer.allowOcclusionWhenDynamic = lineRendererData.allowOcclusionWhenDynamic; + currentCurveLineRenderer.startColor = lineRendererData.lineStartColor; + currentCurveLineRenderer.endColor = lineRendererData.lineEndColor; + + // Start with 0 points in the line + currentCurveLineRenderer.positionCount = 0; + + // Focus the camera on the capsule + Selection.activeGameObject = capsuleGO; + SceneView.lastActiveSceneView.FrameSelected(); + + // Start work on the haptic pattern + currentPattern = ScriptableObject.CreateInstance(); + AddNewCurve("Default"); + + // Don't need the event listener for a new scene anymore, wait for when this scene closes + setupComplete = true; + } + + /// + /// Saves the pattern that was being worked on to the set default location with the given file name. + /// + /// The string that represents the file name without the extension + public void SavePattern(string patternName, PatternCollisionResolution selectedCollisionResolution, int collisionResolutionIndex, + PlaybackTiming selectedPlaybackTiming, float customPlaybackTiming, OffsetUse selectedOffsetUse, + PatternOvershootResolution selectedHeightOvershoot, PatternOvershootResolution selectedAngleOvershoot) + { + isClosing = true; + + // Save the various settings for the pattern + HapticPattern.collisionResolution = selectedCollisionResolution; + HapticPattern.curvePriorityIndex = collisionResolutionIndex; + HapticPattern.playbackTiming = selectedPlaybackTiming; + HapticPattern.customPlaybackTiming = customPlaybackTiming; + HapticPattern.offsetUse = selectedOffsetUse; + HapticPattern.heightOvershootResolution = selectedHeightOvershoot; + HapticPattern.angleOvershootResolution = selectedAngleOvershoot; + + ScriptableObjectUtility.SaveScriptableObject(HapticPattern, hapticSettings.defaultPatternSaveLocation, patternName); + + for (int n = 0; n < HapticPattern.curveList.Count; n++) + { + // Only rename curves that this pattern created + if (HapticPattern.curveList[n].temporaryCurve) + { + ScriptableObjectUtility.RenameScriptableObjectFile(HapticPattern.curveList[n], patternName + "_Curve" + n); + + // This curve is no longer temporary and should be saved + HapticPattern.curveList[n].temporaryCurve = false; + } + } + + ReturnToPreviousScene(); + } + + /// + /// Updates the key indices in the bodyHitCurve dictionary. Since the developer may remove + /// or update the ordering of the keys, the dictionary needs to be updated with the correct + /// key to make sure the GameObject that represents that keyframe is correct. + /// + /// The index of the curve on the pattern that this applies to + /// The index that was changed or removed + /// If a key was reordered, this is the new value for that key + public void UpdateKeyIndices(int curveIndex, int changedIndex, int changedTowardIndex = -1) + { + // Key was changed, update the rest + if (changedTowardIndex != -1) + { + if (changedIndex < changedTowardIndex) + { + for (int n = changedIndex; n <= changedTowardIndex; n++) + { + bodyHitsPerCurve[curveIndex][n].keyFrameIndex--; + } + } + else + { + for (int n = changedTowardIndex; n <= changedIndex; n++) + { + bodyHitsPerCurve[curveIndex][n].keyFrameIndex++; + } + } + + // Set the key index for the changed one + bodyHitsPerCurve[curveIndex][changedIndex].keyFrameIndex = changedTowardIndex; + } + // Key was deleted, update the rest + else + { + for (int n = changedIndex; n < bodyHitsPerCurve[curveIndex].Count; n++) + { + // Only one point can be removed at a time so just decrement all the indices above the changed one + bodyHitsPerCurve[curveIndex][n].keyFrameIndex--; + } + + // Remove the BodyHitUI from the list of known BodyHits + bodyHitsPerCurve[curveIndex].RemoveAt(changedIndex); + } + + // Since an index and key values were changed, resort the list by the keyframe index + bodyHitsPerCurve[curveIndex].Sort(); + } + + /// + /// Removes any changes for the pattern and returns back to the prevoius scene. If a saved pattern + /// or curve was used, any temporary patterns or curves will be removed and their associated .asset + /// files will be deleted. + /// + public void DiscardChanges() + { + isClosing = true; + + for (int n = HapticPattern.curveList.Count - 1; n >= 0; n--) + { + // Delete all curves attached to the pattern that are labeled as temporary + if (HapticPattern.curveList[n].temporaryCurve) + { + ScriptableObjectUtility.DeleteScriptableObject(HapticPattern.curveList[n]); + + bodyHitsPerCurve.Remove(n); + } + // Otherwise, go through the curve and look for any temporary keyframes in the curve + else + { + for (int h = bodyHitsPerCurve[n].Count - 1; h >= 0; h--) + { + // Remove this keyframe from the curve + if (bodyHitsPerCurve[n][h].isTemporary) + { + HapticPattern.RemoveKey(n, bodyHitsPerCurve[n][h].keyFrameIndex); + } + } + } + } + + ReturnToPreviousScene(); + } + + /// + /// Removes the active curve that is being worked on from the pattern. It will also remove any GameObjects + /// for the keyframes for that curve and update the dictionary of known keyframes per curve. + /// + public void RemoveCurrentCurve() + { + // Remove it from the pattern + HapticPattern.RemoveCurve(CurveIndex); + + // Remove the GameObjects from the scene + for (int n = 0; n < bodyHitsPerCurve[CurveIndex].Count; n++) + { + DestroyImmediate(bodyHitsPerCurve[CurveIndex][n].gameObject); + } + + // Any dictionary keys above the currentCurveIndex needs to go down by 1 since a key will be removed + for (int n = CurveIndex; n < bodyHitsPerCurve.Keys.Count - 1; n++) + { + bodyHitsPerCurve[n] = bodyHitsPerCurve[n + 1]; + } + + // Remove the last one since it is now a duplicate + bodyHitsPerCurve.Remove(bodyHitsPerCurve.Keys.Count - 1); + + // If there are no curves left, re-add a default curve so the user is still able to add points + if (HapticPattern.curveList.Count == 0) + { + AddNewCurve("Default"); + + // Reset the line renderer to zero + currentCurveLineRenderer.positionCount = 0; + } + + // Since the curve has been removed, start at 0 since there will always be a curve at 0 + CurveIndex = 0; + } + + /// + /// Adds an empty curve to the pattern. This will mark it as temporary so if changes are discarded, + /// the curve will be removed as well. + /// + public void AddNewCurve(string patternName) + { + CurveIndex = HapticPattern.AddNewCurve(hapticSettings.defaultCurveSaveLocation, patternName); + + // Mark the curve as temporary so it can be deleted if not saved + HapticPattern.curveList[CurveIndex].temporaryCurve = true; + + bodyHitsPerCurve.Add(CurveIndex, new List()); + } + + /// + /// Adds a curve that already has a .asset file associated with the curve + /// + /// The curve to add + public void AddSavedCurve(ScriptableHapticCurve hapticCurve) + { + // Add the curve info to the pattern + CurveIndex = HapticPattern.AddSavedCurve(hapticCurve); + + // Start tracking the BodyHitUI for this new curve index + bodyHitsPerCurve.Add(CurveIndex, new List()); + + // Get all the curve info into the dictionary + AddCurveToDictionary(CurveIndex, hapticCurve); + } + + /// + /// Updates the given curve's keyframe GameObjects to use either the active or inactive material, so that the developer + /// knows what keyframes they are editing. + /// + /// The curve index to update + /// If true, the material is set to the active material, otherwise the inactive material is used + public void UpdateCurveKeyFrameVisualization(int curveIndex, bool isActive) + { + if (bodyHitsPerCurve.ContainsKey(curveIndex)) + { + for (int n = 0; n < bodyHitsPerCurve[curveIndex].Count; n++) + { + Collider collider = bodyHitsPerCurve[curveIndex][n].GetComponent(); + collider.enabled = isActive; + + Renderer renderer = bodyHitsPerCurve[curveIndex][n].GetComponent(); + renderer.material = (isActive) ? activeHitMaterial : inactiveHitMaterial; + } + } + } + + /// + /// Load a saved haptic pattern and set it to be the active pattern to work on + /// + /// The pattern to load + public void LoadPattern(ScriptableHapticPattern loadedPattern) + { + ResetPattern(); + + currentPattern = loadedPattern; + + // Load each curve information from the pattern + for (int n = 0; n < loadedPattern.curveList.Count; n++) + { + bodyHitsPerCurve.Add(n, new List()); + + AddCurveToDictionary(n, loadedPattern.curveList[n]); + + UpdateCurveKeyFrameVisualization(n, false); + } + + // Make the first curve active + UpdateCurveKeyFrameVisualization(0, true); + } + #endregion + + #region PatternManagementFunctions + private void ResetPattern() + { + // Go through each GameObject and destroy it + foreach (var bodyHitList in bodyHitsPerCurve) + { + for (int n = 0; n < bodyHitList.Value.Count; n++) + { + DestroyImmediate(bodyHitList.Value[n].gameObject); + } + } + + // Empty the dictionary of all the values + bodyHitsPerCurve.Clear(); + + // Reset the index to 0 + CurveIndex = 0; + + currentPattern = null; + } + + private void AddCurveToDictionary(int curveIndex, ScriptableHapticCurve curveToAdd) + { + if (curveToAdd != null) + { + // Go through each keyframe, save the value, and place the GO representation + for (int h = 0; h < curveToAdd.heightCurve.length; h++) + { + float hitHeight = curveToAdd.heightCurve[h].value; + float hitAngle = curveToAdd.angleCurve[h].value; + + BodyHitUI currentHit = SpawnBodyHitGameObject(capsuleBodyCoordinate.CalculatePositionFromBodyCoordinateHit(new BodyCoordinateHit(hitHeight, hitAngle), true), + hitAngle, + hitHeight, + curveToAdd.heightCurve[h].time, + curveIndex, + curveToAdd.intensityCurve[h].value); + + bodyHitsPerCurve[curveIndex].Add(currentHit); + } + } + } + + private BodyHitUI SpawnBodyHitGameObject(Vector3 spawnPosition, float hitAngle, float hitHeight, float hitTime, int curveIndex, float intensity, bool isTemporary = false) + { + GameObject inflectionPoint = Instantiate(hitLocationPrefab, spawnPosition, Quaternion.identity, capsuleGO.transform); + inflectionPoint.hideFlags = HideFlags.HideInHierarchy; + + BodyHitUI currentHit = inflectionPoint.GetComponent(); + currentHit.SetValues(hitAngle, + hitHeight, + intensity, + hitTime, + HapticPattern.GetKeyCountForCurve(curveIndex) - 1, + curveIndex, + HapticPattern.curveList[curveIndex]); + currentHit.isTemporary = isTemporary; + + return currentHit; + } + + private void DrawCurrentCurvePath() + { + if (bodyHitsPerCurve.ContainsKey(CurveIndex)) + { + if(bodyHitsPerCurve[CurveIndex].Count <= 1) + { + return; + } + + // Reset the line for the current current + currentCurveLineRenderer.positionCount = 0; + currentCurveLineRenderer.positionCount = (bodyHitsPerCurve[CurveIndex].Count - 1) * hapticSettings.defaultCurveRenderingGranularity; + + float endTime = currentPattern.curveList[CurveIndex].EndTime; + float timeSlice = endTime / currentCurveLineRenderer.positionCount; + + // Use the curve itself to find the points around the collider + for (int n = 0; n < currentCurveLineRenderer.positionCount; n += hapticSettings.defaultCurveRenderingGranularity) + { + for(int h = 0; h < hapticSettings.defaultCurveRenderingGranularity; h++) + { + currentCurveLineRenderer.SetPosition(n+h, capsuleBodyCoordinate.CalculatePositionFromBodyCoordinateHit(currentPattern.curveList[CurveIndex].GetHitLocationAtTime((n+h) * timeSlice), true)); + } + } + + // Draw the final point + currentCurveLineRenderer.SetPosition(currentCurveLineRenderer.positionCount - 1, capsuleBodyCoordinate.CalculatePositionFromBodyCoordinateHit(currentPattern.curveList[CurveIndex].GetHitLocationAtTime(endTime), true)); + } + } + #endregion + + #region SceneManagement + private void OnGUIDelegate(SceneView sceneView) + { + // Keep the capsule selected and hide the transform gizmo + Selection.activeGameObject = capsuleGO; + Tools.current = Tool.None; + } + + private void ReturnToPreviousScene() + { + if (!string.IsNullOrEmpty(previousScene)) + { + EditorSceneManager.OpenScene(previousScene); + } + else + { + EditorApplication.delayCall += () => + { + // If the previous scene was not a saved one, then return to a blank scene + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single); + }; + } + } + + private void CleanUp() + { + if (setupComplete && isClosing) + { + SceneView.onSceneGUIDelegate -= OnGUIDelegate; + EditorApplication.playModeStateChanged -= EditorApplication_playModeStateChanged; + + if (hapticSceneView != null) + { + hapticSceneView.Dispose(); + hapticSceneView = null; + } + + if (hitListener != null) + { + hitListener.BodyPartHit -= HitListener_BodyPartHit; + hitListener.Dispose(); + hitListener = null; + } + } + } + #endregion + + #region EventListeners + private void HitListener_BodyPartHit(object sender, BodyHitListener.HapticInformation e) + { + float hitTime; + + if (HapticPattern.curveList[CurveIndex].heightCurve.length == 0) + { + hitTime = 0.0f; + } + else + { + hitTime = HapticPattern.GetCurveEndTime(CurveIndex) + hapticSettings.defaultTimeGranularity; + } + + // Add the point to the pattern + HapticPattern.AddKey(CurveIndex, hitTime, e.bodyHitInfo, hapticSettings.defaultIntensity); + + // Add BodyHit GO to the hit location so the user can interact with the point in the UI + BodyHitUI currentHit = SpawnBodyHitGameObject(e.worldHitLocation, + e.bodyHitInfo.hitAngle, + e.bodyHitInfo.hitHeight, + hitTime, + CurveIndex, + hapticSettings.defaultIntensity, + true); + + bodyHitsPerCurve[CurveIndex].Add(currentHit); + + // Update the line renderer + DrawCurrentCurvePath(); + } + + private void EditorApplication_playModeStateChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingEditMode) + { + EditorApplication.isPlaying = false; + } + } + #endregion + + #region UnityFunctions + private void Awake() + { + bodyHitsPerCurve = new Dictionary>(); + + // Don't allow Play Mode when this script is in the scene + if (EditorApplication.isPlaying) + { + EditorApplication.isPlaying = false; + } + + hapticSettings = ScriptableHapticSettings.GetSettings(); + } + + private void Update() + { + if (setupComplete) + { + if (hapticSceneView == null) + { + Debug.LogError("Lost connection to the SceneView, please re-open the Haptic Pattern Creation window.", this); + + isClosing = true; + } + } + } + + private void OnDestroy() + { + CleanUp(); + } + #endregion + } +} +#endif \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs.meta new file mode 100644 index 0000000..144dfd9 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 8fb793e13bdc91540a307f89e5363cdf +timeCreated: 1553805954 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - hitLocationPrefab: {fileID: 1869474814193224, guid: d5a00861e7f46694596ab7fa221e9880, + type: 2} + - activeHitMaterial: {fileID: 2100000, guid: cfb9c0ad0f7cc3f489fe4a69ed117f38, type: 2} + - inactiveHitMaterial: {fileID: 2100000, guid: 5b923cd611d17a9419f5788d216210e3, + type: 2} + - capsuleMaterial: {fileID: 2100000, guid: 5969cc5b3b50cad4595ffacc3129c769, type: 2} + - lineRendererMaterial: {fileID: 2100000, guid: 8e0e7d5234ddbdc48829ca867689274d, + type: 2} + - lineRendererData: {fileID: 11400000, guid: 4b6ada9ca411ada48b621c9611310349, type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs new file mode 100644 index 0000000..d24bdd8 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs @@ -0,0 +1,237 @@ +#if UNITY_EDITOR +using UnityEngine; +using UnityEditor; +using UnityEditor.SceneManagement; +using CharlesRiverAnalytics.Virtuoso.Utilities; +using System; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Handles the In-Scene UI for creating a new pattern. Allows the user to load saved patterns or work on new ones. + /// From this class, the user is able to manage the curves that are attached to the pattern by either removing them, + /// adding a saved one, or starting on a new one. The class also passes the values that the user sets for the collision + /// resolution and timing information. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public sealed class HapticSceneViewGUI : IDisposable + { + #region PublicVariables + public HapticPatternWindow patternWindow; + #endregion + + #region PrivateVariables + private string patternName; + private ScriptableHapticCurve curveToAdd; + private ScriptableHapticPattern patternToLoad; + private PatternCollisionResolution selectedCollisionResolution; + private int collisionResolutionIndex; + private PlaybackTiming selectedPlaybackTiming; + private float customPlaybackTiming; + private OffsetUse selectedOffsetUse; + private PatternOvershootResolution selectedHeightOvershoot; + private PatternOvershootResolution selectedAngleOvershoot; + private GUIStyle textLabelStyle; + + private const float UI_SCREEN_WIDTH = 4.0f; + #endregion + + #region HapticSceneMethods + public HapticSceneViewGUI() + { + SetUpRenderer(); + + CreateGUIStyles(); + } + + public void Dispose() + { + CleanUp(); + } + + public void SetUpRenderer() + { + // There should only be 1 delegate from this class at a time, so remove the event in case it already exists and this was called + SceneView.onSceneGUIDelegate -= RenderSceneGUI; + + SceneView.onSceneGUIDelegate += RenderSceneGUI; + } + + /// + /// Handles how to render the actual elements of the UI + /// + public void RenderSceneGUI(SceneView sceneview) + { + Handles.BeginGUI(); + + // Make a canvas that spans the entire height of the scene and a portion of the width + Rect canvasRect = new Rect(0, 0, Screen.width / UI_SCREEN_WIDTH, Screen.height); + GUILayout.BeginArea(canvasRect); + + // Make the area behind the GUI a gray, slightly transparent canvas + EditorGUI.DrawRect(canvasRect, new Color(0.5f, 0.5f, 0.5f, 0.5f)); + + Rect verticleLayoutBox = EditorGUILayout.BeginVertical(); + GUI.Box(verticleLayoutBox, GUIContent.none); + + // Add header for loading/saving patterns + EditorGUILayout.Space(); + EditorGUILayout.HelpBox("Pattern Management", MessageType.None); + + // Load a saved pattern + EditorGUILayout.LabelField("Load Saved Pattern:", textLabelStyle); + patternToLoad = EditorGUILayout.ObjectField(patternToLoad, typeof(ScriptableHapticPattern), false) as ScriptableHapticPattern; + + if (patternToLoad != null) + { + if (GUILayout.Button("Load Pattern")) + { + LoadPattern(); + + patternToLoad = null; + } + } + + // Save changes and return to previous scene + if (GUILayout.Button("Save and return")) + { + patternWindow.SavePattern(patternName, selectedCollisionResolution, collisionResolutionIndex, selectedPlaybackTiming, customPlaybackTiming, selectedOffsetUse, selectedHeightOvershoot, selectedAngleOvershoot); + } + + // Save the background color to temporarily change the discard background to red to indicate the negative nature of the button + Color oldColor = GUI.backgroundColor; + GUI.backgroundColor = Color.red; + + // Discard all the changes and return to previous scene + if (GUILayout.Button("Discard changes")) + { + bool discardResult = EditorUtility.DisplayDialog("Discard changes?", + "Are you sure you want to discard all changes made to this pattern?", + "Yes", + "Cancel"); + + if (discardResult) + { + patternWindow.DiscardChanges(); + } + } + + GUI.backgroundColor = oldColor; + + // Add header for pattern settings + EditorGUILayout.Space(); + EditorGUILayout.HelpBox("Pattern Settings", MessageType.None); + + // Prompt for pattern name which will become the file name + EditorGUILayout.LabelField("Pattern Name:", textLabelStyle); + patternName = EditorGUILayout.TextField(patternName); + + // Prompt for how to handle intensity collisions + EditorGUILayout.LabelField("Collision Resolution:", textLabelStyle); + selectedCollisionResolution = (PatternCollisionResolution)EditorGUILayout.EnumPopup(selectedCollisionResolution); + + // Prompt for the index of the curve to use if the resolution is set to CurvePriority + if (selectedCollisionResolution == PatternCollisionResolution.CurvePriority) + { + EditorGUILayout.LabelField("Curve Index:", textLabelStyle); + collisionResolutionIndex = EditorGUILayout.IntField(collisionResolutionIndex); + } + + // Prompt for the playback timing on the pattern + EditorGUILayout.LabelField("Playback Timing:", textLabelStyle); + selectedPlaybackTiming = (PlaybackTiming)EditorGUILayout.EnumPopup(selectedPlaybackTiming); + + // Prompt for custom playback timing if they have selected CustomPlayback as the option + if (selectedPlaybackTiming == PlaybackTiming.Custom) + { + EditorGUILayout.LabelField("Custom Playback Time:", textLabelStyle); + customPlaybackTiming = EditorGUILayout.FloatField(customPlaybackTiming); + } + + // Prompt for offset use + EditorGUILayout.LabelField("Offset Use:", textLabelStyle); + selectedOffsetUse = (OffsetUse)EditorGUILayout.EnumPopup(selectedOffsetUse); + + // Prompt for height overshoot + EditorGUILayout.LabelField("Height Overshoot Resolution:", textLabelStyle); + selectedHeightOvershoot = (PatternOvershootResolution)EditorGUILayout.EnumPopup(selectedHeightOvershoot); + + // Prompt for angle overshoot + EditorGUILayout.LabelField("Angle Overshoot Resolution:", textLabelStyle); + selectedAngleOvershoot = (PatternOvershootResolution)EditorGUILayout.EnumPopup(selectedAngleOvershoot); + + // Header for management curves + EditorGUILayout.Space(); + EditorGUILayout.HelpBox("Curve Management", MessageType.None); + + // Build string list of attached curves + string[] curveNames = new string[patternWindow.HapticPattern.curveList.Count]; + + for (int n = 0; n < patternWindow.HapticPattern.curveList.Count; n++) + { + curveNames[n] = patternWindow.HapticPattern.curveList[n].ToString(); + } + + // Show list of curves on the pattern for the user to select + EditorGUILayout.LabelField("Current curve:", textLabelStyle); + patternWindow.CurveIndex = EditorGUILayout.Popup(patternWindow.CurveIndex, curveNames); + + // Allow the user to add a new curve + if (GUILayout.Button("Add New Curve")) + { + patternWindow.AddNewCurve("Default"); + } + + if (GUILayout.Button("Remove Current Curve")) + { + patternWindow.RemoveCurrentCurve(); + } + + // Add selected curve to pattern button + EditorGUILayout.LabelField("Add Saved Curve:", textLabelStyle); + curveToAdd = EditorGUILayout.ObjectField(curveToAdd, typeof(ScriptableHapticCurve), false) as ScriptableHapticCurve; + + if (curveToAdd != null) + { + if (GUILayout.Button("Add Curve")) + { + patternWindow.AddSavedCurve(curveToAdd); + + curveToAdd = null; + } + } + + EditorGUILayout.EndVertical(); + GUILayout.EndArea(); + Handles.EndGUI(); + } + + private void LoadPattern() + { + patternName = ScriptableObjectUtility.GetScriptableObjectFileName(patternToLoad); + selectedCollisionResolution = patternToLoad.collisionResolution; + collisionResolutionIndex = patternToLoad.curvePriorityIndex; + selectedPlaybackTiming = patternToLoad.playbackTiming; + customPlaybackTiming = patternToLoad.customPlaybackTiming; + selectedOffsetUse = patternToLoad.offsetUse; + selectedHeightOvershoot = patternToLoad.heightOvershootResolution; + selectedAngleOvershoot = patternToLoad.angleOvershootResolution; + + patternWindow.LoadPattern(patternToLoad); + } + + private void CreateGUIStyles() + { + textLabelStyle = new GUIStyle(); + textLabelStyle.normal.textColor = Color.black; + } + + private void CleanUp() + { + SceneView.onSceneGUIDelegate -= RenderSceneGUI; + } + #endregion + } +} +#endif \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs.meta new file mode 100644 index 0000000..0879c8b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 658b9f4fc8ead2240b358d669ae12c5a +timeCreated: 1554903371 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs new file mode 100644 index 0000000..63826bb --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs @@ -0,0 +1,77 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// Links to all the active Haptic Devices that are in the scene. When that haptic device plays, it will + /// display an indication of the location on the effected body part. This script assumes that the body + /// coordinates are located below it in the hierarchy. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public sealed class HapticVisualizer : MonoBehaviour + { + #region PublicVariables + public float timeToFadeOut = 1.0f; + public Mesh hapticPatternVisualMesh; + public Material hapticPatternVisualMaterial; + #endregion + + #region PrivateVariables + private HapticManager manager; + private Dictionary bodyPartToCoordinate; + + private const float MESH_SCALE = .05f; + #endregion + + #region EventHandler + private void HapticDevice_HapticFeedbackPlayed(object sender, HapticFeedbackEventArgs e) + { + if (bodyPartToCoordinate.ContainsKey(e.bodyPart)) + { + // Calculate the position of the hit + Vector3 hitPosition = bodyPartToCoordinate[e.bodyPart].CalculatePositionFromBodyCoordinateHit(e.hitLocation); + + Matrix4x4 matrixTRS = new Matrix4x4(); + matrixTRS.SetTRS(hitPosition, Quaternion.identity, new Vector3(MESH_SCALE, MESH_SCALE, MESH_SCALE)); + + Graphics.DrawMesh(hapticPatternVisualMesh, matrixTRS, hapticPatternVisualMaterial, 0); + } + } + #endregion + + #region Unity Functions + void Start() + { + manager = FindObjectOfType(); + + // Hook into every device's event in the scene to know when they play a haptic pulse + foreach (HapticDevice hapticDevice in manager.GetSetOfActiveDevices()) + { + hapticDevice.HapticFeedbackPlayed += HapticDevice_HapticFeedbackPlayed; + } + + // Grab all the body coordinates below this script in the hierarchy and save a reference to it + bodyPartToCoordinate = new Dictionary(); + + foreach (BodyCoordinate bodyCoordinate in GetComponentsInChildren()) + { + if(!bodyPartToCoordinate.ContainsKey(bodyCoordinate.attachedBody)) + { + bodyPartToCoordinate.Add(bodyCoordinate.attachedBody, bodyCoordinate); + } + } + } + + private void OnApplicationQuit() + { + foreach (HapticDevice hapticDevice in manager.GetSetOfActiveDevices()) + { + hapticDevice.HapticFeedbackPlayed -= HapticDevice_HapticFeedbackPlayed; + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs.meta new file mode 100644 index 0000000..6ee5d2f --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: d5a4a905045b12a42a41413d4bef4b6c +timeCreated: 1556032545 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - hapticPatternVisualMesh: {fileID: 10207, guid: 0000000000000000e000000000000000, + type: 0} + - hapticPatternVisualMaterial: {fileID: 2100000, guid: 3d9809e611ea4f040aa4ba1c97679ff1, + type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs new file mode 100644 index 0000000..e4e9cd0 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.UI; + +namespace CharlesRiverAnalytics.Virtuoso.Haptic +{ + /// + /// In-Game UI overlay script for testing patterns. The developer must pass any haptic patterns they would like to + /// play to this script. When the game is played, the UI provides a list of body parts and a list of patterns and allows + /// for easy playing and testing of these patterns. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class HapticsUI : MonoBehaviour + { + #region PublicVariables + public List availablePatterns; + public Dropdown patternDropdown; + public Dropdown bodyPartDropdown; + #endregion + + #region PrivateVariables + private ScriptableHapticPattern selectedPattern; + private List bodyPartList; + private HumanBodyBones selectedBodyPart; + private HapticManager hapticManager; + #endregion + + #region PublicAPI + /// + /// Updates the selected pattern from a dropdown menu + /// + /// The dropdown menu that has the list of available patterns + public void DropdownPatternSelection(Dropdown target) + { + selectedPattern = availablePatterns[target.value]; + } + + /// + /// Updates the selected body part from a downdown menu + /// + /// The dropdown menu that has a list of the body parts + public void DropdownBodyPartSelection(Dropdown target) + { + selectedBodyPart = bodyPartList[target.value]; + } + + /// + /// Plays the selected pattern on the selected body part. + /// + public void PlaySelectedPattern() + { + if(selectedPattern != null) + { + hapticManager?.PlayPattern(selectedBodyPart, selectedPattern); + } + } + + /// + /// Plays the selected pattern on all body parts that are registered with the haptic manager. + /// + public void PlayOnAllBodyParts() + { + if(selectedPattern != null) + { + foreach(HumanBodyBones bodyPart in (HumanBodyBones[])Enum.GetValues(typeof(HumanBodyBones))) + { + hapticManager?.PlayPattern(bodyPart, selectedPattern); + } + } + } + #endregion + + #region UIFunctions + private void SetDropdownOptions(Dropdown dropdown, List optionNames, bool clearDropdownFirst = false) + { + if(clearDropdownFirst) + { + dropdown.ClearOptions(); + } + + dropdown.AddOptions(optionNames); + } + #endregion + + #region UnityFunctions + void Start() + { + hapticManager = FindObjectOfType(); + + bodyPartList = Enum.GetValues(typeof(HumanBodyBones)).Cast().ToList(); + + SetDropdownOptions(patternDropdown, availablePatterns.Select(P => P.name).ToList(), true); + SetDropdownOptions(bodyPartDropdown, bodyPartList.Select(P => P.ToString()).ToList(), true); + + // Make sure the functions are invoked once so the pattern isnt' null + DropdownPatternSelection(patternDropdown); + DropdownBodyPartSelection(bodyPartDropdown); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs.meta b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs.meta new file mode 100644 index 0000000..65b4226 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 41655ee12c386e54fa5b94ad661c26c4 +timeCreated: 1553197121 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas.meta new file mode 100644 index 0000000..692d2dc --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2a0fb7b95ec2e2d41935dbc6ae42668b +folderAsset: yes +timeCreated: 1527082463 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs new file mode 100644 index 0000000..c4f56b7 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs @@ -0,0 +1,216 @@ +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// InteractionArea that requires the user to follow a path in 3D space. Like the multi-interaction area, + /// the children define the path that is needed to follow with the child ordering in the hierarchy determining + /// the real order. The children simply need to be InteractionAreas so that they are counted and can be 'checkpoints' + /// in the path. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class ChannelInteractionArea : MultiInteractionArea + { + #region PublicVariables + [Header("Channel Settings")] + [Tooltip("The ScriptableLineRenderer asset to define the visuals of the line. If left null, no line will be displayed.")] + public Scriptable.ScriptableLineRenderer lineRendererInfo; + [Tooltip("The radius of the path the user will have to follow.")] + public float pathRadius = 0.05f; + [Tooltip("The point on the game object that must remain in the channel interaction area at all times.")] + public Transform pointToCheck; + #endregion + + #region ProtectedVariables + protected bool checkInsideCylinder; + protected float lengthSq; + protected float radiusSq; + protected GameObject interactableObject; + protected LineRenderer lineRender; + #endregion + + #region UnityFunctions + protected override void Awake() + { + base.Awake(); + + enforceOrder = true; + + radiusSq = Mathf.Pow(pathRadius, 2); + } + + protected void OnEnable() + { + if(lineRendererInfo != null) + { + lineRender = gameObject.AddComponent(); + lineRender.material = lineRendererInfo.lineMaterial; + lineRender.startWidth = lineRendererInfo.startLineWidth; + lineRender.endWidth = lineRendererInfo.endLineWidth; + lineRender.positionCount = childrenAreas.Count; + + for(int n = 0; n < childrenAreas.Count; n++) + { + lineRender.SetPosition(n, childrenAreas[n].transform.position); + } + } + + // Hook into enter events of the interaction areas + for (int n = 0; n < childrenAreas.Count; n++) + { + childrenAreas[n].ObjectEnteredInteractionArea += ChildEnterInteractionArea; + } + + StartState(); + } + + protected void OnDisable() + { + if(lineRender != null) + { + Destroy(lineRender); + } + + for (int n = 0; n < childrenAreas.Count; n++) + { + childrenAreas[n].ObjectEnteredInteractionArea -= ChildEnterInteractionArea; + } + } + + protected override void Update() + { + base.Update(); + + // The user has started using the interaction area so it needs to keep checking to see if they are inside the path + if (checkInsideCylinder) + { + // If either of these statements are true, the user has left the channel interaction area, either they: + // a) left the interaction area and the current interaction object is null or + // b) the tracked point is outside of the cylinder + if (childrenAreas[completionCount].CurrentInteractionObject == null + && !PointInsideCylinder(childrenAreas[completionCount].transform.position, + childrenAreas[completionCount + 1].transform.position, + lengthSq, + radiusSq, + pointToCheck.position)) + { + // No longer using the interaction area + checkInsideCylinder = false; + + StartState(); + + OnObjectInterruptInteractionArea(SetInteractionAreaEvent(interactableObject)); + } + } + } + #endregion + + #region EventCalls + private void ChildEnterInteractionArea(object sender, InteractionAreaEventArgs interactionEvent) + { + checkInsideCylinder = true; + + InteractionArea area = sender as InteractionArea; + interactableObject = interactionEvent.interactionObject; + + // Keep track of which child you're on + completionCount = area.transform.GetSiblingIndex(); + pointToCheck = interactableObject.transform.Find("Point"); + + // Start condition - Only want to send this once on the first visit + if (completionCount == 0) + { + MoveToNextCylinder(); + + OnObjectUsedInteractionArea(SetInteractionAreaEvent(interactableObject)); + } + // End condition - Last IA in the children was reached + else if (completionCount == childrenAreas.Count - 1) + { + checkInsideCylinder = false; + + StartState(); + + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(interactableObject)); + } + else + { + MoveToNextCylinder(); + } + } + #endregion + + #region ChannelFunctions + private void StartState() + { + SwitchChildren(0); + } + + // Called when the user reaches the next interaction area in the list. Activates the next Interaction and gets the + // new distance between this interaction area and the next + private void MoveToNextCylinder() + { + // Activate next object so its interaction area can be triggered + SwitchChildren(completionCount + 1); + + // Get the length of the next cylindrical section + lengthSq = Mathf.Pow(Vector3.Distance(childrenAreas[completionCount].transform.position, childrenAreas[completionCount + 1].transform.position), 2); + } + + /// + /// Given some parameters of a cylinder and a test point, will return true if that given + /// point is inside the 3D space of the cylinder as defined by the two end points. + /// + /// Adopted from http://www.flipcode.com/archives/Fast_Point-In-Cylinder_Test.shtml + /// + /// First end point of the cylinder + /// Other end point of the cylinder + /// The squared length of the cylinder + /// The squared radius of the cylinder + /// The point to check if its inside the cylinder + /// + private bool PointInsideCylinder(Vector3 pt1, Vector3 pt2, float lengthsq, float radius_sq, Vector3 testpt) + { + // translate so pt1 is origin. Make vector from pt1 to pt2. Need for this is easily eliminated + Vector3 cylinderVector = pt2 - pt1; + + // vector from pt1 to test point. + Vector3 vectorToPoint = testpt - pt1; + + // Dot the d and pd vectors to see if point lies behind the cylinder cap at pt1.x, pt1.y, pt1.z + float dot = Vector3.Dot(cylinderVector, vectorToPoint); + + // If dot is less than zero the point is behind the pt1 cap. + // If greater than the cylinder axis line segment length squared then the point is outside the other end cap at pt2. + if (dot < 0.0f || dot > lengthsq) + { + return false; + } + else + { + // Point lies within the parallel caps, so find distance squared from point to line, using the fact that + // sin ^2 + cos^2 = 1 the dot = cos() * |d||pd|, and cross*cross = sin^2 * |d|^2 * |pd|^2 + // Careful: '*' means mult for scalars and dotproduct for vectors + // In short, where dist is pt distance to cyl axis: + // dist = sin( pd to d ) * |pd| + // distsq = dsq = (1 - cos^2( pd to d)) * |pd|^2 + // dsq = ( 1 - (pd * d)^2 / (|pd|^2 * |d|^2) ) * |pd|^2 + // dsq = pd * pd - dot * dot / lengthsq + // where lengthsq is d*d or |d|^2 that is passed into this function distance squared to the cylinder axis: + + float dsq = Vector3.Dot(vectorToPoint, vectorToPoint) - dot * dot / lengthsq; + + if (dsq > radius_sq) + { + return false; + } + else + { + return true; + } + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs.meta new file mode 100644 index 0000000..0a8934c --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 238dd7b23b107d1418bb8f524d38cd65 +timeCreated: 1533220858 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs new file mode 100644 index 0000000..bf711e6 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs @@ -0,0 +1,73 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// Interaction area that requires a given collider be completly consumed by the collider + /// this script is placed on. For example, a needle needs to be inserted into a person, + /// not just the tip of it, so you would use this script to verify they have completly + /// entered the correct zone. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class EngulfInteractionArea : InteractionArea + { + public Collider colliderToEngulf; + + protected Collider myCollider; + + #region UnityFunctions + protected override void Awake() + { + base.Awake(); + + myCollider = GetComponent(); + + if (colliderToEngulf == null) + { + Debug.LogWarning("No collider given to " + name + ". Disabling script"); + enabled = false; + } + } + + protected override void OnTriggerEnter(Collider collider) + { + base.OnTriggerEnter(collider); + + if (currentInteractionObject != null && collider == colliderToEngulf) + { + // Use event + OnObjectUsedInteractionArea(SetInteractionAreaEvent(collider.gameObject)); + } + } + + protected override void OnTriggerStay(Collider collider) + { + base.OnTriggerStay(collider); + + if (currentInteractionObject != null && collider == colliderToEngulf) + { + if (myCollider.bounds.Contains(colliderToEngulf.bounds.min) && + myCollider.bounds.Contains(colliderToEngulf.bounds.max) && + !currentInteractionObject.IsGrabbed()) + { + // Finish event + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(currentInteractionObject.gameObject)); + } + } + } + + protected override void OnTriggerExit(Collider collider) + { + if (currentInteractionObject != null) + { + OnObjectInterruptInteractionArea(SetInteractionAreaEvent(currentInteractionObject.gameObject)); + } + + base.OnTriggerExit(collider); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs.meta new file mode 100644 index 0000000..b387161 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9c6f15189dc6cc94b980d48e622917ed +timeCreated: 1532552222 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs new file mode 100644 index 0000000..2fbbc66 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs @@ -0,0 +1,80 @@ +using System.Collections; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// InteractionArea that requires you to visit the area a given number of times. A visit could either be upon colliding it or + /// requiring the object to leave the area to count. + /// + /// When combined with the MultiInteractionArea and set to have a count of 1, this functions as a movement based interaction. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class EnterExitInteractionArea : InteractionArea + { + #region PublicVariables + [Tooltip("The number of times an object must enter and exit the interaction area.")] + public int enterExitCount = 1; + [Tooltip("When checked, the object counter will go up when the object is first entered. On uncheck, the object must leave the collider for it to increment.")] + public bool triggerOnEnter = true; + #endregion + + #region PrivateVariables + private int interactionCounter = 0; + #endregion + + #region InteractionAreaOverrides + public override void OnObjectEnteredInteractionArea(InteractionAreaEventArgs e) + { + base.OnObjectEnteredInteractionArea(e); + + if (currentInteractionObject != null && e.interactionObject == currentInteractionObject.gameObject) + { + InteractionEnter(currentInteractionObject.gameObject); + } + } + + public override void OnObjectExitedInteractionArea(InteractionAreaEventArgs e) + { + base.OnObjectExitedInteractionArea(e); + + InteractionExit(e.interactionObject); + } + #endregion + + #region EnterExitFunctions + private void InteractionEnter(GameObject objectEntered) + { + if (interactionCounter == 0) + { + OnObjectUsedInteractionArea(SetInteractionAreaEvent(objectEntered)); + } + + if (triggerOnEnter) + { + EnterExitCounter(objectEntered); + } + } + + private void InteractionExit(GameObject objectExited) + { + if (!triggerOnEnter) + { + EnterExitCounter(objectExited); + } + } + + private void EnterExitCounter(GameObject interactableObject) + { + interactionCounter++; + + if (interactionCounter == enterExitCount) + { + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(interactableObject)); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs.meta new file mode 100644 index 0000000..0705007 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 58ce9a8e4d7683c48911f82c55016a9c +timeCreated: 1529082792 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs new file mode 100644 index 0000000..45d07cb --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs @@ -0,0 +1,307 @@ +using UnityEngine; +using System.Collections.Generic; +using VRTK; +using System; +using CharlesRiverAnalytics.Virtuoso.Utilities; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + #region EventPayload + // Event Payload + public delegate void InteractionAreaEventHandler(object sender, InteractionAreaEventArgs e); + #endregion + + public enum InteractionTriggers + { + None, + OnEnter, + OnExit, + OnUse, + OnFinish, + OnInterrupt + } + + /// + /// + /// Class that handles the interaction between the environment and a particular procedure. This class mainly handles the + /// general event handling and makes sure there is a valid GameObject to use the interaction area. No GameObject should + /// directly have this script, but use one of it's children since they implement the functionality for the + /// interaction type. + /// + /// For example, there can be an interaction area that requires an object be in the interaction area for a specific amount + /// of time. + /// + /// Based on VRTK_SnapDropZone + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + [System.Serializable] + public class InteractionArea : VirtuosoEvent + { + #region PublicVariables + [Tooltip("A specified VRTK_PolicyList to use to determine which interactable objects will be able to interact with this specific area.")] + public VRTK_PolicyList validObjectListPolicy; + #endregion + + #region PublicProperties + public VRTK_InteractableObject CurrentInteractionObject + { + get + { + return currentInteractionObject; + } + } + #endregion + + #region ProtectedVariables + protected List currentValidObjects = new List(); + protected VRTK_InteractableObject currentInteractionObject = null; + protected bool interactionStarted = false; + #endregion + + #region EventHandling + // Emitted when a valid interactable object enters the interaction area trigger collider. + public event InteractionAreaEventHandler ObjectEnteredInteractionArea; + + // Emitted when a valid interactable object exists the interaction area trigger collider. + public event InteractionAreaEventHandler ObjectExitedInteractionArea; + + // Emitted when an interactable object starts the interaction with the area. + public event InteractionAreaEventHandler ObjectUsedInteractionArea; + + // Emitted when an interactable object finishes the interaction with the area. + public event InteractionAreaEventHandler ObjectFinishedInteractionArea; + + // Emitted when an interactable object interrupts the user with the area + public event InteractionAreaEventHandler ObjectInterruptInteractionArea; + + /// + /// Called when a valid object enters the collider for the InteractionArea. + /// + /// The event arguments that holds a reference to the InteractableObject. + public virtual void OnObjectEnteredInteractionArea(InteractionAreaEventArgs e) + { + if (ObjectEnteredInteractionArea != null) + { + ObjectEnteredInteractionArea(this, e); + } + } + + /// + /// Called when the valid object leaves the InteractionArea. + /// + /// The event arguments that holds a reference to the InteractableObject. + public virtual void OnObjectExitedInteractionArea(InteractionAreaEventArgs e) + { + if (ObjectExitedInteractionArea != null) + { + ObjectExitedInteractionArea(this, e); + } + } + + /// + /// Called when the interaction event has started in the InteractionArea. + /// + /// The event arguments that holds a reference to the InteractableObject. + public virtual void OnObjectUsedInteractionArea(InteractionAreaEventArgs e) + { + interactionStarted = true; + + if (ObjectUsedInteractionArea != null) + { + ObjectUsedInteractionArea(this, e); + } + } + + /// + /// Called at the end of the interaction event in the InteractionArea. + /// + /// The event arguments that holds a reference to the InteractableObject. + public virtual void OnObjectFinishedInteractionArea(InteractionAreaEventArgs e) + { + interactionStarted = false; + + if (ObjectFinishedInteractionArea != null) + { + ObjectFinishedInteractionArea(this, e); + } + } + + public virtual void OnObjectInterruptInteractionArea(InteractionAreaEventArgs e) + { + interactionStarted = false; + + if (ObjectInterruptInteractionArea != null) + { + ObjectInterruptInteractionArea(this, e); + } + } + + /// + /// Sets the given GameObject and returns the Arguments for an InteractableEvent. This method should be + /// called whenever using one of the 'On' Event Handleing methods. + /// + /// The GameObject that is triggering the event in the InteractionArea. + /// + public static InteractionAreaEventArgs SetInteractionAreaEvent(GameObject interactableObject) + { + VRTK_InteractableObject ioCheck = interactableObject.GetComponent(); + bool interactableHasExtraArgs = false; + + if (ioCheck != null) + { + interactableHasExtraArgs = ioCheck.HasExtraEventArgs; + } + + InteractionAreaEventArgs e = new InteractionAreaEventArgs + { + interactionObject = interactableObject, + hasMoreReactionInfo = interactableHasExtraArgs + }; + + return e; + } + + protected void SetUpInteractableObjectListener(VRTK_InteractableObject obj, bool state) + { + if (state) + { + ObjectEnteredInteractionArea += obj.InteractionAreaEntered; + ObjectExitedInteractionArea += obj.InteractionAreaExited; + ObjectUsedInteractionArea += obj.InteractionAreaUsed; + ObjectFinishedInteractionArea += obj.InteractionAreaFinished; + ObjectInterruptInteractionArea += obj.InteractionAreaInterrupted; + } + else + { + ObjectEnteredInteractionArea -= obj.InteractionAreaEntered; + ObjectExitedInteractionArea -= obj.InteractionAreaExited; + ObjectUsedInteractionArea -= obj.InteractionAreaUsed; + ObjectFinishedInteractionArea -= obj.InteractionAreaFinished; + ObjectInterruptInteractionArea -= obj.InteractionAreaInterrupted; + } + } + #endregion + + #region UnityFunctions + // TODO Remove or refactor this code - allows for setting the goal area for the InteractionArea + /*protected virtual void OnEnable() + { + if (validObjectListPolicy && validObjectListPolicy.gameObjectList != null) + { + for (int n = 0; n < validObjectListPolicy.gameObjectList.Count; n++) + { + // TODO Fix when there are multiple IA for one object [VIRTUOSO-79] + if (validObjectListPolicy.gameObjectList[n] != null) + { + VRTK_InteractableObject interactable = validObjectListPolicy.gameObjectList[n].GetComponentInChildren(); + + if (interactable != null) + { + interactable.GoalInteractionArea = gameObject; + } + } + } + } + }*/ + + protected virtual void Awake() + { + // Check to make sure that the collider is set to be a trigger in order to recieve the right calls + if (GetComponent() != null) + { + GetComponent().isTrigger = true; + } + else + { + Debug.LogWarning("No collider found on " + name + ". Triggers will not be detected and events cannot be propogated."); + } + } + + protected virtual void Update() + { + CheckCurrentValidObjectStillValid(); + } + + protected virtual void OnTriggerEnter(Collider collider) + { + VRTK_InteractableObject ioCheck = ValidInteractableObject(collider.gameObject); + + if (ioCheck && ioCheck != currentInteractionObject) + { + currentInteractionObject = ioCheck; + + SetUpInteractableObjectListener(ioCheck, true); + + OnObjectEnteredInteractionArea(SetInteractionAreaEvent(currentInteractionObject.gameObject)); + } + } + + protected virtual void OnTriggerStay(Collider collider) + { + //Do sanity check to see if there should be an object + if (ValidInteractableObject(collider.gameObject)) + { + AddCurrentValidObject(collider.gameObject); + } + } + + protected virtual void OnTriggerExit(Collider collider) + { + VRTK_InteractableObject ioCheck = ValidInteractableObject(collider.gameObject); + + if (ioCheck) + { + OnObjectExitedInteractionArea(SetInteractionAreaEvent(ioCheck.gameObject)); + + currentInteractionObject = null; + + SetUpInteractableObjectListener(ioCheck, false); + } + } + #endregion + + #region ObjectChecking + protected virtual VRTK_InteractableObject ValidInteractableObject(GameObject checkObject) + { + var currentInteractableObject = checkObject.GetComponentInParent(); + return (currentInteractableObject != null && !VRTK_PolicyList.Check(currentInteractableObject.gameObject, validObjectListPolicy) ? currentInteractableObject : null); + } + + protected virtual void CheckCurrentValidObjectStillValid() + { + //If there is a current valid snap object + for (int i = 0; i < currentValidObjects.Count; i++) + { + var currentIOCheck = currentValidObjects[i].GetComponentInParent(); + + if (currentIOCheck != null /*&& currentIOCheck.StoredInteractionArea != null && currentIOCheck.StoredInteractionArea != gameObject*/) + { + RemoveCurrentValidObject(currentValidObjects[i]); + } + } + } + + protected virtual void AddCurrentValidObject(GameObject givenObject) + { + if (!currentValidObjects.Contains(givenObject)) + { + currentValidObjects.Add(givenObject); + } + } + + protected virtual void RemoveCurrentValidObject(GameObject givenObject) + { + if (currentValidObjects.Contains(givenObject)) + { + currentValidObjects.Remove(givenObject); + + if (currentValidObjects.Count == 0) + { + interactionStarted = false; + } + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs.meta new file mode 100644 index 0000000..331d522 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 81be2159e26d1b847a5cfcb7d5dfa568 +timeCreated: 1526407568 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs new file mode 100644 index 0000000..e94e840 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs @@ -0,0 +1,77 @@ +using UnityEngine.Events; +using VRTK.UnityEventHelper; +using System; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// Allows the user to specify event functions within the editor or use the AddListener function + /// to create reactions to InteractionArea events. This class must be attached to a GameObject + /// that also has the InteractionArea (or child) + /// attached to it. + /// + /// Based on VRTK_UnityEvents + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public sealed class InteractionArea_UnityEvents : VRTK_UnityEvents + { + #region PublicVariables + [Serializable] + public sealed class InteractionAreaEvent : UnityEvent { } + + public InteractionAreaEvent OnObjectEnteredInteractionArea = new InteractionAreaEvent(); + public InteractionAreaEvent OnObjectExitedInteractionArea = new InteractionAreaEvent(); + public InteractionAreaEvent OnObjectStartInteraction = new InteractionAreaEvent(); + public InteractionAreaEvent OnObjectInterruptInteraction = new InteractionAreaEvent(); + public InteractionAreaEvent OnObjectFinishedInteraction = new InteractionAreaEvent(); + #endregion + + #region ListenerMangers + protected override void AddListeners(InteractionArea component) + { + component.ObjectEnteredInteractionArea += ObjectEnteredInteractionArea; + component.ObjectExitedInteractionArea += ObjectExitedInteractionArea; + component.ObjectInterruptInteractionArea += ObjectUnusedInteractionArea; + component.ObjectUsedInteractionArea += ObjectUsedInteractionArea; + component.ObjectFinishedInteractionArea += ObjectFinishedInteractionArea; + } + + protected override void RemoveListeners(InteractionArea component) + { + component.ObjectEnteredInteractionArea -= ObjectEnteredInteractionArea; + component.ObjectExitedInteractionArea -= ObjectExitedInteractionArea; + component.ObjectInterruptInteractionArea -= ObjectUnusedInteractionArea; + component.ObjectUsedInteractionArea -= ObjectUsedInteractionArea; + component.ObjectFinishedInteractionArea -= ObjectFinishedInteractionArea; + } + #endregion + + #region OnEventHandlers + private void ObjectEnteredInteractionArea(object o, InteractionAreaEventArgs e) + { + OnObjectEnteredInteractionArea.Invoke(o, e); + } + + private void ObjectExitedInteractionArea(object o, InteractionAreaEventArgs e) + { + OnObjectExitedInteractionArea.Invoke(o, e); + } + + private void ObjectUsedInteractionArea(object o, InteractionAreaEventArgs e) + { + OnObjectStartInteraction.Invoke(o, e); + } + + private void ObjectUnusedInteractionArea(object o, InteractionAreaEventArgs e) + { + OnObjectInterruptInteraction.Invoke(o, e); + } + + private void ObjectFinishedInteractionArea(object o, InteractionAreaEventArgs e) + { + OnObjectFinishedInteraction.Invoke(o, e); + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs.meta new file mode 100644 index 0000000..fc4772b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a4b69abd0507cbf45b446c3103c85361 +timeCreated: 1526427912 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs new file mode 100644 index 0000000..bee0be1 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs @@ -0,0 +1,112 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// InteractionArea that manages multiple children interaction areas. There is no trigger on this collider, instead it requires every + /// child to fire their finish interaction area once. Order can be given as well which only allows the next interaction area to fire, + /// disabling the future ones until it is their time. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class MultiInteractionArea : InteractionArea + { + #region PublicVariables + public bool enforceOrder = false; + #endregion + + #region PublicProperties + public InteractionArea NextInteractionArea + { + get + { + return childrenAreas[completionCount]; + } + } + #endregion + + #region ProtectedVariables + protected int completionCount = 0; + protected List childrenAreas; + #endregion + + #region UnityFunctions + protected override void Awake() + { + InteractionArea[] allComponentsInChildren = GetComponentsInChildren(); + childrenAreas = new List(); + + // You only need to copy the ones that are direct children of you, no grandchildren and do not keep yourself (so skip index 0) + for(int n = 1; n < allComponentsInChildren.Length; n++) + { + if(allComponentsInChildren[n].transform.parent == transform) + { + childrenAreas.Add(allComponentsInChildren[n]); + + // Make sure your children have a copy of your VRTK Policy and not some other + allComponentsInChildren[n].GetComponent().validObjectListPolicy = GetComponent(); + } + } + + // For each child, hook into their interaction area finishing + for(int n = 0; n < childrenAreas.Count; n++) + { + childrenAreas[n].ObjectFinishedInteractionArea += ChildInteractionFinished; + } + + // Leaves only the first interaction area enabled + if(enforceOrder) + { + SwitchChildren(0); + } + } + #endregion + + #region MultiInteractionAreaFunctions + protected void ChildInteractionFinished(object o, InteractionAreaEventArgs e) + { + int childIndex = (o as InteractionArea).transform.GetSiblingIndex(); + + childrenAreas[childIndex].ObjectFinishedInteractionArea -= ChildInteractionFinished; + + // Disable the collider on the interaction area so no one else can hit it + Collider childCollider = childrenAreas[childIndex].gameObject.GetComponent(); + + if (childCollider != null) + { + childCollider.enabled = false; + } + + completionCount++; + + if(completionCount == childrenAreas.Count) + { + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(gameObject)); + } + else if (enforceOrder) + { + SwitchChildren(completionCount); + } + } + + // Enables the given child and deactives all others + protected void SwitchChildren(int activeChild) + { + for(int n = 0; n < childrenAreas.Count; n++) + { + if(n == activeChild) + { + childrenAreas[n].gameObject.SetActive(true); + } + // Temp work around - if n was not greater then snap interaction areas would disappear + else if (n > activeChild) + { + childrenAreas[n].gameObject.SetActive(false); + } + } + } + #endregion + } +} diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs.meta new file mode 100644 index 0000000..325dbae --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6ba2b522206ed85429448ae1b75e9a24 +timeCreated: 1528730320 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs new file mode 100644 index 0000000..b9334e0 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// InteractionArea that is based on time. The user specifies how long to make the timer. After a valid object + /// enters the area, the timer will start. After the given amount of time, the finish event will go off. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class TimeInteractionArea : InteractionArea + { + #region PublicVariables + [Tooltip("The amount of time (in milliseconds) it takes for the countdown to reach 0.")] + public int timeDuration = 5000; + #endregion + + #region ProtectedVariables + // Maintain single reference to a coroutine so you can only handle one timer at a time + protected Coroutine countdownTimeCoroutine; + #endregion + + #region UnityFunctions + // While any GameObject will send a trigger on this area, a check is made to make sure the gameobject attached to the collider inherits from VRTK_InteractableObject + protected override void OnTriggerEnter(Collider collider) + { + base.OnTriggerEnter(collider); + + if (currentInteractionObject != null) + { + if(countdownTimeCoroutine == null) + { + OnObjectUsedInteractionArea(SetInteractionAreaEvent(collider.gameObject)); + + // Convert the given time in ms to seconds by dividing by the number of ms in a second + countdownTimeCoroutine = StartCoroutine(Countdown(timeDuration / Utilities.Constants.MS_TO_SECONDS)); + } + } + } + + // Same with OnTriggerEnter, only VRTK_InteractableObjects should actually do anything on this trigger + protected override void OnTriggerExit(Collider collider) + { + if (currentInteractionObject != null) + { + if (countdownTimeCoroutine != null) + { + StopCoroutine(countdownTimeCoroutine); + + countdownTimeCoroutine = null; + + OnObjectInterruptInteractionArea(SetInteractionAreaEvent(collider.gameObject)); + } + } + + base.OnTriggerExit(collider); + } + #endregion + + #region Coroutines + IEnumerator Countdown(float duration) + { + yield return new WaitForSeconds(duration); + + if(currentInteractionObject != null) + { + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(currentInteractionObject.gameObject)); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs.meta new file mode 100644 index 0000000..583b256 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7425556c4fcef444d8831a7d5a76888f +timeCreated: 1526923849 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs new file mode 100644 index 0000000..895a9a7 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs @@ -0,0 +1,175 @@ +using CharlesRiverAnalytics.Virtuoso.Reaction; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// InteractionArea that responds to the turning of an interactable object. The IA is able to + /// see two types of rotation: parallel and perpendicular. When set to parallel, the object is + /// facing the same direction (using forward direction) as the IA, e.g. a screwdriver and a screw. + /// With perpendicular, the object is at a 90 to the IA's forward direction, e.g. a ratchet and nut. + /// + /// Some assumptions: + /// For the objects doing the turning, assumes the handle portion goes with the Z-axis. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class TorqueInteractionArea : InteractionArea + { + #region PublicVariables + [Tooltip("The number of complete rotations to tighten/untighten the object.")] + public float completeRotationsToChangeState = 3.0f; + [Tooltip("Allows the user to make less turns by amplifying the amount they turn.")] + public float rotationMultipler = 1.0f; + public TurnType turnRotationType = TurnType.Perpendicular; + public ScrewDirection screwDirection = ScrewDirection.Clockwise; + + /// + /// How the user must turn the controller/hand to affect the object + /// + public enum TurnType + { + /// + /// The controller's roll is used to affect the object + /// + Parallel, + /// + /// The controller's angular velocity is used to affect the object + /// + Perpendicular + } + + /// + /// The direction that the object is going in. + /// + public enum ScrewDirection + { + /// + /// Event is sent when the IA turns all the way in. + /// + Clockwise, + /// + /// Event is sent when the IA turns all the way out. + /// + CounterClockwise + } + #endregion + + #region PrivateVariables + private float rotationAmountLeft; + private float totalRotationNeeded; + private Vector3 previousFrameForwardDirection; + private Vector3 previousFrameRightDirection; + private bool isTurnable = false; + private const float ROTATION_EPSILON = 0.2f; + #endregion + + #region TorqueMethods + private void CalculateTurn() + { + float currentRotation = 0; + + switch (turnRotationType) + { + case TurnType.Parallel: + // Get the roll rotation of the interactable object + currentRotation = Vector3.SignedAngle(previousFrameRightDirection, currentInteractionObject.transform.right, previousFrameForwardDirection); + break; + case TurnType.Perpendicular: + // Get the angle around the torque area + currentRotation = Vector3.SignedAngle(previousFrameForwardDirection, currentInteractionObject.transform.forward, gameObject.transform.forward); + break; + default: + break; + } + + if (Mathf.Abs(currentRotation) > ROTATION_EPSILON) + { + rotationAmountLeft += (currentRotation * rotationMultipler); + + OnObjectUsedInteractionArea(LinearMotionReactionArgs.SetInteractionAreaEvent(currentInteractionObject.gameObject, + 1.0f - (rotationAmountLeft / totalRotationNeeded) + )); + } + + if (rotationAmountLeft <= 0 && screwDirection == ScrewDirection.Clockwise) + { + rotationAmountLeft = 0; + + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(currentInteractionObject.gameObject)); + + ChangeScrewDirection(); + } + else if(rotationAmountLeft >= totalRotationNeeded && screwDirection == ScrewDirection.CounterClockwise) + { + rotationAmountLeft = totalRotationNeeded; + + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(currentInteractionObject.gameObject)); + + ChangeScrewDirection(); + } + + previousFrameForwardDirection = currentInteractionObject.transform.forward; + previousFrameRightDirection = currentInteractionObject.transform.right; + } + + private void ChangeScrewDirection() + { + screwDirection = (screwDirection == ScrewDirection.Clockwise) ? ScrewDirection.CounterClockwise : ScrewDirection.Clockwise; + + CalculateRotationAmount(); + } + + private void CalculateRotationAmount() + { + rotationAmountLeft = (screwDirection == ScrewDirection.Clockwise) ? totalRotationNeeded : 0.0f; + } + #endregion + + #region InteractionAreaOverrides + public override void OnObjectEnteredInteractionArea(InteractionAreaEventArgs e) + { + base.OnObjectEnteredInteractionArea(e); + + if (currentInteractionObject != null) + { + // Get the starting directions to go off of + previousFrameForwardDirection = currentInteractionObject.transform.forward; + previousFrameRightDirection = currentInteractionObject.transform.right; + + isTurnable = true; + } + } + + public override void OnObjectExitedInteractionArea(InteractionAreaEventArgs e) + { + base.OnObjectExitedInteractionArea(e); + + isTurnable = false; + } + #endregion + + #region Unity Functions + protected void OnEnable() + { + totalRotationNeeded = completeRotationsToChangeState * 360.0f; + + CalculateRotationAmount(); + } + + protected override void Update() + { + base.Update(); + + if(isTurnable && currentInteractionObject != null) + { + CalculateTurn(); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs.meta new file mode 100644 index 0000000..fc6817a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 45225cc6c7aeb3447b1c46fca0e52e3c +timeCreated: 1548871781 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs b/Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs new file mode 100644 index 0000000..ec04f70 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs @@ -0,0 +1,69 @@ +using CharlesRiverAnalytics.Virtuoso.Interfaces; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.InteractionAreas +{ + /// + /// The volume interaction area is a way for something to be filled and send an event when it reaches the threshold level. + /// The volume does not need to be fluid based, such as with the filling of a wound with gauze. The user specifies how + /// much volume needs to be filled and the interactable object must tell it how much it fills it by. + /// + /// Written by: Nicolas Herrera, 2018 + /// + public class VolumeInteractionArea : InteractionArea + { + #region PublicVariables + [Tooltip("The total amount of volume that needs to be filled in cm^3.")] + public float totalVolume = 1.0f; + #endregion + + #region PrivateVariables + private float currentVolumeFilled = 0.0f; + private bool reachedTotalVolume = false; + #endregion + + #region UnityFunctions + protected override void OnTriggerEnter(Collider collider) + { + base.OnTriggerEnter(collider); + + if(currentInteractionObject != null) + { + IVolume volumeFiller = currentInteractionObject as IVolume; + + if(volumeFiller != null) + { + currentVolumeFilled += volumeFiller.GetVolumeAmount(); + + // TODO Make it look like the volume has changed (maybe in a shader) VolumeReaction -[VIRTUOSO-81] + + if (!interactionStarted) + { + interactionStarted = true; + + OnObjectUsedInteractionArea(SetInteractionAreaEvent(collider.gameObject)); + } + } + } + } + + protected override void OnTriggerStay(Collider collider) + { + base.OnTriggerStay(collider); + + if (currentInteractionObject != null ) + { + if(currentVolumeFilled >= totalVolume && !reachedTotalVolume) + { + OnObjectFinishedInteractionArea(SetInteractionAreaEvent(collider.gameObject)); + + // Allow this message to only be called once + reachedTotalVolume = true; + } + } + } + #endregion + } +} + + \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs.meta b/Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs.meta new file mode 100644 index 0000000..2e39f68 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5be1b6c22095fee448e9759dc63d1734 +timeCreated: 1527608225 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Interfaces.meta b/Assets/VIRTUOSO/Scripts/Interfaces.meta new file mode 100644 index 0000000..6979555 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Interfaces.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2c1f2ca1ce4ae5745bf9e0781a9a0355 +folderAsset: yes +timeCreated: 1544120516 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs b/Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs new file mode 100644 index 0000000..c3d275a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs @@ -0,0 +1,14 @@ +using System; + +/// +/// Default methods for reactions to implement. Follows the Standard .Net event pattern +/// for the method signature. +/// +/// Written by: Nicolas Herrera (nherrera@cra.com), 2019 +/// +public interface IReaction +{ + void StartReaction(object o, EventArgs e); + + void StopReaction(object o, EventArgs e); +} diff --git a/Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs.meta new file mode 100644 index 0000000..91cf553 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e2d4265445ea3194298bb7fa61994b4e +timeCreated: 1550592448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs b/Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs new file mode 100644 index 0000000..2e0e499 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Interfaces +{ + /// + /// Interface that must be implemented by any interactable object that wants to interact with + /// the volume interaction area. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public interface IVolume + { + float GetVolumeAmount(); + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs.meta b/Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs.meta new file mode 100644 index 0000000..a35b00a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5b17b391594607144882a068e3bddfa2 +timeCreated: 1544120534 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions.meta b/Assets/VIRTUOSO/Scripts/Reactions.meta new file mode 100644 index 0000000..f8cf125 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 658be1060b8c80a41bc67eb1aaaa0a31 +folderAsset: yes +timeCreated: 1544108878 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs new file mode 100644 index 0000000..5f108ab --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs @@ -0,0 +1,41 @@ +using System; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// Reacts to interaction area events by changing the color of the object this is attached to. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class ColorChangeReaction : GenericReaction + { + #region PublicVariables + public Color startColorToChangeTo = Color.blue; + public Color endColorToChangeTo = Color.blue; + #endregion + + #region ProtectedVariables + protected Material materialToChange; + #endregion + + #region UnityFunctions + public void Awake() + { + materialToChange = GetComponent().material; + } + #endregion + + #region ReactionEventImplementation + public override void StartReaction(object o, EventArgs e) + { + materialToChange.color = startColorToChangeTo; + } + + public override void StopReaction(object o, EventArgs e) + { + materialToChange.color = endColorToChangeTo; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs.meta new file mode 100644 index 0000000..54edb52 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a41675704ec4cf94b87c03ebe898057b +timeCreated: 1527696204 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs new file mode 100644 index 0000000..872de4e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs @@ -0,0 +1,93 @@ +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// Similiar to VRTK_InteractObjectAppearance, allows for the controller's appearance to be + /// changed based on any event. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), Feb 2019 + /// + public class ControllerAppearanceReaction : GenericReaction + { + #region PublicVariables + #endregion + + #region PrivateVariables + private GameObject controllerModel; + #endregion + + #region ApperanceMethods + private GameObject GetControllerModelFromEvent(EventArgs e) + { + InteractionAreaEventArgs interactionAreaEventArgs = e as InteractionAreaEventArgs; + + if (interactionAreaEventArgs != null) + { + if (interactionAreaEventArgs.hasMoreReactionInfo) + { + ControllerEventArgSender eventArgsSender = interactionAreaEventArgs.interactionObject.GetComponent(); + + if (eventArgsSender != null) + { + ControllerReactionEventArgs eventArgs = eventArgsSender.GetEventArgs() as ControllerReactionEventArgs; + + return VRTK_DeviceFinder.GetModelAliasController(eventArgs.interactingController); + } + } + } + + return null; + } + #endregion + + #region ReactionImplementation + public override void StartReaction(object o, EventArgs e) + { + // See if this is directly an InteractableObject event + InteractableObjectEventArgs interactableArgs = e as InteractableObjectEventArgs; + + if(interactableArgs != null) + { + controllerModel = VRTK_DeviceFinder.GetModelAliasController(interactableArgs.interactingObject); + } + else + { + controllerModel = GetControllerModelFromEvent(e); + } + + if (controllerModel != null) + { + VRTK_ObjectAppearance.SetRendererHidden(controllerModel); + } + } + + public override void StopReaction(object o, EventArgs e) + { + if (controllerModel != null) + { + VRTK_ObjectAppearance.SetRendererVisible(controllerModel); + } + + controllerModel = null; + } + #endregion + + #region Unity Functions + void Start() + { + + } + + void Update() + { + + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs.meta new file mode 100644 index 0000000..6630eb8 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3a398e73125744148a8f74d83cf81f67 +timeCreated: 1551198386 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs new file mode 100644 index 0000000..cf4737f --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs @@ -0,0 +1,54 @@ +using System; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// Reaction to apply a force to a GameObject. If the given game object does not a have a rigid body, + /// then one is added to it automatically. If the object is set to be kinematic, then that option will be set + /// to false so that the force can be applied. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class ForceReaction : GenericReaction + { + [Tooltip("The direction and force that should be applied to the GameObject.")] + public Vector3 forceDirection = Vector3.forward; + [Tooltip("How the force is applied to the GameObject. Please see Unity documentation for more information.")] + public ForceMode forceMode = ForceMode.Impulse; + [Tooltip("Optional parameter. Fill in if this script is not attached to the GameObject that will receive the force.")] + public GameObject objectToApplyForce; + + #region UnityFunctions + public void Awake() + { + if(objectToApplyForce == null) + { + objectToApplyForce = gameObject; + } + } + #endregion + + #region ReactionImplementation + public override void StartReaction(object o, EventArgs e) + { + Rigidbody attachedRigidbody = objectToApplyForce.GetComponent(); + + if(attachedRigidbody == null) + { + attachedRigidbody = objectToApplyForce.AddComponent(); + } + + attachedRigidbody.isKinematic = false; + + attachedRigidbody.AddForce(forceDirection, forceMode); + } + + [HideMethodFromInspector] + public override void StopReaction(object o, EventArgs e) + { + // No-op + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs.meta new file mode 100644 index 0000000..f0cb1ea --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b71bef1da5e0b524a91c7602195d6c4d +timeCreated: 1534269183 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs new file mode 100644 index 0000000..407b461 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs @@ -0,0 +1,27 @@ +using System; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// The base script that any custom reaction needs to inherit from. It requires that the derive class + /// implements two functions, {Start/Stop}Reaction. Reactions should always be thought of being independent + /// of the class generating the events to start the reaction, so care should be taken (but it's fine and possible) + /// to not create any dependencies in reaction scripts. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + [DisallowMultipleComponent] + public class GenericReaction : MonoBehaviour, IReaction + { + public virtual void StartReaction(object o, EventArgs e) + { + throw new NotImplementedException(); + } + + public virtual void StopReaction(object o, EventArgs e) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs.meta new file mode 100644 index 0000000..3a81cfb --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6a0f533aa5762eb46a2e4800613ac7c8 +timeCreated: 1534250060 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs new file mode 100644 index 0000000..96de8c1 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs @@ -0,0 +1,51 @@ +using System; +using CharlesRiverAnalytics.Virtuoso.Haptic; +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// Reaction event for playing haptics with the Haptic SDK. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class HapticReaction : GenericReaction + { + #region PublicVariables + public HumanBodyBones bodyPart; + public ScriptableHapticPattern hapticPattern; + #endregion + + #region PrivateVariables + private HapticManager hapticManager; + #endregion + + #region ReactionEventImplementation + public override void StartReaction(object o, EventArgs e) + { + hapticManager.PlayPattern(bodyPart, hapticPattern); + } + + public override void StopReaction(object o, EventArgs e) + { + hapticManager.CancelPatternPlayingOnBody(bodyPart); + } + #endregion + + #region UnityFunction + private void Start() + { + hapticManager = FindObjectOfType(); + + if(hapticManager == null) + { + Debug.LogError("Cannot play any haptic reactions as there is no haptic manager in the scene.", this); + + enabled = false; + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs.meta new file mode 100644 index 0000000..ebee75b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c9debd9feb2c98040b9bdf03ddc36536 +timeCreated: 1530822555 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs new file mode 100644 index 0000000..e4fdf51 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs @@ -0,0 +1,82 @@ +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// Event Payload + /// Extends the InteractionAreaEvent so it can get a value to lerp between. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), Jan 2019 + /// + public class LinearMotionReactionArgs : InteractionAreaEventArgs + { + public float lerpAmount; + + public static LinearMotionReactionArgs SetInteractionAreaEvent(GameObject interactableObject, float lerpValue) + { + LinearMotionReactionArgs e = new LinearMotionReactionArgs + { + interactionObject = interactableObject, + lerpAmount = lerpValue + }; + + return e; + } + } + + /// + /// A reaction to linearly move an object based on it's position at the start and a given + /// direction and magnitude. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), Jan 2019 + /// + public class LinearMotionReaction : GenericReaction + { + #region PublicVariables + [Tooltip("The object whose position will be affected by this reaction. Defaults to the GameObject this is attached to.")] + public GameObject rootObject; + [Tooltip("The change in local position the object must traverse.")] + public float stopMagnitude; + [Tooltip("The direction the stop position is in. Based on the attached object's transform.")] + public Vector3 stopDirection = Vector3.back; + #endregion + + #region PrivateVariables + private Vector3 orignalRootPosition; + private Vector3 traversedRootPosition; + #endregion + + #region Unity Functions + protected void OnEnable() + { + if (rootObject == null) + { + rootObject = gameObject; + } + + orignalRootPosition = rootObject.transform.position; + + traversedRootPosition = rootObject.transform.position + (stopDirection.normalized * stopMagnitude); + } + #endregion + + #region GenericReactionOverrideImplementation + public override void StartReaction(object o, EventArgs e) + { + LinearMotionReactionArgs args = e as LinearMotionReactionArgs; + + rootObject.transform.position = Vector3.Lerp(orignalRootPosition, traversedRootPosition, args.lerpAmount); + } + + [HideMethodFromInspector] + public override void StopReaction(object o, EventArgs e) + { + // No-op + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs.meta new file mode 100644 index 0000000..b009c30 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7d7447cfe4a389240a866ab0e27caea3 +timeCreated: 1549056197 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs b/Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs new file mode 100644 index 0000000..86ca422 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using CharlesRiverAnalytics.Virtuoso.Utilities; +using System.Reflection; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// Allows for hooking up any event system to the reactions provided in VIRTUOSO. Pass this class a component with + /// events and select the reactions for each event in the provided class. The events signature in the class must follow + /// the standard .Net event pattern (https://docs.microsoft.com/en-us/dotnet/csharp/event-pattern) in order to work. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), December 2018 + /// + [Serializable] + public class Reactor : MonoBehaviour, ISerializationCallbackReceiver + { + #region PublicVariables + [Tooltip("The component that will send out events that will trigger the reactions to fire.")] + public Component eventSender; + [HideInInspector] + public Component lastUsedComponent; + [HideInInspector] + public Dictionary reactionsPerEventDictionary = new Dictionary(); + #endregion + + #region ProtectedVariables + protected List dynamicEventList; + // These guys are used to temporarily hold the dictionary keys/values to help serialize the dictionary + [SerializeField] + protected List _keyList = new List(); + [SerializeField] + protected List _valueList = new List(); + #endregion + + #region UnityFunctions + public void Awake() + { + dynamicEventList = new List(); + + // Go through every event and hook into the given reactions + if(eventSender != null) + { + foreach(string key in reactionsPerEventDictionary.Keys) + { + for(int n = 0; n < reactionsPerEventDictionary[key].reactionList.Count; n++) + { + // Skip any null reactions + if(reactionsPerEventDictionary[key].reactionList[n] != null) + { + dynamicEventList.Add(EventUtility.SubscribeToEvent(reactionsPerEventDictionary[key].reactionList[n], + eventSender, + key, + reactionsPerEventDictionary[key].reactionTriggerMethodList[n], + eventSender.GetType(), + reactionsPerEventDictionary[key].reactionList[n].GetType(), + BindingFlags.Instance | BindingFlags.Public)); + } + } + } + } + } + + protected void OnDisable() + { + // Unregister from all dynamic events + EventUtility.UnsubscribeFromAllEvents(dynamicEventList); + } + #endregion + + #region EditorHelperMethods + public void AddDictionaryKey(string key, bool foldout, List reactions, List triggerList, List triggerIndexSelection/*, List reactionIndexSelection*/) + { + ReactorEditorInfo currentValue = new ReactorEditorInfo() + { + foldoutOpenStatus = foldout, + reactionList = reactions, + reactionTriggerMethodList = triggerList, + reactionTriggerIndexSelectionList = triggerIndexSelection + }; + + if(reactionsPerEventDictionary.ContainsKey(key)) + { + reactionsPerEventDictionary[key] = currentValue; + } + else + { + reactionsPerEventDictionary.Add(key, currentValue); + } + } + + public void Clear() + { + reactionsPerEventDictionary.Clear(); + } + + public List GetDictionaryItems() + { + List builtEditorList = new List(); + + foreach (string key in reactionsPerEventDictionary.Keys) + { + ReactorEditorInfo currentEditorInfo = new ReactorEditorInfo + { + foldoutOpenStatus = reactionsPerEventDictionary[key].foldoutOpenStatus, + reactionList = reactionsPerEventDictionary[key].reactionList, + reactionTriggerMethodList = reactionsPerEventDictionary[key].reactionTriggerMethodList, + reactionTriggerIndexSelectionList = reactionsPerEventDictionary[key].reactionTriggerIndexSelectionList + }; + + builtEditorList.Add(currentEditorInfo); + } + + return builtEditorList; + } + #endregion + + #region ISerializationCallbackReceiverImplementation + // Implementation provided by Unity: https://docs.unity3d.com/ScriptReference/ISerializationCallbackReceiver.html + public void OnBeforeSerialize() + { + _keyList.Clear(); + _valueList.Clear(); + + foreach (var kvp in reactionsPerEventDictionary) + { + _keyList.Add(kvp.Key); + _valueList.Add(kvp.Value); + } + } + + public void OnAfterDeserialize() + { + for (int i = 0; i < _keyList.Count; i++) + { + if(reactionsPerEventDictionary.ContainsKey(_keyList[i])) + { + reactionsPerEventDictionary[_keyList[i]] = _valueList[i]; + } + else + { + reactionsPerEventDictionary.Add(_keyList[i], _valueList[i]); + } + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs.meta new file mode 100644 index 0000000..06eff60 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 064eb441a0471cf45a3356d08a2067a9 +timeCreated: 1544130328 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs b/Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs new file mode 100644 index 0000000..d51432a --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// Helper class to hold various information for the event-reaction pair in the editor. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), December 2018 + /// + [Serializable] + public class ReactorEditorInfo + { + #region PublicVariables + public bool foldoutOpenStatus; + public List reactionList; + public List reactionTriggerMethodList; + public List reactionTriggerIndexSelectionList; + #endregion + + #region HelperMethods + public void RemoveElementsAt(int index) + { + reactionList.RemoveAt(index); + reactionTriggerMethodList.RemoveAt(index); + reactionTriggerIndexSelectionList.RemoveAt(index); + } + #endregion + } +} diff --git a/Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs.meta new file mode 100644 index 0000000..a413a06 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ec7aca29ff039b64bb894393cb55b2c9 +timeCreated: 1545150856 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs new file mode 100644 index 0000000..b77814b --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections; +using CharlesRiverAnalytics.Virtuoso.InteractionAreas; +using UnityEngine; +using VRTK; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// This sets up a predefined area where an existing interactable object can be snapped to. Since it's a reaction, + /// any interaction area's finish event can trigger the snap condition. By default, the snap will occur to the + /// transform on the GameObject where it is attached. One can specify any arbitrary transform or ignore rotation + /// if needed. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public class SnapReaction : GenericReaction + { + #region PublicVariables + [Tooltip("When checked, the object will snap by becoming a child of the given transform. If this is unchecked and no joint is " + + "attached to the gameobject, the script will default to snap by parenting.")] + public bool snapByParenting = false; + [Tooltip("The amount of time it takes for the object being snapped to move into the new snapped position and rotation.")] + public float snapDuration = 0f; + [Tooltip("When checked, the object will not move to a specific transform but stay snapped where it was released.")] + public bool snapToReleaseArea = false; + [Tooltip("Set this to any transform if there is a specific rotation or location you want the object to snap to. If set, it " + + "will override all other transform settings.")] + public Transform specifiedTransform; + [Tooltip("When checked, the object will only move to the snap location, but not rotate in the direction of the transform.")] + public bool ignoreRotation = false; + [Tooltip("The amount of force required to break the joint, if snapping by joint.")] + public float jointBreakForce = 0.0f; + [Tooltip("The normalized direction of force required to break the joint, if snapping by joint.")] + public Vector3 jointBreakDirection = Vector3.zero; + #endregion + + #region PrivateVariables + private Joint attachmentJoint; + private Transform originalParent; + private GameObject snappedObject; + private float additionalJointBreakForce; + + // Amount of frames that must pass before an object can be unsnapped by breaking the joint + // This helps with a few cases where the tool wants to unsnap right after snapping + private const int FRAMES_BEFORE_UNSNAP = 60; + // The angle amount (in degrees) that the current force on the joint must reach in order to break + private const float angleToBreakSnap = 90.0f; + private int snappedAtFrame = 0; + #endregion + + #region UnityFunctions + protected void Awake() + { + attachmentJoint = GetComponent(); + + if (!snapByParenting && attachmentJoint == null) + { + snapByParenting = true; + Debug.LogWarning("No joint on SnapReaction script attached to " + name + ". Switching to snap by parenting."); + } + + jointBreakDirection = jointBreakDirection.normalized; + } + + protected void Update() + { + // Since Unity's API causes a joint to be removed when broken, check for a 'break' here and simply remove the connecting body + if(attachmentJoint?.connectedBody != null && Time.frameCount - snappedAtFrame > FRAMES_BEFORE_UNSNAP) + { + float angleDifference = Vector3.Angle(jointBreakDirection, attachmentJoint.currentForce); + + if (angleDifference < angleToBreakSnap) + { + // The greater the angle difference, the greater the extra force is needed to 'break' the joint + float additionalForce = jointBreakForce * (angleDifference / 90.0f); + + if(attachmentJoint.currentForce.z > (additionalForce + jointBreakForce)) + { + attachmentJoint.connectedBody = null; + } + } + } + } + #endregion + + #region ReactionImplementation + public override void StartReaction(object o, EventArgs e) + { + InteractionAreaEventArgs interactionAreaEventArgs = e as InteractionAreaEventArgs; + + if (interactionAreaEventArgs != null) + { + // See if there is more data that is needed for this reaction + if(interactionAreaEventArgs.hasMoreReactionInfo) + { + SnapEventArgSender snapEventSender = interactionAreaEventArgs.interactionObject.GetComponent(); + + if (snapEventSender != null) + { + SnapReactionEventArgs snapEventArgs = snapEventSender.GetEventArgs() as SnapReactionEventArgs; + SnapObject(snapEventArgs.interactionObject, snapEventArgs.snapLocation, snapEventArgs.keepObjectGrabbable); + } + else + { + SnapObject(interactionAreaEventArgs.interactionObject); + } + } + else + { + SnapObject(interactionAreaEventArgs.interactionObject); + } + } + } + + public override void StopReaction(object o, EventArgs e) + { + UnsnapObject(); + } + #endregion + + #region SnapFunctions + protected virtual void SnapObject(GameObject interactionObject, Transform snapOffset = null, bool objectIsGrabbable = false) + { + VRTK_InteractableObject currentInteractableObject = interactionObject.GetComponentInParent(); + + //If the item is in a snappable position and this drop zone isn't snapped and the collider is a valid interactable object + if (currentInteractableObject != null) + { + snappedObject = currentInteractableObject.gameObject; + snappedAtFrame = Time.frameCount; + + // Make sure the object being snapped doesn't start to interfere with other objects + if (!objectIsGrabbable) + { + currentInteractableObject.GetComponentInChildren().enabled = false; + } + + StartCoroutine(UpdateTransformDimensions(currentInteractableObject, snapDuration, snapOffset)); + } + } + + protected virtual void UnsnapObject() + { + if (attachmentJoint != null) + { + attachmentJoint.connectedBody = null; + } + else + { + snappedObject.transform.parent = originalParent; + + originalParent = null; + } + + snappedObject = null; + } + + protected virtual IEnumerator UpdateTransformDimensions(VRTK_InteractableObject ioCheck, float duration, Transform snapOffset = null) + { + + Transform ioTransform = ioCheck.transform; + Quaternion startRotation = ioTransform.rotation; + Vector3 startScale = ioTransform.localScale; + Vector3 startPosition = ioTransform.position; + + bool storedKinematicState = ioCheck.isKinematic; + ioCheck.isKinematic = true; + + Transform endTransform; + + if (specifiedTransform != null) + { + endTransform = specifiedTransform; + } + else if (snapToReleaseArea) + { + endTransform = ioTransform; + } + else + { + endTransform = gameObject.transform; + } + + float elapsedTime = 0f; + + while (elapsedTime <= duration && !snapToReleaseArea) + { + elapsedTime += Time.deltaTime; + + if (ioTransform != null) + { + ioTransform.position = Vector3.Lerp(startPosition, endTransform.position, (elapsedTime / duration)); + + if (snapOffset != null) + { + ioTransform.position += snapOffset.localPosition; + } + + if (!ignoreRotation) + { + ioTransform.rotation = Quaternion.Lerp(startRotation, endTransform.rotation, (elapsedTime / duration)); + } + } + + yield return null; + } + + //Force all to the last setting in case anything has moved during the transition + ioTransform.position = endTransform.position; + + if (snapOffset != null) + { + ioTransform.position += snapOffset.localPosition; + } + + if (!ignoreRotation) + { + ioTransform.rotation = endTransform.rotation; + } + + ioCheck.isKinematic = storedKinematicState; + ioCheck.SaveCurrentState(); + + SetSnapJoint(ioCheck); + } + + protected virtual void SetSnapJoint(VRTK_InteractableObject interactableObject) + { + Rigidbody snapTo = interactableObject.GetComponent(); + + // No rigidbody on the object, use parenting instead + if (snapTo != null && !snapByParenting) + { + // Remove all forces on the object + snapTo.useGravity = false; + snapTo.velocity = Vector3.zero; + snapTo.angularVelocity = Vector3.zero; + + if (attachmentJoint == null) + { + VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "SnapInteractionArea:" + name, "Joint", "the same", " because the `Snap Type` is set to `Use Joint`")); + return; + } + + attachmentJoint.connectedBody = snapTo; + } + else + { + originalParent = interactableObject.transform.parent; + + interactableObject.transform.parent = transform; + } + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs.meta new file mode 100644 index 0000000..a9a4842 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5f39697afde354f4faac04c156b4d222 +timeCreated: 1532552039 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs b/Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs new file mode 100644 index 0000000..0eb0a84 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine.Events; + +namespace CharlesRiverAnalytics.Virtuoso.Reaction +{ + /// + /// A simple, but powerful class. If there is a specific function that needs to be called as a + /// reaction, simply use this class and fill in the GameObject and function in the UnityEvent. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// + public class UnityEventReaction : GenericReaction + { + #region PublicVariables + public UnityEvent eventSystem; + #endregion + + #region ReactionEventImplementation + public override void StartReaction(object o, EventArgs e) + { + eventSystem.Invoke(); + } + + [HideMethodFromInspector] + public override void StopReaction(object o, EventArgs e) + { + // No-op + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs.meta b/Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs.meta new file mode 100644 index 0000000..717e4ad --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 022854b5df8de384ca8cbebb775ce4e1 +timeCreated: 1537281945 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities.meta b/Assets/VIRTUOSO/Scripts/Utilities.meta new file mode 100644 index 0000000..812d287 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 52711769e018e3b4796bd59b9646faa2 +folderAsset: yes +timeCreated: 1544108878 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities/Constants.cs b/Assets/VIRTUOSO/Scripts/Utilities/Constants.cs new file mode 100644 index 0000000..05ea6d4 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/Constants.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// Helper utility for constants that may be used in several files, defined here so they + /// will not exist in multiple places. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + public static class Constants + { + public const float MS_TO_SECONDS = 1000.0f; + public const float FT_TO_M = 0.3048f; + public const int MAX_OPENVR_OBJECTS = 16; + + public static string EditorPrefLocation + { + get + { + return Application.productName + ".VIRTUOSO."; + } + } + + public static readonly string[] reactionTriggerMethods = { "StartReaction", "StopReaction" }; + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Utilities/Constants.cs.meta b/Assets/VIRTUOSO/Scripts/Utilities/Constants.cs.meta new file mode 100644 index 0000000..7d80a8d --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/Constants.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0ea0da9606450e54480ca13d9397c4be +timeCreated: 1544110672 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs b/Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs new file mode 100644 index 0000000..23d7b64 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs @@ -0,0 +1,178 @@ +using System; +using System.Reflection; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// A utility class that helps with managing events at runtime. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), September 2018 + /// + public static class EventUtility + { + /// + /// Allows for the subscription of event when the event is not known ahead of time and must be + /// identified as a string. + /// + /// The instance of type T that will listen for the event. + /// The instance of type Y that will send out the event. + /// The string representing the name of the event. + /// The string representing the name of the method to call. + /// Nullable, if provided will use the provided type to find the events of the event speaker. + /// Nullable, if provided will the class type to find the method to call. + /// Flags for finding a method. Defaults to finding Public, Instance methods. + /// The information needed to unsubscribe to the event. + public static DynamicDelegate SubscribeToEvent(T listener, Y eventSpeaker, string eventName, string methodHandleName, Type overrideEventSpeakerType = null, Type classWithMethod = null, BindingFlags methodBindingFlags = BindingFlags.Instance | BindingFlags.Public) + { + EventInfo eventInfo; + MethodInfo eventHandleMethod; + + if (overrideEventSpeakerType == null) + { + eventInfo = typeof(Y).GetEvent(eventName); + } + else + { + eventInfo = overrideEventSpeakerType.GetEvent(eventName); + } + + if(classWithMethod == null) + { + eventHandleMethod = typeof(T).GetMethod(methodHandleName, methodBindingFlags); + } + else + { + eventHandleMethod = classWithMethod.GetMethod(methodHandleName, methodBindingFlags); + } + + if (eventInfo != null && eventInfo.EventHandlerType != null) + { + Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, listener, eventHandleMethod); + + if (handler != null) + { + eventInfo.AddEventHandler(eventSpeaker, handler); + + return new DynamicDelegate(eventInfo, eventSpeaker, handler); + } + else + { + Debug.LogError("Could not create delegate for event " + eventName + " with method " + methodHandleName); + } + } + + return null; + } + + /// + /// Allows for the subscription of event when the event is not known ahead of time and must be + /// identified as a string. Use this method when the eventSpeaker is inherited from a class and the + /// pass variable is not of the derived class. + /// + /// + /// The instance of type T that will listen for the event. + /// The instance of type Y that will send out the event. + /// The string representing the name of the event. + /// The string representing the name of the method. + /// The information needed to unsubscribe to the event. + public static DynamicDelegate SubscribeToEvent(T listener, Y eventSpeaker, Type eventType, string eventName, string methodHandleName) + { + EventInfo eventInfo = eventType.GetEvent(eventName); + MethodInfo eventHandleMethod = typeof(T).GetMethod(methodHandleName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + if (eventInfo != null && eventInfo.EventHandlerType != null) + { + //Delegate handler = Delegate.CreateDelegate(handlerType, listener, eventHandler, false, false); + Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, listener, eventHandleMethod); + + if (handler != null) + { + eventInfo.AddEventHandler(eventSpeaker, handler); + + return new DynamicDelegate(eventInfo, eventSpeaker, handler); + } + else + { + Debug.LogError("Could not create delegate for event " + eventName + " with method " + methodHandleName); + } + } + + return null; + } + + /// + /// Helper method to unsubscribe from all of a class' DynamicDelegates. + /// + /// List of DynamicDelegates + public static void UnsubscribeFromAllEvents(List delegateList) + { + for (int n = 0; n < delegateList.Count; n++) + { + if (delegateList[n] != null) + { + delegateList[n].UnsubscribeEvent(); + } + } + } + + /// + /// Uses Reflection to provide the list of strings of the event names of the provided class. + /// + /// The object you want to pull the events from. + /// When set to true, will add 'None' to the front of the array. + /// The array of string event names + public static string[] GetEventNameArray(T givenObject, bool addPlaceHolder = false) + { + return GetEventList(givenObject.GetType(), addPlaceHolder); + } + + public static string[] GetEventList(Type givenType, bool addPlaceHolder = false) + { + EventInfo[] eventInfoList = givenType.GetEvents(); + + string[] tempEventList = eventInfoList.Select(x => x.Name).ToArray(); + + if (addPlaceHolder) + { + // Add 'None' to the list of options so it defaults to it + string[] eventList = new string[tempEventList.Length + 1]; + eventList[0] = "None"; + Array.Copy(tempEventList, 0, eventList, 1, tempEventList.Length); + + return eventList; + } + else + { + return tempEventList; + } + } + } + + /// + /// Custom structure to hold data about any event delegate that is created at run time. In order to unsubscribe from + /// a dynamically created event, the reference to the the event, the target it was applied to, and the delegate + /// itself is needed. This class helps by holding all those references and stored after it is created so it can be + /// unsubscribed to at the end of the game's life. + /// + public class DynamicDelegate + { + public EventInfo eventInfo; + public object target; + public Delegate methodHandler; + + public DynamicDelegate(EventInfo givenEventInfo, object givenTarget, Delegate givenMethodHandler) + { + eventInfo = givenEventInfo; + target = givenTarget; + methodHandler = givenMethodHandler; + } + + public void UnsubscribeEvent() + { + eventInfo.RemoveEventHandler(target, methodHandler); + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs.meta b/Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs.meta new file mode 100644 index 0000000..d7d2c2e --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 664e291b1130aa2449fc1946717d38a6 +timeCreated: 1538074351 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs new file mode 100644 index 0000000..3cfc4a5 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Scriptable +{ + /// + /// Contains all the necessary start up info for creating a line renderer in a script. Since + /// a line renderer requires a material component, by having a simple ScriptableObject, any + /// line renderer that reuses the scriptable object has a good amount of memory savings by + /// referencing the same material (and it makes set up easy with the line renderer with reuse). + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// + [CreateAssetMenu(fileName = "New Line Renderer", menuName = "VIRTUOSO/Create Line")] + public class ScriptableLineRenderer : ScriptableObject + { + public Material lineMaterial; + public Color lineStartColor; + public Color lineEndColor; + public float startLineWidth; + public float endLineWidth; + public float widthMultiplier; + public int numCornerVertices; + public int numCapVertices; + public bool receiveShadows; + public bool allowOcclusionWhenDynamic; + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs.meta b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs.meta new file mode 100644 index 0000000..e497ddc --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c441f2904825f5c4f95a8d74509d8442 +timeCreated: 1544111585 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs new file mode 100644 index 0000000..50eb0ea --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs @@ -0,0 +1,100 @@ +using UnityEngine; +using System.IO; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// Helper class that contains a set of methods for managing scriptable object assets. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public static class ScriptableObjectUtility + { +#if UNITY_EDITOR + /// + /// Saves a scriptable object in a specified location with a specified name. + /// + /// The scriptable object to save + /// The folder location to hold the scriptable object + /// The file name for the scriptable object + public static void SaveScriptableObject(ScriptableObject objectToSave, string filePath, string fileName) + { + // Check to make sure the path exists + if (!AssetDatabase.IsValidFolder(filePath)) + { + System.IO.Directory.CreateDirectory(filePath); + } + + // Check to make sure that a file name was given, if not default it + if (string.IsNullOrWhiteSpace(fileName)) + { + fileName = "UnNamedScriptableObject"; + } + + string fullPath = filePath + fileName + ".asset"; + + if (!AssetDatabase.Contains(objectToSave)) + { + AssetDatabase.CreateAsset(objectToSave, fullPath); + } + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + + /// + /// Renames a scriptable object's file name with the provided new one + /// + /// The scriptable object to change + /// The new file name + public static void RenameScriptableObjectFile(ScriptableObject objectToRename, string fileName) + { + string assetPath = AssetDatabase.GetAssetPath(objectToRename.GetInstanceID()); + + if (!string.IsNullOrEmpty(assetPath)) + { + // Check to make sure that a file name was given, if not default it + if (string.IsNullOrWhiteSpace(fileName)) + { + fileName = "UnNamedScriptableObject"; + } + + AssetDatabase.RenameAsset(assetPath, fileName); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + } + + /// + /// Deletes the .asset file for a scriptable object that is passed in + /// + /// The scriptableobject to delete + public static void DeleteScriptableObject(ScriptableObject objectToDelete) + { + string assetPath = AssetDatabase.GetAssetPath(objectToDelete.GetInstanceID()); + + if (!string.IsNullOrEmpty(assetPath)) + { + AssetDatabase.DeleteAsset(assetPath); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + } + + /// + /// Provides the file name without extension for a scriptable object + /// + /// The scriptable object that file name is needed + /// A string with the file name and no extension + public static string GetScriptableObjectFileName(ScriptableObject objectToName) + { + string fullPath = AssetDatabase.GetAssetPath(objectToName.GetInstanceID()); + + return Path.GetFileNameWithoutExtension(fullPath); + } +#endif + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs.meta b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs.meta new file mode 100644 index 0000000..4756944 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6d9e7de66cf88914e8aba28047e325f2 +timeCreated: 1554910065 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs new file mode 100644 index 0000000..d7358f4 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs @@ -0,0 +1,76 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// This class allows the user to create a tracked object without requiring the user to copy and paste the object across the VRTK prefab trees. + /// It works by assigning an ID (starting from 0). This will pair the object with the tracked object with that index for the current setup. + /// + /// Author: Dan Duggan (dduggan@cra.com) August 2018 + /// Updated: Nicolas Herrera (nherrera@cra.com), October 2018 + /// + public class TrackedObjectFollower : MonoBehaviour + { + #region Public Variables + public int sdkSelectionIndex = 0; + public int trackerSelectionIndex = 0; + #endregion + + #region Private Variables + private Transform trackedObject; + private bool initializedProperly = false; + #endregion + + #region Unity Functions + void OnEnabled() + { + // The Start() code is slightly delayed to allow SteamVR/VRTK to finish initialization + StartCoroutine(StartFollowingTracker()); + } + + void Start() + { + StartCoroutine(StartFollowingTracker()); + } + + void Update() + { + if(initializedProperly) + { + transform.SetPositionAndRotation(trackedObject.position, trackedObject.rotation); + } + } + + /// + /// This function waits for VRTK to finish setup and then mirrors the tracker's position and rotation. + /// + /// + IEnumerator StartFollowingTracker() + { + VRTK.VRTK_SDKSetup currentSetup = VRTK.VRTK_SDKManager.instance.loadedSetup; + + while (currentSetup == null) + { + currentSetup = VRTK.VRTK_SDKManager.instance.loadedSetup; + + yield return null; + } + + int maxTrackerId = currentSetup.actualTrackers.Count; + if (trackerSelectionIndex >= maxTrackerId) + { + Debug.LogError("Unable to pair TrackedObjectFollower with object: tracker index is greater than max tracker index for current setup!"); + yield break; + } + + trackedObject = currentSetup.actualTrackers[trackerSelectionIndex].transform; + if (trackedObject != null) + { + initializedProperly = true; + } + } + #endregion + } +} diff --git a/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs.meta b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs.meta new file mode 100644 index 0000000..6a763f8 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0e87743bd01d4f04baac93669821fd89 +timeCreated: 1534426053 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs new file mode 100644 index 0000000..43628d7 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs @@ -0,0 +1,102 @@ +using System.Collections; +using System.Text; +using UnityEngine; +#if VRTK_DEFINE_SDK_STEAMVR +using Valve.VR; +#endif + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// Allows the end user to use a Vive Tracker's hardware ID to assign to the digital objects, instead of + /// trying to find the index. This will automatically add the TrackedObject script to the same GameObject + /// this script is attached to and assign the correct ID. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2018 + /// Updated: Nicolas Herrera (nherrera@cra.com), January 2019 + /// + public class TrackedObjectID : MonoBehaviour + { +#if VRTK_DEFINE_SDK_STEAMVR + #region PublicVariables + public string trackerHardwareID; + public int trackerPopupIndex; + #endregion + + #region ProtectedVariables + protected SteamVR_TrackedObject trackedObject; + #endregion + + #region UnityFunctions + protected void Start() + { + StartCoroutine(AddTrackedObject()); + } + #endregion + + #region TrackerFunctions + /// + /// Adds a SteamVR TrackedObject script to the game object and sets the index based on the hardware ID + /// + /// + IEnumerator AddTrackedObject() + { + // Must make sure not to add this before SteamVR has been fully initalized otherwise will get an AssertionFailed error + yield return new WaitForEndOfFrame(); + + AssignIndex(); + + // Set the origin to the currently active SDK + trackedObject.origin = VRTK.VRTK_SDKManager.instance.loadedSetup.transform; + } + + /// + /// Takes the SteamVR TrackedObject and finds the current SteamVR index based on the hardware ID. + /// + public void AssignIndex() + { + trackedObject = gameObject.GetComponent(); + + if (trackedObject == null) + { + trackedObject = gameObject.AddComponent(); + } + + // Set the index to none to make sure it doesn't get assigned to the wrong index + trackedObject.index = SteamVR_TrackedObject.EIndex.None; + + // Make sure the SteamVR context is valid, if not, open a new SteamVR instance so you can pull the tracker data + if (OpenVR.System == null) + { + EVRInitError initError = EVRInitError.None; + OpenVR.Init(ref initError, EVRApplicationType.VRApplication_Background); + } + + // Traverse through all the connected IDs looking for this Hardware's current ID + // Note OpenVR 0 is reserved for the HMD, so skip those index since it will never be the right one + for (int n = 1; n < Constants.MAX_OPENVR_OBJECTS; n++) + { + string currentID = GetHardwareIDFromIndex(n); + + if (currentID == trackerHardwareID) + { + trackedObject.index = (SteamVR_TrackedObject.EIndex)n; + + break; + } + } + } + + public static string GetHardwareIDFromIndex(int index) + { + ETrackedPropertyError serialNumberError = new ETrackedPropertyError(); + StringBuilder serialNumberAsString = new StringBuilder(); + + OpenVR.System.GetStringTrackedDeviceProperty((uint)index, ETrackedDeviceProperty.Prop_SerialNumber_String, serialNumberAsString, OpenVR.k_unMaxPropertyStringSize, ref serialNumberError); + + return serialNumberAsString.ToString().ToUpper(); + } + #endregion +#endif + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs.meta b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs.meta new file mode 100644 index 0000000..dcbd649 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 73d4bb312dc78e54fa5d130336723464 +timeCreated: 1536339787 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs b/Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs new file mode 100644 index 0000000..4d98862 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CharlesRiverAnalytics.Virtuoso.Utilities +{ + /// + /// A utility class to hold any math functions that are needed in VIRTUOSO. + /// + /// Written by: Nicolas Herrera (nherrera@cra.com), 2019 + /// + public class VirtMath : MonoBehaviour + { + /// + /// Normalizes the given value to a value between 0 and 1. + /// + /// The value to be normalized + /// The minimum value that the value can take on + /// The maximum value that the value can take on + /// + public static float Normalize(float value, float min, float max) + { + return (value - min) / (max - min); ; + } + + /// + /// Determine the signed angle between two vectors, with normal 'n' + /// as the rotation axis. Direction is clockwise for positive angles + /// and negative for counter-clockwise. + /// + /// Source: https://forum.unity.com/threads/need-vector3-angle-to-return-a-negtive-or-relative-value.51092/ - Tinus + public static float AngleSigned(Vector3 v1, Vector3 v2, Vector3 n) + { + return Mathf.Atan2( + Vector3.Dot(n, Vector3.Cross(v1, v2)), + Vector3.Dot(v1, v2)) * Mathf.Rad2Deg; + } + + /// + /// Helper function to keep a value between two extremes + /// + /// The number to be wrapped + /// The minimum value in the range + /// The maximum value in the range + /// The number between the min and max value + public static float WrapBetweenRange(float value, float minValue, float maxValue) + { + return (((value - minValue) % (maxValue - minValue)) + (maxValue - minValue)) % (maxValue - minValue) + minValue; + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs.meta b/Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs.meta new file mode 100644 index 0000000..705e2f3 --- /dev/null +++ b/Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 869cd360ccb46964289c04395c2a8ba1 +timeCreated: 1552328495 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Shaders.meta b/Assets/VIRTUOSO/Shaders.meta new file mode 100644 index 0000000..19e7df0 --- /dev/null +++ b/Assets/VIRTUOSO/Shaders.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d2d100ef84ce04b4bb0c6feb9a5ec5ac +folderAsset: yes +timeCreated: 1556026481 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader b/Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader new file mode 100644 index 0000000..c6cb046 --- /dev/null +++ b/Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader @@ -0,0 +1,33 @@ +Shader "Custom/LineRendererOverlay" +{ + Properties + { + _Color ("Main Color", Color) = (1,1,1,1) + } + Category + { + SubShader + { + Tags + { + "Queue" = "Overlay" + } + + BindChannels + { + Bind "color", color + } + + Pass + { + ZTest Greater + Lighting Off + Color [color] + } + Pass + { + ZTest Less + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader.meta b/Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader.meta new file mode 100644 index 0000000..1364006 --- /dev/null +++ b/Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 89b31743c7038024bb7feb2af9c3a232 +timeCreated: 1556029486 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK.meta b/Assets/VIRTUOSO/VRTK.meta new file mode 100644 index 0000000..5debb3c --- /dev/null +++ b/Assets/VIRTUOSO/VRTK.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 27ce7cbb93da59148926680c083b6643 +folderAsset: yes +timeCreated: 1471730108 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal.meta b/Assets/VIRTUOSO/VRTK/Internal.meta new file mode 100644 index 0000000..49d41ea --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 011454ba33cefa24081e8696a94aa9c3 +folderAsset: yes +timeCreated: 1504183086 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials.meta new file mode 100644 index 0000000..dd48db5 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 49b403f7a7ceb964b9f86043dbbfab78 +folderAsset: yes +timeCreated: 1467963682 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources.meta new file mode 100644 index 0000000..bcf1ee6 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6ae7bb6535f0db4459a34fef4b701d7d +folderAsset: yes +timeCreated: 1467963687 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat new file mode 100644 index 0000000..526c7ec --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: AdaptiveQualityDebugVisualization + m_Shader: {fileID: 4800000, guid: a8384af5748503e4cb26191bdee4faa1, type: 3} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat.meta new file mode 100644 index 0000000..1135c41 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3ed0d666bfbfa54084235bdc1e0d063 +timeCreated: 1473404978 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat new file mode 100644 index 0000000..300cf1a --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: DirectionArrows + m_Shader: {fileID: 10750, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHABLEND_ON + 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: 2800000, guid: 922b29b07250cd84792e485d13b125a7, type: 3} + 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: 10 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 2 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 5 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat.meta new file mode 100644 index 0000000..62e76c2 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5074e50ed3f02f64ab7f39096a5590bc +timeCreated: 1510224929 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat new file mode 100644 index 0000000..909d053 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat @@ -0,0 +1,133 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: OutlineBasic + m_Shader: {fileID: 4800000, guid: cbf236a56414a174fbf17d405f7da98f, type: 3} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _Thickness + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _OutlineColor + second: {r: 1, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat.meta new file mode 100644 index 0000000..aa8fbb9 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97c9345d2c577e543b55b547a33c4858 +timeCreated: 1474104585 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat new file mode 100644 index 0000000..4aa4e3e --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SnapDropZoneEditorObject + m_Shader: {fileID: 4800000, guid: 4c84081e4523a5646919b30697cfccb8, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _RampTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SurfaceTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _FPOW + second: 0.03 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Offset + second: 0 + - first: + name: _Parallax + second: 0.02 + - first: + name: _R0 + second: -0.2 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 0, b: 1, a: 0.378} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat.meta new file mode 100644 index 0000000..db55f46 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76008b803511a8e4c91d6f9bacc10161 +timeCreated: 1467963702 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat new file mode 100644 index 0000000..d3c2fa7 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: TooltipLine + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 2000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _SrcBlend + second: 1 + data: + first: + name: _DstBlend + second: 0 + data: + first: + name: _Cutoff + second: 0.5 + data: + first: + name: _ZWrite + second: 1 + data: + first: + name: _Glossiness + second: 0.5 + data: + first: + name: _Metallic + second: 0 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _Parallax + second: 0.02 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _Mode + second: 0 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat.meta new file mode 100644 index 0000000..d52c36c --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 167fe894cb53b584bbce353eb367fbda +timeCreated: 1467963967 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat new file mode 100644 index 0000000..3c43250 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: TunnelOverlay + m_Shader: {fileID: 4800000, guid: 9a0d8a7c6bde1d64cb8f6c2f81f3d5d5, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SecondarySkyBox: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AngularVelocity: 0 + - _FeatherSize: 0.1 + m_Colors: + - _Color: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat.meta new file mode 100644 index 0000000..5c2254c --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 441b55e210b1bfb498ace8bae36e0941 +timeCreated: 1507117382 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat new file mode 100644 index 0000000..4132373 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat @@ -0,0 +1,162 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: UIText + m_Shader: {fileID: 4800000, guid: 1d91a0457b4ab7a458a9eac79648a51b, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 3000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _SrcBlend + second: 1 + data: + first: + name: _DstBlend + second: 0 + data: + first: + name: _Cutoff + second: 0.5 + data: + first: + name: _ZWrite + second: 1 + data: + first: + name: _Glossiness + second: 0.5 + data: + first: + name: _Metallic + second: 0 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _Parallax + second: 0.02 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _Mode + second: 0 + data: + first: + name: _Stencil + second: 0 + data: + first: + name: _StencilComp + second: 8 + data: + first: + name: _StencilOp + second: 0 + data: + first: + name: _StencilReadMask + second: 255 + data: + first: + name: _StencilWriteMask + second: 255 + data: + first: + name: _ColorMask + second: 15 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat.meta new file mode 100644 index 0000000..9af2a8f --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6feba24806ecd0e41b79c8531da69ae5 +timeCreated: 1467963930 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat new file mode 100644 index 0000000..29c26fb --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: WorldPointer + m_Shader: {fileID: 4800000, guid: 4c84081e4523a5646919b30697cfccb8, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _RampTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SurfaceTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _FPOW + second: 0.03 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Offset + second: 0 + - first: + name: _Parallax + second: 0.02 + - first: + name: _R0 + second: -0.2 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat.meta b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat.meta new file mode 100644 index 0000000..7767835 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dee83b4df08c2044dbb7465644a06cc2 +timeCreated: 1467963702 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Textures.meta b/Assets/VIRTUOSO/VRTK/Internal/Textures.meta new file mode 100644 index 0000000..145accf --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a97928edb1d75694b9ca4b49fc581cca +folderAsset: yes +timeCreated: 1496600519 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png b/Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png new file mode 100644 index 0000000..3d5ff31 Binary files /dev/null and b/Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png differ diff --git a/Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png.meta b/Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png.meta new file mode 100644 index 0000000..8b98035 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 13ad2ad7c4126c64b9713ab9ce478f82 +timeCreated: 1496023177 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png b/Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png new file mode 100644 index 0000000..974fe9f Binary files /dev/null and b/Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png differ diff --git a/Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png.meta b/Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png.meta new file mode 100644 index 0000000..af8f89d --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 922b29b07250cd84792e485d13b125a7 +timeCreated: 1510224756 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs.meta b/Assets/VIRTUOSO/VRTK/Prefabs.meta new file mode 100644 index 0000000..352c58e --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 721907082a166594bb4946c03c4e712f +folderAsset: yes +timeCreated: 1461528015 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands.meta new file mode 100644 index 0000000..f9ec1fc --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 571fa58f2c8dfbb43811fdcc39324aa5 +folderAsset: yes +timeCreated: 1499463395 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands.meta new file mode 100644 index 0000000..5a357a6 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f0fdd718f9440954c969d60af2fd58ea +folderAsset: yes +timeCreated: 1499463395 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models.meta new file mode 100644 index 0000000..425ec9b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: be4f830611d598041af0e9a004cda790 +folderAsset: yes +timeCreated: 1499466316 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks.meta new file mode 100644 index 0000000..97ed327 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b8c21899bb20faf4996db7f9fe4a2a7b +folderAsset: yes +timeCreated: 1499465847 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask new file mode 100644 index 0000000..198409c --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!319 &101100000 +AvatarMask: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Idle + m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000 + m_Elements: + - m_Path: + m_Weight: 1 + - m_Path: Armature + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + m_Weight: 1 + - m_Path: VRTK_BasicHand + m_Weight: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask.meta new file mode 100644 index 0000000..3ac5112 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2690b183f5712934a8ff16755f830dfb +timeCreated: 1499465875 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask new file mode 100644 index 0000000..189d9f0 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!319 &101100000 +AvatarMask: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Index + m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000 + m_Elements: + - m_Path: + m_Weight: 1 + - m_Path: Armature + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + m_Weight: 0 + - m_Path: VRTK_BasicHand + m_Weight: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask.meta new file mode 100644 index 0000000..db5c7d4 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11f2f7641d50cd647935b6ba0f713926 +timeCreated: 1499465935 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask new file mode 100644 index 0000000..5d6d561 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!319 &101100000 +AvatarMask: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Middle + m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000 + m_Elements: + - m_Path: + m_Weight: 1 + - m_Path: Armature + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + m_Weight: 0 + - m_Path: VRTK_BasicHand + m_Weight: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask.meta new file mode 100644 index 0000000..5e1ab58 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0eb75f9326455e048bdcf857c17a300e +timeCreated: 1499466003 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask new file mode 100644 index 0000000..02b2d1e --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!319 &101100000 +AvatarMask: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Pinky + m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000 + m_Elements: + - m_Path: + m_Weight: 1 + - m_Path: Armature + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + m_Weight: 0 + - m_Path: VRTK_BasicHand + m_Weight: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask.meta new file mode 100644 index 0000000..6af571c --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5444e6d924e762d47b6d213a49014f9f +timeCreated: 1499466162 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask new file mode 100644 index 0000000..95df9aa --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!319 &101100000 +AvatarMask: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Ring + m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000 + m_Elements: + - m_Path: + m_Weight: 1 + - m_Path: Armature + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + m_Weight: 0 + - m_Path: VRTK_BasicHand + m_Weight: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask.meta new file mode 100644 index 0000000..b95de04 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b084a249eccde145bf5cf70e3ea2b6d +timeCreated: 1499466111 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask new file mode 100644 index 0000000..416f065 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!319 &101100000 +AvatarMask: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Thumb + m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000 + m_Elements: + - m_Path: + m_Weight: 1 + - m_Path: Armature + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + m_Weight: 0 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + m_Weight: 1 + - m_Path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + m_Weight: 1 + - m_Path: VRTK_BasicHand + m_Weight: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask.meta new file mode 100644 index 0000000..b0dda33 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b939f2ef2ab501f4eacf96a42f6a9e81 +timeCreated: 1499466208 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials.meta new file mode 100644 index 0000000..630a052 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e4973a5b0f7a4c44fb616de01cca6afb +folderAsset: yes +timeCreated: 1499463401 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures.meta new file mode 100644 index 0000000..0f287bd --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2b71022531071e64fa7380bbb60e03d8 +folderAsset: yes +timeCreated: 1499463395 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png new file mode 100644 index 0000000..3e01a0e Binary files /dev/null and b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png differ diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png.meta new file mode 100644 index 0000000..06ab748 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: ee380057dda4eb04091364d1a40aa2e8 +timeCreated: 1499463396 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat new file mode 100644 index 0000000..3cc3650 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat @@ -0,0 +1,75 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: VRTK_BasicHand_Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 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.50572723, g: 0.351968, b: 0.5147059, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat.meta new file mode 100644 index 0000000..945011a --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5b0e29f17b95f4b4e8bbee0faaa0ac29 +timeCreated: 1500149360 +licenseType: Pro +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx new file mode 100644 index 0000000..97c9619 Binary files /dev/null and b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx differ diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx.meta new file mode 100644 index 0000000..16b1940 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx.meta @@ -0,0 +1,926 @@ +fileFormatVersion: 2 +guid: 9fbd4cfd43766cc4cbcb915ceafe52a9 +timeCreated: 1499671701 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: Armature + 100002: Bone_Arm_root + 100004: Bone_Index_Finger_1 + 100006: Bone_Index_Finger_2 + 100008: Bone_Index_Finger_3 + 100010: Bone_Index_Finger_3_end + 100012: Bone_Index_Finger_Knuckle + 100014: Bone_Index_Palm_Root + 100016: Bone_Index_Palm_Root_2nd + 100018: Bone_Index_Palm_root_3rd + 100020: Bone_Middle_Finger_1 + 100022: Bone_Middle_Finger_2 + 100024: Bone_Middle_Finger_3 + 100026: Bone_Middle_Finger_3_end + 100028: Bone_Middle_Finger_Knuckle + 100030: Bone_Middle_Palm_2nd + 100032: Bone_Middle_Palm_Root + 100034: Bone_Midle_Palm_1st + 100036: Bone_Palm_Pinkie_Root + 100038: Bone_Palm_Root + 100040: Bone_Pinkie_Finger_1 + 100042: Bone_Pinkie_Finger_2 + 100044: Bone_Pinkie_Finger_3 + 100046: Bone_Pinkie_Finger_3_end + 100048: Bone_Pinkie_Finger_Knuckle + 100050: Bone_Pinkie_Root_1st + 100052: Bone_Ring_Finger_1 + 100054: Bone_Ring_Finger_2 + 100056: Bone_Ring_Finger_3 + 100058: Bone_Ring_Finger_3_end + 100060: Bone_Ring_Knuckle + 100062: Bone_Ring_Palm_1st + 100064: Bone_Ring_Palm_2nd + 100066: Bone_Ring_Palm_Root + 100068: Bone_Thumb_Finger_1 + 100070: Bone_Thumb_Finger_2 + 100072: Bone_Thumb_Finger_3 + 100074: Bone_Thumb_Finger_3_end + 100076: Bone_Thumb_Finger_Knuckle + 100078: Bone_Thumb_Palm_Root + 100080: Bone_Thumb_Root_1st + 100082: Bone_Wrist + 100084: VRTK_BasicHand + 100086: //RootNode + 100088: VRTK_Hand_Bone_Forearm + 100090: VRTK_Hand_Bone_Index_1 + 100092: VRTK_Hand_Bone_Index_2 + 100094: VRTK_Hand_Bone_Index_3 + 100096: VRTK_Hand_Bone_Index_4 + 100098: VRTK_Hand_Bone_Index_5 + 100100: VRTK_Hand_Bone_Index_5_end + 100102: VRTK_Hand_Bone_Middle_1 + 100104: VRTK_Hand_Bone_Middle_2 + 100106: VRTK_Hand_Bone_Middle_3 + 100108: VRTK_Hand_Bone_Middle_4 + 100110: VRTK_Hand_Bone_Middle_5 + 100112: VRTK_Hand_Bone_Middle_5_end + 100114: VRTK_Hand_Bone_Palm + 100116: VRTK_Hand_Bone_Pinkie_1 + 100118: VRTK_Hand_Bone_Pinkie_2 + 100120: VRTK_Hand_Bone_Pinkie_3 + 100122: VRTK_Hand_Bone_Pinkie_4 + 100124: VRTK_Hand_Bone_Pinkie_5 + 100126: VRTK_Hand_Bone_Pinkie_5_end + 100128: VRTK_Hand_Bone_Ring_1 + 100130: VRTK_Hand_Bone_Ring_2 + 100132: VRTK_Hand_Bone_Ring_3 + 100134: VRTK_Hand_Bone_Ring_4 + 100136: VRTK_Hand_Bone_Ring_5 + 100138: VRTK_Hand_Bone_Ring_5_end + 100140: VRTK_Hand_Bone_Thumb_1 + 100142: VRTK_Hand_Bone_Thumb_2 + 100144: VRTK_Hand_Bone_Thumb_3 + 100146: VRTK_Hand_Bone_Thumb_4 + 100148: VRTK_Hand_Bone_Thumb_4_end + 100150: VRTK_Hand_Bone_Wrist + 400000: Armature + 400002: Bone_Arm_root + 400004: Bone_Index_Finger_1 + 400006: Bone_Index_Finger_2 + 400008: Bone_Index_Finger_3 + 400010: Bone_Index_Finger_3_end + 400012: Bone_Index_Finger_Knuckle + 400014: Bone_Index_Palm_Root + 400016: Bone_Index_Palm_Root_2nd + 400018: Bone_Index_Palm_root_3rd + 400020: Bone_Middle_Finger_1 + 400022: Bone_Middle_Finger_2 + 400024: Bone_Middle_Finger_3 + 400026: Bone_Middle_Finger_3_end + 400028: Bone_Middle_Finger_Knuckle + 400030: Bone_Middle_Palm_2nd + 400032: Bone_Middle_Palm_Root + 400034: Bone_Midle_Palm_1st + 400036: Bone_Palm_Pinkie_Root + 400038: Bone_Palm_Root + 400040: Bone_Pinkie_Finger_1 + 400042: Bone_Pinkie_Finger_2 + 400044: Bone_Pinkie_Finger_3 + 400046: Bone_Pinkie_Finger_3_end + 400048: Bone_Pinkie_Finger_Knuckle + 400050: Bone_Pinkie_Root_1st + 400052: Bone_Ring_Finger_1 + 400054: Bone_Ring_Finger_2 + 400056: Bone_Ring_Finger_3 + 400058: Bone_Ring_Finger_3_end + 400060: Bone_Ring_Knuckle + 400062: Bone_Ring_Palm_1st + 400064: Bone_Ring_Palm_2nd + 400066: Bone_Ring_Palm_Root + 400068: Bone_Thumb_Finger_1 + 400070: Bone_Thumb_Finger_2 + 400072: Bone_Thumb_Finger_3 + 400074: Bone_Thumb_Finger_3_end + 400076: Bone_Thumb_Finger_Knuckle + 400078: Bone_Thumb_Palm_Root + 400080: Bone_Thumb_Root_1st + 400082: Bone_Wrist + 400084: VRTK_BasicHand + 400086: //RootNode + 400088: VRTK_Hand_Bone_Forearm + 400090: VRTK_Hand_Bone_Index_1 + 400092: VRTK_Hand_Bone_Index_2 + 400094: VRTK_Hand_Bone_Index_3 + 400096: VRTK_Hand_Bone_Index_4 + 400098: VRTK_Hand_Bone_Index_5 + 400100: VRTK_Hand_Bone_Index_5_end + 400102: VRTK_Hand_Bone_Middle_1 + 400104: VRTK_Hand_Bone_Middle_2 + 400106: VRTK_Hand_Bone_Middle_3 + 400108: VRTK_Hand_Bone_Middle_4 + 400110: VRTK_Hand_Bone_Middle_5 + 400112: VRTK_Hand_Bone_Middle_5_end + 400114: VRTK_Hand_Bone_Palm + 400116: VRTK_Hand_Bone_Pinkie_1 + 400118: VRTK_Hand_Bone_Pinkie_2 + 400120: VRTK_Hand_Bone_Pinkie_3 + 400122: VRTK_Hand_Bone_Pinkie_4 + 400124: VRTK_Hand_Bone_Pinkie_5 + 400126: VRTK_Hand_Bone_Pinkie_5_end + 400128: VRTK_Hand_Bone_Ring_1 + 400130: VRTK_Hand_Bone_Ring_2 + 400132: VRTK_Hand_Bone_Ring_3 + 400134: VRTK_Hand_Bone_Ring_4 + 400136: VRTK_Hand_Bone_Ring_5 + 400138: VRTK_Hand_Bone_Ring_5_end + 400140: VRTK_Hand_Bone_Thumb_1 + 400142: VRTK_Hand_Bone_Thumb_2 + 400144: VRTK_Hand_Bone_Thumb_3 + 400146: VRTK_Hand_Bone_Thumb_4 + 400148: VRTK_Hand_Bone_Thumb_4_end + 400150: VRTK_Hand_Bone_Wrist + 4300000: VRTK_BasicHand + 7400000: Main_Armature + 7400002: Hand_Idle + 7400004: Hand_Thumb + 7400006: Hand_Index + 7400008: Hand_Middle + 7400010: Hand_Ring + 7400012: Hand_Pinky + 7400014: Armature|VRTK_BasicHandArmatureAction + 9500000: //RootNode + 13700000: VRTK_BasicHand + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: + - serializedVersion: 16 + name: Armature|VRTK_BasicHandArmatureAction + takeName: Armature|VRTK_BasicHandArmatureAction + firstFrame: 0 + lastFrame: 80 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Armature + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + weight: 1 + - path: VRTK_BasicHand + weight: 1 + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Hand_Idle + takeName: Armature|VRTK_BasicHandArmatureAction + firstFrame: 0 + lastFrame: 1 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Armature + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + weight: 1 + - path: VRTK_BasicHand + weight: 1 + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Hand_Thumb + takeName: Armature|VRTK_BasicHandArmatureAction + firstFrame: 6 + lastFrame: 7 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Armature + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + weight: 1 + - path: VRTK_BasicHand + weight: 1 + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Hand_Index + takeName: Armature|VRTK_BasicHandArmatureAction + firstFrame: 17 + lastFrame: 18 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Armature + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + weight: 1 + - path: VRTK_BasicHand + weight: 1 + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Hand_Middle + takeName: Armature|VRTK_BasicHandArmatureAction + firstFrame: 26 + lastFrame: 27 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Armature + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + weight: 1 + - path: VRTK_BasicHand + weight: 1 + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Hand_Ring + takeName: Armature|VRTK_BasicHandArmatureAction + firstFrame: 36 + lastFrame: 37 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Armature + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + weight: 1 + - path: VRTK_BasicHand + weight: 1 + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Hand_Pinky + takeName: Armature|VRTK_BasicHandArmatureAction + firstFrame: 46 + lastFrame: 47 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Armature + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Index_1/VRTK_Hand_Bone_Index_2/VRTK_Hand_Bone_Index_3/VRTK_Hand_Bone_Index_4/VRTK_Hand_Bone_Index_5/VRTK_Hand_Bone_Index_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Middle_1/VRTK_Hand_Bone_Middle_2/VRTK_Hand_Bone_Middle_3/VRTK_Hand_Bone_Middle_4/VRTK_Hand_Bone_Middle_5/VRTK_Hand_Bone_Middle_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Pinkie_1/VRTK_Hand_Bone_Pinkie_2/VRTK_Hand_Bone_Pinkie_3/VRTK_Hand_Bone_Pinkie_4/VRTK_Hand_Bone_Pinkie_5/VRTK_Hand_Bone_Pinkie_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Ring_1/VRTK_Hand_Bone_Ring_2/VRTK_Hand_Bone_Ring_3/VRTK_Hand_Bone_Ring_4/VRTK_Hand_Bone_Ring_5/VRTK_Hand_Bone_Ring_5_end + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4 + weight: 1 + - path: Armature/VRTK_Hand_Bone_Forearm/VRTK_Hand_Bone_Wrist/VRTK_Hand_Bone_Palm/VRTK_Hand_Bone_Thumb_1/VRTK_Hand_Bone_Thumb_2/VRTK_Hand_Bone_Thumb_3/VRTK_Hand_Bone_Thumb_4/VRTK_Hand_Bone_Thumb_4_end + weight: 1 + - path: VRTK_BasicHand + weight: 1 + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller new file mode 100644 index 0000000..08c999b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller @@ -0,0 +1,371 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: VRTK_BasicHand_AnimationController + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: NearTouchState + m_Type: 1 + m_DefaultFloat: -1 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + - m_Name: TouchState + m_Type: 1 + m_DefaultFloat: -1 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + - m_Name: GrabState + m_Type: 1 + m_DefaultFloat: -1 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + - m_Name: UseState + m_Type: 1 + m_DefaultFloat: -1 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Hand_Idle + m_StateMachine: {fileID: 1107841493140953434} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} + - serializedVersion: 5 + m_Name: Hand_Thumb + m_StateMachine: {fileID: 1107043682337146342} + m_Mask: {fileID: 101100000, guid: b939f2ef2ab501f4eacf96a42f6a9e81, type: 2} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} + - serializedVersion: 5 + m_Name: Hand_Index + m_StateMachine: {fileID: 1107507346146260802} + m_Mask: {fileID: 101100000, guid: 11f2f7641d50cd647935b6ba0f713926, type: 2} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} + - serializedVersion: 5 + m_Name: Hand_Middle + m_StateMachine: {fileID: 1107294904703689506} + m_Mask: {fileID: 101100000, guid: 0eb75f9326455e048bdcf857c17a300e, type: 2} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} + - serializedVersion: 5 + m_Name: Hand_Ring + m_StateMachine: {fileID: 1107821411989009222} + m_Mask: {fileID: 101100000, guid: 8b084a249eccde145bf5cf70e3ea2b6d, type: 2} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} + - serializedVersion: 5 + m_Name: Hand_Pinky + m_StateMachine: {fileID: 1107789967682683542} + m_Mask: {fileID: 101100000, guid: 5444e6d924e762d47b6d213a49014f9f, type: 2} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &1102031933126220236 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Middle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400008, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102261493493607044 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Pinky + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400012, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102659587133209544 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400002, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102807579692444030 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Thumb + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400004, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102857558748889676 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Ring + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400010, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102938544764662458 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Index + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400006, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1107 &1107043682337146342 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Thumb + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102807579692444030} + m_Position: {x: 300, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 552, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102807579692444030} +--- !u!1107 &1107294904703689506 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Middle + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102031933126220236} + m_Position: {x: 300, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 540, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102031933126220236} +--- !u!1107 &1107507346146260802 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Index + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102938544764662458} + m_Position: {x: 288, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 540, y: 108, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102938544764662458} +--- !u!1107 &1107789967682683542 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Pinky + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102261493493607044} + m_Position: {x: 288, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 516, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102261493493607044} +--- !u!1107 &1107821411989009222 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Ring + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102857558748889676} + m_Position: {x: 288, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 528, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102857558748889676} +--- !u!1107 &1107841493140953434 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hand_Idle + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102659587133209544} + m_Position: {x: 300, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 540, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102659587133209544} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller.meta new file mode 100644 index 0000000..c4d5fb6 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fec1c1cdc86cb5b4aad9b22ede74632b +timeCreated: 1499465824 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab new file mode 100644 index 0000000..f21c67a --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab @@ -0,0 +1,1685 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1469220889570388} + m_IsPrefabParent: 1 +--- !u!1 &1028885053416752 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4556298815442742} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Index_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1087066476825678 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4319449009256914} + - component: {fileID: 135394616707351404} + - component: {fileID: 114312545553378902} + m_Layer: 0 + m_Name: Index + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1126228594434696 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4405090666411160} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Pinkie_5_end + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1138247430904094 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4474660056667814} + - component: {fileID: 136032359288340650} + m_Layer: 0 + m_Name: Palm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1200292382491122 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4839536768129788} + - component: {fileID: 135754865099814890} + - component: {fileID: 114092341136231322} + m_Layer: 0 + m_Name: Ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1237819446708720 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4098349581586358} + - component: {fileID: 135804757305491734} + - component: {fileID: 114649316680068954} + m_Layer: 0 + m_Name: Middle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1249923356904400 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4056405236708552} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Ring_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1250134266155578 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4399402726578480} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1263147195425438 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4319160110520870} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Thumb_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1304151215898682 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4981237587957216} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Thumb_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1305718193550740 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4381421865835424} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Ring_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1320092282432674 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4451208778096458} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Middle_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1320697741236316 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4807960200561236} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Thumb_4_end + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1328606488484760 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4187154851554630} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Pinkie_5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1396280233456802 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4718087285593220} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Middle_5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1398406636836058 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4007723491459628} + - component: {fileID: 135833420172407900} + - component: {fileID: 114133340415354398} + m_Layer: 0 + m_Name: Thumb + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1431058186026970 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4653173414971708} + m_Layer: 0 + m_Name: HandColliders + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1452081128286136 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4807924809743902} + m_Layer: 0 + m_Name: Armature + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1468141546394612 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4899618771947256} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Pinkie_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1469220889570388 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4726844815573086} + - component: {fileID: 95718739528495300} + - component: {fileID: 114963189862696322} + m_Layer: 0 + m_Name: VRTK_BasicHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1475728512817002 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4220431479120062} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Index_5_end + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1526914875578864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4412517256400794} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Index_4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1542545740283192 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4089660411005556} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Middle_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1551614005466062 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4197115308921472} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Middle_4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1556339427087150 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4989641297664924} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Index_3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1587673880008760 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4604071986457100} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Ring_5_end + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1591272679653362 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4067447437714518} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Pinkie_3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1620706546805496 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4556403284046966} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Middle_5_end + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1629076531411410 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4545413325927090} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Pinkie_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1641914216988320 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4291014158247542} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Pinkie_4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1671039121602088 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4780581265076280} + - component: {fileID: 135280319823165322} + - component: {fileID: 114586987141607270} + m_Layer: 0 + m_Name: Pinky + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1679763963463108 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4531848624766692} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Thumb_3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1708268698332586 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4568955781540646} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Ring_5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1708282929750094 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4180320620054190} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1727485427504892 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4602017553826212} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Index_5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1743271303705216 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4458723164817438} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Thumb_4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1768370560387996 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4884042871165928} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Ring_3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1812289512735356 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4047283293557658} + - component: {fileID: 137710368452278466} + m_Layer: 0 + m_Name: VRTK_BasicHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1820220216058194 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4062987850226086} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Wrist + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1869784272461842 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4731714980939906} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Palm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1937369400946318 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4967745397010832} + - component: {fileID: 54584660101132624} + m_Layer: 0 + m_Name: GrabAttachPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1957854551773514 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4711516186769048} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Index_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1971218870299000 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4078179695666178} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Middle_3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1971788217622184 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4113637290785580} + m_Layer: 0 + m_Name: VRTK_Hand_Bone_Ring_4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4007723491459628 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1398406636836058} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4653173414971708} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4047283293557658 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1812289512735356} + m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 99.99997, z: 99.99997} + m_Children: [] + m_Father: {fileID: 4180320620054190} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4056405236708552 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249923356904400} + m_LocalRotation: {x: 0.056272447, y: 0.011234018, z: -0.12426442, w: 0.9905885} + m_LocalPosition: {x: 0.0001341634, y: 0.0004598923, z: -0.000013166527} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 1} + m_Children: + - {fileID: 4381421865835424} + m_Father: {fileID: 4731714980939906} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4062987850226086 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1820220216058194} + m_LocalRotation: {x: -0.062411137, y: 0.0013902457, z: -0.012309667, w: 0.9979737} + m_LocalPosition: {x: 2.7755575e-19, y: 0.00007741918, z: 2.1828657e-13} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4731714980939906} + m_Father: {fileID: 4399402726578480} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4067447437714518 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1591272679653362} + m_LocalRotation: {x: 0.04883287, y: -0.037906032, z: 0.04340974, w: 0.997143} + m_LocalPosition: {x: 3.3396643e-11, y: 0.00006900988, z: 1.16415315e-11} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4291014158247542} + m_Father: {fileID: 4545413325927090} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4078179695666178 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1971218870299000} + m_LocalRotation: {x: 0.0065857354, y: -0.00092682365, z: -0.028158024, w: 0.9995814} + m_LocalPosition: {x: -0, y: 0.00003885089, z: 3.783498e-12} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4197115308921472} + m_Father: {fileID: 4089660411005556} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4089660411005556 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542545740283192} + m_LocalRotation: {x: -0.007937939, y: -0.00032826228, z: 0.033302106, w: 0.9994138} + m_LocalPosition: {x: -1.04773785e-11, y: 0.00027416807, z: 1.4551914e-12} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4078179695666178} + m_Father: {fileID: 4451208778096458} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4098349581586358 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237819446708720} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4653173414971708} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4113637290785580 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1971788217622184} + m_LocalRotation: {x: 0.013001825, y: 0.009674855, z: 0.0070989667, w: 0.9998435} + m_LocalPosition: {x: 1.4842953e-11, y: 0.00022683971, z: 1.6298145e-11} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 4568955781540646} + m_Father: {fileID: 4884042871165928} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4180320620054190 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1708282929750094} + 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: 4807924809743902} + - {fileID: 4047283293557658} + m_Father: {fileID: 4726844815573086} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4187154851554630 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1328606488484760} + m_LocalRotation: {x: -0.00079479837, y: 0.010592777, z: 0.0011225746, w: 0.99994296} + m_LocalPosition: {x: 2.6193447e-11, y: 0.00020529068, z: 1.3969838e-11} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4405090666411160} + m_Father: {fileID: 4291014158247542} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4197115308921472 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1551614005466062} + m_LocalRotation: {x: 0.012996573, y: -0.010561257, z: -0.009060039, w: 0.99981874} + m_LocalPosition: {x: -6.984919e-12, y: 0.00026952755, z: 5.8207657e-12} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.9999999} + m_Children: + - {fileID: 4718087285593220} + m_Father: {fileID: 4078179695666178} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4220431479120062 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1475728512817002} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00028762786, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4602017553826212} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4291014158247542 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1641914216988320} + m_LocalRotation: {x: 0.00007984622, y: 0.016955502, z: 0.014019562, w: 0.99975795} + m_LocalPosition: {x: 4.452886e-11, y: 0.00019160572, z: 4.6566126e-11} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4187154851554630} + m_Father: {fileID: 4067447437714518} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4319160110520870 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1263147195425438} + m_LocalRotation: {x: -0.09489375, y: 0.26078895, z: 0.41679138, w: 0.8656034} + m_LocalPosition: {x: -0.00031794535, y: 0.000079114005, z: 0.00007427844} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4981237587957216} + m_Father: {fileID: 4731714980939906} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4319449009256914 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1087066476825678} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4653173414971708} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4381421865835424 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1305718193550740} + m_LocalRotation: {x: 0.041138336, y: -0.006968769, z: 0.012912212, w: 0.9990457} + m_LocalPosition: {x: -1.6298145e-11, y: 0.0002961876, z: -2.6193446e-12} + m_LocalScale: {x: 0.9999999, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4884042871165928} + m_Father: {fileID: 4056405236708552} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4399402726578480 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250134266155578} + m_LocalRotation: {x: 0.9999234, y: 0.0000000040227204, z: -0.0000014303513, w: -0.01237779} + m_LocalPosition: {x: 6.5932303e-17, y: -0.000004406724, z: 0.0000010092131} + m_LocalScale: {x: 1, y: 1, z: 0.9999303} + m_Children: + - {fileID: 4062987850226086} + m_Father: {fileID: 4807924809743902} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4405090666411160 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1126228594434696} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00024436848, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4187154851554630} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4412517256400794 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1526914875578864} + m_LocalRotation: {x: -0.0016227671, y: 0.006103784, z: -0.019646483, w: 0.99978703} + m_LocalPosition: {x: -0, y: 0.00026295686, z: -6.984919e-12} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 4602017553826212} + m_Father: {fileID: 4989641297664924} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4451208778096458 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1320092282432674} + m_LocalRotation: {x: 0.049597733, y: 0.021585384, z: -0.059913594, w: 0.99673694} + m_LocalPosition: {x: -0.00004458172, y: 0.0005361366, z: -0.000036278194} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4089660411005556} + m_Father: {fileID: 4731714980939906} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4458723164817438 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1743271303705216} + m_LocalRotation: {x: -0.100460716, y: 0.17879021, z: 0.023270492, w: 0.9784683} + m_LocalPosition: {x: 4.6566128e-12, y: 0.00021792586, z: 9.3132255e-12} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4807960200561236} + m_Father: {fileID: 4531848624766692} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4474660056667814 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1138247430904094} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.06} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4653173414971708} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4531848624766692 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1679763963463108} + m_LocalRotation: {x: 0.024118794, y: 0.102515854, z: -0.016770596, w: 0.9942975} + m_LocalPosition: {x: -1.8626451e-11, y: 0.00018896798, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4458723164817438} + m_Father: {fileID: 4981237587957216} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4545413325927090 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629076531411410} + m_LocalRotation: {x: 0.07942926, y: 0.031121412, z: 0.0018182565, w: 0.996353} + m_LocalPosition: {x: 3.783498e-12, y: 0.00052888185, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4067447437714518} + m_Father: {fileID: 4899618771947256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4556298815442742 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1028885053416752} + m_LocalRotation: {x: 0.01658715, y: 0.0006006121, z: -0.0042770337, w: 0.99985313} + m_LocalPosition: {x: -4.6566128e-12, y: 0.00029097358, z: 3.1432135e-11} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4989641297664924} + m_Father: {fileID: 4711516186769048} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4556403284046966 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1620706546805496} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00028716665, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4718087285593220} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4568955781540646 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1708268698332586} + m_LocalRotation: {x: -0.007590273, y: 0.01388651, z: -0.016617289, w: 0.99973667} + m_LocalPosition: {x: -9.6042636e-12, y: 0.0002931769, z: -9.8953025e-12} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4604071986457100} + m_Father: {fileID: 4113637290785580} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4602017553826212 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1727485427504892} + m_LocalRotation: {x: 0.050610885, y: -0.03240509, z: 0.0062136524, w: 0.9981733} + m_LocalPosition: {x: -2.1973392e-11, y: 0.00028243498, z: 2.3283064e-12} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4220431479120062} + m_Father: {fileID: 4412517256400794} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4604071986457100 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1587673880008760} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.0002791926, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4568955781540646} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4653173414971708 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1431058186026970} + 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: 4474660056667814} + - {fileID: 4007723491459628} + - {fileID: 4319449009256914} + - {fileID: 4098349581586358} + - {fileID: 4839536768129788} + - {fileID: 4780581265076280} + m_Father: {fileID: 4726844815573086} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4711516186769048 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1957854551773514} + m_LocalRotation: {x: 0.050324433, y: 0.059749927, z: 0.0043306854, w: 0.99693465} + m_LocalPosition: {x: -0.0002792919, y: 0.0005194665, z: -0.00004800207} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4556298815442742} + m_Father: {fileID: 4731714980939906} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4718087285593220 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1396280233456802} + m_LocalRotation: {x: 0.016483491, y: -0.07333579, z: -0.008949763, w: 0.99713093} + m_LocalPosition: {x: -6.4028427e-12, y: 0.0003102589, z: 1.3315002e-11} + m_LocalScale: {x: 0.9999998, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4556403284046966} + m_Father: {fileID: 4197115308921472} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4726844815573086 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1469220889570388} + 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: 4180320620054190} + - {fileID: 4967745397010832} + - {fileID: 4653173414971708} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4731714980939906 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1869784272461842} + m_LocalRotation: {x: -0.00010582404, y: -0.0057285763, z: 0.056991156, w: 0.99835825} + m_LocalPosition: {x: -4.4565239e-13, y: 0.00042688407, z: 4.7430146e-12} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4711516186769048} + - {fileID: 4451208778096458} + - {fileID: 4899618771947256} + - {fileID: 4056405236708552} + - {fileID: 4319160110520870} + m_Father: {fileID: 4062987850226086} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4780581265076280 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1671039121602088} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4653173414971708} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4807924809743902 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1452081128286136} + m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: + - {fileID: 4399402726578480} + m_Father: {fileID: 4180320620054190} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4807960200561236 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1320697741236316} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00027877532, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4458723164817438} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4839536768129788 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1200292382491122} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4653173414971708} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4884042871165928 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1768370560387996} + m_LocalRotation: {x: 0.0030117808, y: -0.019417752, z: 0.014554779, w: 0.99970096} + m_LocalPosition: {x: 2.1973392e-11, y: 0.000035362, z: -2.9103829e-12} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4113637290785580} + m_Father: {fileID: 4381421865835424} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4899618771947256 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1468141546394612} + m_LocalRotation: {x: 0.048175108, y: -0.04408784, z: -0.16956106, w: 0.98335373} + m_LocalPosition: {x: 0.0002529882, y: 0.000107125656, z: 0.000012998413} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 4545413325927090} + m_Father: {fileID: 4731714980939906} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4967745397010832 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1937369400946318} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4726844815573086} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4981237587957216 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1304151215898682} + m_LocalRotation: {x: 0.17927602, y: 0.01907303, z: -0.07598522, w: 0.98067456} + m_LocalPosition: {x: 4.307367e-11, y: 0.00033730656, z: 1.1641532e-12} + m_LocalScale: {x: 1, y: 0.99999994, z: 1.0000001} + m_Children: + - {fileID: 4531848624766692} + m_Father: {fileID: 4319160110520870} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4989641297664924 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1556339427087150} + m_LocalRotation: {x: -0.037379432, y: -0.021254607, z: -0.022002952, w: 0.99883276} + m_LocalPosition: {x: 2.0954757e-11, y: 0.00003337583, z: 0} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_Children: + - {fileID: 4412517256400794} + m_Father: {fileID: 4556298815442742} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &54584660101132624 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1937369400946318} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!95 &95718739528495300 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1469220889570388} + m_Enabled: 1 + m_Avatar: {fileID: 9000000, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Controller: {fileID: 9100000, guid: fec1c1cdc86cb5b4aad9b22ede74632b, type: 2} + m_CullingMode: 1 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 +--- !u!114 &114092341136231322 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1200292382491122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe5040c2eaa9ff147b80ded004191c67, type: 3} + m_Name: + m_EditorClassIdentifier: + gameObjectToFollow: {fileID: 1587673880008760} + gameObjectToChange: {fileID: 0} + followsPosition: 1 + smoothsPosition: 0 + maxAllowedPerFrameDistanceDifference: 0.003 + followsRotation: 1 + smoothsRotation: 0 + maxAllowedPerFrameAngleDifference: 1.5 + followsScale: 1 + smoothsScale: 0 + maxAllowedPerFrameSizeDifference: 0.003 + _moment: 2 +--- !u!114 &114133340415354398 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1398406636836058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe5040c2eaa9ff147b80ded004191c67, type: 3} + m_Name: + m_EditorClassIdentifier: + gameObjectToFollow: {fileID: 1320697741236316} + gameObjectToChange: {fileID: 0} + followsPosition: 1 + smoothsPosition: 0 + maxAllowedPerFrameDistanceDifference: 0.003 + followsRotation: 1 + smoothsRotation: 0 + maxAllowedPerFrameAngleDifference: 1.5 + followsScale: 1 + smoothsScale: 0 + maxAllowedPerFrameSizeDifference: 0.003 + _moment: 2 +--- !u!114 &114312545553378902 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1087066476825678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe5040c2eaa9ff147b80ded004191c67, type: 3} + m_Name: + m_EditorClassIdentifier: + gameObjectToFollow: {fileID: 1475728512817002} + gameObjectToChange: {fileID: 0} + followsPosition: 1 + smoothsPosition: 0 + maxAllowedPerFrameDistanceDifference: 0.003 + followsRotation: 1 + smoothsRotation: 0 + maxAllowedPerFrameAngleDifference: 1.5 + followsScale: 1 + smoothsScale: 0 + maxAllowedPerFrameSizeDifference: 0.003 + _moment: 2 +--- !u!114 &114586987141607270 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1671039121602088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe5040c2eaa9ff147b80ded004191c67, type: 3} + m_Name: + m_EditorClassIdentifier: + gameObjectToFollow: {fileID: 1126228594434696} + gameObjectToChange: {fileID: 0} + followsPosition: 1 + smoothsPosition: 0 + maxAllowedPerFrameDistanceDifference: 0.003 + followsRotation: 1 + smoothsRotation: 0 + maxAllowedPerFrameAngleDifference: 1.5 + followsScale: 1 + smoothsScale: 0 + maxAllowedPerFrameSizeDifference: 0.003 + _moment: 2 +--- !u!114 &114649316680068954 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237819446708720} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe5040c2eaa9ff147b80ded004191c67, type: 3} + m_Name: + m_EditorClassIdentifier: + gameObjectToFollow: {fileID: 1620706546805496} + gameObjectToChange: {fileID: 0} + followsPosition: 1 + smoothsPosition: 0 + maxAllowedPerFrameDistanceDifference: 0.003 + followsRotation: 1 + smoothsRotation: 0 + maxAllowedPerFrameAngleDifference: 1.5 + followsScale: 1 + smoothsScale: 0 + maxAllowedPerFrameSizeDifference: 0.003 + _moment: 2 +--- !u!114 &114963189862696322 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1469220889570388} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1c52b3a0d5f4fd744bbbd135b8d647b2, type: 3} + m_Name: + m_EditorClassIdentifier: + controllerType: 0 + setFingersForControllerType: 1 + mirrorModel: 0 + animationSnapSpeed: 0.1 + thumbButton: 9 + indexButton: 3 + middleButton: 0 + ringButton: 0 + pinkyButton: 0 + threeFingerButton: 7 + thumbAxisButton: 7 + indexAxisButton: 5 + middleAxisButton: 9 + ringAxisButton: 10 + pinkyAxisButton: 11 + threeFingerAxisButton: 2 + thumbState: 0 + indexState: 0 + middleState: 0 + ringState: 0 + pinkyState: 0 + threeFingerState: 0 + nearTouchOverrides: + ignoreAllOverrides: 1 + stateValue: -1 + applyThumbOverride: 1 + thumbOverride: 0 + applyIndexOverride: 1 + indexOverride: 0 + applyMiddleOverride: 1 + middleOverride: 0 + applyRingOverride: 1 + ringOverride: 0 + applyPinkyOverride: 1 + pinkyOverride: 0 + touchOverrides: + ignoreAllOverrides: 1 + stateValue: -1 + applyThumbOverride: 1 + thumbOverride: 0 + applyIndexOverride: 1 + indexOverride: 0 + applyMiddleOverride: 1 + middleOverride: 0 + applyRingOverride: 1 + ringOverride: 0 + applyPinkyOverride: 1 + pinkyOverride: 0 + grabOverrides: + ignoreAllOverrides: 1 + stateValue: -1 + applyThumbOverride: 1 + thumbOverride: 0 + applyIndexOverride: 1 + indexOverride: 0 + applyMiddleOverride: 1 + middleOverride: 0 + applyRingOverride: 1 + ringOverride: 0 + applyPinkyOverride: 1 + pinkyOverride: 0 + useOverrides: + ignoreAllOverrides: 1 + stateValue: -1 + applyThumbOverride: 1 + thumbOverride: 0 + applyIndexOverride: 1 + indexOverride: 0 + applyMiddleOverride: 1 + middleOverride: 0 + applyRingOverride: 1 + ringOverride: 0 + applyPinkyOverride: 1 + pinkyOverride: 0 + handModel: {fileID: 0} + controllerEvents: {fileID: 0} + interactNearTouch: {fileID: 0} + interactTouch: {fileID: 0} + interactGrab: {fileID: 0} + interactUse: {fileID: 0} +--- !u!135 &135280319823165322 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1671039121602088} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.015 + m_Center: {x: 0, y: -0.015, z: 0} +--- !u!135 &135394616707351404 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1087066476825678} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.015 + m_Center: {x: 0, y: -0.015, z: 0} +--- !u!135 &135754865099814890 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1200292382491122} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.015 + m_Center: {x: 0, y: -0.015, z: 0} +--- !u!135 &135804757305491734 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237819446708720} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.015 + m_Center: {x: 0, y: -0.015, z: 0} +--- !u!135 &135833420172407900 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1398406636836058} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.015 + m_Center: {x: 0, y: -0.015, z: 0} +--- !u!136 &136032359288340650 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1138247430904094} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.04 + m_Height: 0.15 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!137 &137710368452278466 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1812289512735356} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5b0e29f17b95f4b4e8bbee0faaa0ac29, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: 9fbd4cfd43766cc4cbcb915ceafe52a9, type: 3} + m_Bones: + - {fileID: 4399402726578480} + - {fileID: 4062987850226086} + - {fileID: 4731714980939906} + - {fileID: 4451208778096458} + - {fileID: 4089660411005556} + - {fileID: 4078179695666178} + - {fileID: 4197115308921472} + - {fileID: 4718087285593220} + - {fileID: 4056405236708552} + - {fileID: 4381421865835424} + - {fileID: 4884042871165928} + - {fileID: 4113637290785580} + - {fileID: 4568955781540646} + - {fileID: 4711516186769048} + - {fileID: 4556298815442742} + - {fileID: 4989641297664924} + - {fileID: 4412517256400794} + - {fileID: 4602017553826212} + - {fileID: 4899618771947256} + - {fileID: 4545413325927090} + - {fileID: 4067447437714518} + - {fileID: 4291014158247542} + - {fileID: 4187154851554630} + - {fileID: 4319160110520870} + - {fileID: 4981237587957216} + - {fileID: 4531848624766692} + - {fileID: 4458723164817438} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 4399402726578480} + m_AABB: + m_Center: {x: -0.00020831786, y: 0.0009755513, z: 0.0000056201243} + m_Extent: {x: 0.0010329011, y: 0.0012315598, z: 0.0007088389} + m_DirtyAABB: 0 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab.meta new file mode 100644 index 0000000..861a701 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afec65f27dcd2c74cba31fc61eea61e6 +timeCreated: 1499672914 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs new file mode 100644 index 0000000..552a61b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs @@ -0,0 +1,792 @@ +// Avatar Hands|Prefabs|0150 +namespace VRTK +{ + using UnityEngine; + using System; + using System.Collections; + + [Serializable] + public sealed class AxisOverrides + { + /// + /// Determine when to apply the override. + /// + public enum ApplyOverrideType + { + /// + /// Never apply the override. + /// + Never, + /// + /// Always apply the override. + /// + Always, + /// + /// Only apply the override when the state is set to digital. + /// + DigitalState, + /// + /// Only apply the override when the state is set to axis. + /// + AxisState, + /// + /// Only apply the override when the state is set to sense axis. + /// + SenseAxisState, + /// + /// Only apply the override when the state is set to axis or sense axis. + /// + AxisAndSenseAxisState + } + + [Header("Global Override Settings")] + + [Tooltip("Determines whether to ignore all of the given overrides on an Interaction event.")] + public bool ignoreAllOverrides = true; + [Tooltip("Sets the Animation parameter for the interaction type and can be used to change the Idle pose based on interaction type.")] + public float stateValue = -1f; + + [Header("Thumb Override Settings")] + + [Tooltip("Determines when to apply the given thumb override.")] + public ApplyOverrideType applyThumbOverride = ApplyOverrideType.Always; + [Tooltip("The axis override for the thumb on an Interact Touch event. Will only be applicable if the thumb button state is not touched.")] + [Range(0f, 1f)] + public float thumbOverride; + + [Header("Index Finger Override Settings")] + + [Tooltip("Determines when to apply the given index finger override.")] + public ApplyOverrideType applyIndexOverride = ApplyOverrideType.Always; + [Tooltip("The axis override for the index finger on an Interact Touch event. Will only be applicable if the index finger button state is not touched.")] + [Range(0f, 1f)] + public float indexOverride; + + [Header("Middle Finger Override Settings")] + + [Tooltip("Determines when to apply the given middle finger override.")] + public ApplyOverrideType applyMiddleOverride = ApplyOverrideType.Always; + [Tooltip("The axis override for the middle finger on an Interact Touch event. Will only be applicable if the middle finger button state is not touched.")] + [Range(0f, 1f)] + public float middleOverride; + + [Header("Ring Finger Override Settings")] + + [Tooltip("Determines when to apply the given ring finger override.")] + public ApplyOverrideType applyRingOverride = ApplyOverrideType.Always; + [Tooltip("The axis override for the ring finger on an Interact Touch event. Will only be applicable if the ring finger button state is not touched.")] + [Range(0f, 1f)] + public float ringOverride; + + [Header("Pinky Finger Override Settings")] + + [Tooltip("Determines when to apply the given pinky finger override.")] + public ApplyOverrideType applyPinkyOverride = ApplyOverrideType.Always; + [Tooltip("The axis override for the pinky finger on an Interact Touch event. Will only be applicable if the pinky finger button state is not touched.")] + [Range(0f, 1f)] + public float pinkyOverride; + } + + /// + /// Provides a custom controller hand model with psuedo finger functionality. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand` prefab as a child of either the left or right script alias. + /// * If the prefab is being used in the left hand then check the `Mirror Model` parameter. + /// * By default, the avatar hand controller will detect which controller is connected and represent it accordingly. + /// * Optionally, use SDKTransformModify scripts to adjust the hand orientation based on different controller types. + /// + /// + /// `032_Controller_CustomControllerModel` uses the `VRTK_BasicHand` prefab to display custom avatar hands for the left and right controller. + /// + public class VRTK_AvatarHandController : MonoBehaviour + { + [Header("Hand Settings")] + + [Tooltip("The controller type to use for default finger settings.")] + public SDK_BaseController.ControllerType controllerType; + [Tooltip("Determines whether the Finger and State settings are auto set based on the connected controller type.")] + public bool setFingersForControllerType = true; + [Tooltip("If this is checked then the model will be mirrored, tick this if the avatar hand is for the left hand controller.")] + public bool mirrorModel = false; + [Tooltip("The speed in which a finger will transition to it's destination position if the finger state is `Digital`.")] + public float animationSnapSpeed = 0.1f; + + [Header("Digital Finger Settings")] + + [Tooltip("The button alias to control the thumb if the thumb state is `Digital`.")] + public VRTK_ControllerEvents.ButtonAlias thumbButton = VRTK_ControllerEvents.ButtonAlias.TouchpadTouch; + [Tooltip("The button alias to control the index finger if the index finger state is `Digital`.")] + public VRTK_ControllerEvents.ButtonAlias indexButton = VRTK_ControllerEvents.ButtonAlias.TriggerPress; + [Tooltip("The button alias to control the middle finger if the middle finger state is `Digital`.")] + public VRTK_ControllerEvents.ButtonAlias middleButton = VRTK_ControllerEvents.ButtonAlias.Undefined; + [Tooltip("The button alias to control the ring finger if the ring finger state is `Digital`.")] + public VRTK_ControllerEvents.ButtonAlias ringButton = VRTK_ControllerEvents.ButtonAlias.Undefined; + [Tooltip("The button alias to control the pinky finger if the pinky finger state is `Digital`.")] + public VRTK_ControllerEvents.ButtonAlias pinkyButton = VRTK_ControllerEvents.ButtonAlias.Undefined; + [Tooltip("The button alias to control the middle, ring and pinky finger if the three finger state is `Digital`.")] + public VRTK_ControllerEvents.ButtonAlias threeFingerButton = VRTK_ControllerEvents.ButtonAlias.GripPress; + + [Header("Axis Finger Settings")] + + [Tooltip("The button type to listen for axis changes to control the thumb.")] + public SDK_BaseController.ButtonTypes thumbAxisButton = SDK_BaseController.ButtonTypes.Touchpad; + [Tooltip("The button type to listen for axis changes to control the index finger.")] + public SDK_BaseController.ButtonTypes indexAxisButton = SDK_BaseController.ButtonTypes.Trigger; + [Tooltip("The button type to listen for axis changes to control the middle finger.")] + public SDK_BaseController.ButtonTypes middleAxisButton = SDK_BaseController.ButtonTypes.MiddleFinger; + [Tooltip("The button type to listen for axis changes to control the ring finger.")] + public SDK_BaseController.ButtonTypes ringAxisButton = SDK_BaseController.ButtonTypes.RingFinger; + [Tooltip("The button type to listen for axis changes to control the pinky finger.")] + public SDK_BaseController.ButtonTypes pinkyAxisButton = SDK_BaseController.ButtonTypes.PinkyFinger; + [Tooltip("The button type to listen for axis changes to control the middle, ring and pinky finger.")] + public SDK_BaseController.ButtonTypes threeFingerAxisButton = SDK_BaseController.ButtonTypes.Grip; + + [Header("Finger State Settings")] + + [Tooltip("The Axis Type to utilise when dealing with the thumb state. Not all controllers support all axis types on all of the available buttons.")] + public VRTK_ControllerEvents.AxisType thumbState = VRTK_ControllerEvents.AxisType.Digital; + public VRTK_ControllerEvents.AxisType indexState = VRTK_ControllerEvents.AxisType.Digital; + public VRTK_ControllerEvents.AxisType middleState = VRTK_ControllerEvents.AxisType.Digital; + public VRTK_ControllerEvents.AxisType ringState = VRTK_ControllerEvents.AxisType.Digital; + public VRTK_ControllerEvents.AxisType pinkyState = VRTK_ControllerEvents.AxisType.Digital; + public VRTK_ControllerEvents.AxisType threeFingerState = VRTK_ControllerEvents.AxisType.Digital; + + [Header("Finger Axis Overrides")] + + [Tooltip("Finger axis overrides on an Interact NearTouch event.")] + public AxisOverrides nearTouchOverrides; + [Tooltip("Finger axis overrides on an Interact Touch event.")] + public AxisOverrides touchOverrides; + [Tooltip("Finger axis overrides on an Interact Grab event.")] + public AxisOverrides grabOverrides; + [Tooltip("Finger axis overrides on an Interact Use event.")] + public AxisOverrides useOverrides; + + [Header("Custom Settings")] + + [Tooltip("The Transform that contains the avatar hand model. If this is left blank then a child GameObject named `Model` will be searched for to use as the Transform.")] + public Transform handModel; + [Tooltip("The controller to listen for the events on. If this is left blank as it will be auto populated by finding the Controller Events script on the parent GameObject.")] + public VRTK_ControllerEvents controllerEvents; + [Tooltip("An optional Interact NearTouch to listen for near touch events on. If this is left blank as it will attempt to be auto populated by finding the Interact NearTouch script on the parent GameObject.")] + public VRTK_InteractNearTouch interactNearTouch; + [Tooltip("An optional Interact Touch to listen for touch events on. If this is left blank as it will attempt to be auto populated by finding the Interact Touch script on the parent GameObject.")] + public VRTK_InteractTouch interactTouch; + [Tooltip("An optional Interact Grab to listen for grab events on. If this is left blank as it will attempt to be auto populated by finding the Interact Grab script on the parent GameObject.")] + public VRTK_InteractGrab interactGrab; + [Tooltip("An optional Interact Use to listen for use events on. If this is left blank as it will attempt to be auto populated by finding the Interact Use script on the parent GameObject.")] + public VRTK_InteractUse interactUse; + + #region Protected class variables + protected Animator animator; + + protected enum OverrideState + { + NoOverride, + IsOverriding, + WasOverring, + KeepOverring + } + + // Index Finger Mapping: 0 = thumb, 1 = index, 2 = middle, 3 = ring, 4 = pinky + protected bool[] fingerStates = new bool[5]; + protected bool[] fingerChangeStates = new bool[5]; + protected float[] fingerAxis = new float[5]; + protected float[] fingerRawAxis = new float[5]; + protected float[] fingerUntouchedAxis = new float[5]; + protected float[] fingerSaveAxis = new float[5]; + protected float[] fingerForceAxis = new float[5]; + + protected OverrideState[] overrideAxisValues = new OverrideState[5]; + protected VRTK_ControllerEvents.AxisType[] axisTypes = new VRTK_ControllerEvents.AxisType[5]; + protected Coroutine[] fingerAnimationRoutine = new Coroutine[5]; + + protected VRTK_ControllerEvents.ButtonAlias savedThumbButtonState = VRTK_ControllerEvents.ButtonAlias.Undefined; + protected VRTK_ControllerEvents.ButtonAlias savedIndexButtonState = VRTK_ControllerEvents.ButtonAlias.Undefined; + protected VRTK_ControllerEvents.ButtonAlias savedMiddleButtonState = VRTK_ControllerEvents.ButtonAlias.Undefined; + protected VRTK_ControllerEvents.ButtonAlias savedRingButtonState = VRTK_ControllerEvents.ButtonAlias.Undefined; + protected VRTK_ControllerEvents.ButtonAlias savedPinkyButtonState = VRTK_ControllerEvents.ButtonAlias.Undefined; + protected VRTK_ControllerEvents.ButtonAlias savedThreeFingerButtonState = VRTK_ControllerEvents.ButtonAlias.Undefined; + + protected SDK_BaseController.ButtonTypes savedThumbAxisButtonState; + protected SDK_BaseController.ButtonTypes savedIndexAxisButtonState; + protected SDK_BaseController.ButtonTypes savedMiddleAxisButtonState; + protected SDK_BaseController.ButtonTypes savedRingAxisButtonState; + protected SDK_BaseController.ButtonTypes savedPinkyAxisButtonState; + protected SDK_BaseController.ButtonTypes savedThreeFingerAxisButtonState; + + protected VRTK_ControllerReference controllerReference; + + #endregion Protected class variables + + #region MonoBehaviour methods + protected virtual void OnEnable() + { + animator = GetComponent(); + controllerEvents = (controllerEvents != null ? controllerEvents : GetComponentInParent()); + interactNearTouch = (interactNearTouch != null ? interactNearTouch : GetComponentInParent()); + interactTouch = (interactTouch != null ? interactTouch : GetComponentInParent()); + interactGrab = (interactGrab != null ? interactGrab : GetComponentInParent()); + interactUse = (interactUse != null ? interactUse : GetComponentInParent()); + + controllerReference = VRTK_ControllerReference.GetControllerReference(controllerEvents.gameObject); + } + + protected virtual void OnDisable() + { + UnsubscribeEvents(); + controllerType = SDK_BaseController.ControllerType.Undefined; + for (int i = 0; i < fingerAnimationRoutine.Length; i++) + { + if (fingerAnimationRoutine[i] != null) + { + fingerAnimationRoutine[i] = null; + } + } + } + + protected virtual void Update() + { + if (controllerType == SDK_BaseController.ControllerType.Undefined) + { + DetectController(); + } + + if (animator != null) + { + ProcessFinger(thumbState, 0); + ProcessFinger(indexState, 1); + ProcessFinger(middleState, 2); + ProcessFinger(ringState, 3); + ProcessFinger(pinkyState, 4); + } + } + #endregion MonoBehaviour methods + + protected virtual void SubscribeButtonEvent(VRTK_ControllerEvents.ButtonAlias buttonType, ref VRTK_ControllerEvents.ButtonAlias saveType, ControllerInteractionEventHandler eventHandler) + { + if (buttonType != VRTK_ControllerEvents.ButtonAlias.Undefined) + { + saveType = buttonType; + controllerEvents.SubscribeToButtonAliasEvent(buttonType, true, eventHandler); + controllerEvents.SubscribeToButtonAliasEvent(buttonType, false, eventHandler); + } + } + + protected virtual void UnsubscribeButtonEvent(VRTK_ControllerEvents.ButtonAlias buttonType, ControllerInteractionEventHandler eventHandler) + { + if (buttonType != VRTK_ControllerEvents.ButtonAlias.Undefined) + { + controllerEvents.UnsubscribeToButtonAliasEvent(buttonType, true, eventHandler); + controllerEvents.UnsubscribeToButtonAliasEvent(buttonType, false, eventHandler); + } + } + + protected virtual void SubscribeButtonAxisEvent(SDK_BaseController.ButtonTypes buttonType, ref SDK_BaseController.ButtonTypes saveType, VRTK_ControllerEvents.AxisType axisType, ControllerInteractionEventHandler eventHandler) + { + saveType = buttonType; + controllerEvents.SubscribeToAxisAliasEvent(buttonType, axisType, eventHandler); + } + + protected virtual void UnsubscribeButtonAxisEvent(SDK_BaseController.ButtonTypes buttonType, VRTK_ControllerEvents.AxisType axisType, ControllerInteractionEventHandler eventHandler) + { + controllerEvents.UnsubscribeToAxisAliasEvent(buttonType, axisType, eventHandler); + } + + #region Subscription Managers + protected virtual void SubscribeEvents() + { + if (controllerEvents != null) + { + SubscribeButtonEvent(thumbButton, ref savedThumbButtonState, DoThumbEvent); + SubscribeButtonEvent(indexButton, ref savedIndexButtonState, DoIndexEvent); + SubscribeButtonEvent(middleButton, ref savedMiddleButtonState, DoMiddleEvent); + SubscribeButtonEvent(ringButton, ref savedRingButtonState, DoRingEvent); + SubscribeButtonEvent(pinkyButton, ref savedPinkyButtonState, DoPinkyEvent); + SubscribeButtonEvent(threeFingerButton, ref savedThreeFingerButtonState, DoThreeFingerEvent); + + SubscribeButtonAxisEvent(thumbAxisButton, ref savedThumbAxisButtonState, thumbState, DoThumbAxisEvent); + SubscribeButtonAxisEvent(indexAxisButton, ref savedIndexAxisButtonState, indexState, DoIndexAxisEvent); + SubscribeButtonAxisEvent(middleAxisButton, ref savedMiddleAxisButtonState, middleState, DoMiddleAxisEvent); + SubscribeButtonAxisEvent(ringAxisButton, ref savedRingAxisButtonState, ringState, DoRingAxisEvent); + SubscribeButtonAxisEvent(pinkyAxisButton, ref savedPinkyAxisButtonState, pinkyState, DoPinkyAxisEvent); + SubscribeButtonAxisEvent(threeFingerAxisButton, ref savedThreeFingerAxisButtonState, threeFingerState, DoThreeFingerAxisEvent); + } + + if (interactNearTouch != null) + { + interactNearTouch.ControllerNearTouchInteractableObject += DoControllerNearTouch; + interactNearTouch.ControllerNearUntouchInteractableObject += DoControllerNearUntouch; + } + + if (interactTouch != null) + { + interactTouch.ControllerTouchInteractableObject += DoControllerTouch; + interactTouch.ControllerUntouchInteractableObject += DoControllerUntouch; + } + + if (interactGrab != null) + { + interactGrab.ControllerGrabInteractableObject += DoControllerGrab; + interactGrab.ControllerUngrabInteractableObject += DoControllerUngrab; + } + + if (interactUse != null) + { + interactUse.ControllerUseInteractableObject += DoControllerUse; + interactUse.ControllerUnuseInteractableObject += DoControllerUnuse; + } + } + + protected virtual void UnsubscribeEvents() + { + if (controllerEvents != null) + { + UnsubscribeButtonEvent(savedThumbButtonState, DoThumbEvent); + UnsubscribeButtonEvent(savedIndexButtonState, DoIndexEvent); + UnsubscribeButtonEvent(savedMiddleButtonState, DoMiddleEvent); + UnsubscribeButtonEvent(savedRingButtonState, DoRingEvent); + UnsubscribeButtonEvent(savedPinkyButtonState, DoPinkyEvent); + UnsubscribeButtonEvent(savedThreeFingerButtonState, DoThreeFingerEvent); + + UnsubscribeButtonAxisEvent(savedThumbAxisButtonState, thumbState, DoThumbAxisEvent); + UnsubscribeButtonAxisEvent(savedIndexAxisButtonState, indexState, DoIndexAxisEvent); + UnsubscribeButtonAxisEvent(savedMiddleAxisButtonState, middleState, DoMiddleAxisEvent); + UnsubscribeButtonAxisEvent(savedRingAxisButtonState, ringState, DoRingAxisEvent); + UnsubscribeButtonAxisEvent(savedPinkyAxisButtonState, pinkyState, DoPinkyAxisEvent); + UnsubscribeButtonAxisEvent(savedThreeFingerAxisButtonState, threeFingerState, DoThreeFingerAxisEvent); + } + + if (interactNearTouch != null) + { + interactNearTouch.ControllerNearTouchInteractableObject -= DoControllerNearTouch; + interactNearTouch.ControllerNearUntouchInteractableObject -= DoControllerNearUntouch; + } + + if (interactTouch != null) + { + interactTouch.ControllerTouchInteractableObject -= DoControllerTouch; + interactTouch.ControllerUntouchInteractableObject -= DoControllerUntouch; + } + + if (interactGrab != null) + { + interactGrab.ControllerGrabInteractableObject -= DoControllerGrab; + interactGrab.ControllerUngrabInteractableObject -= DoControllerUngrab; + } + + if (interactUse != null) + { + interactUse.ControllerUseInteractableObject -= DoControllerUse; + interactUse.ControllerUnuseInteractableObject -= DoControllerUnuse; + } + } + #endregion Subscription Managers + + #region Event methods + protected virtual void SetFingerEvent(int fingerIndex, ControllerInteractionEventArgs e) + { + if (overrideAxisValues[fingerIndex] == OverrideState.NoOverride) + { + fingerChangeStates[fingerIndex] = true; + fingerStates[fingerIndex] = (e.buttonPressure == 0f ? false : true); + } + } + + protected virtual void SetFingerAxisEvent(int fingerIndex, ControllerInteractionEventArgs e) + { + fingerRawAxis[fingerIndex] = e.buttonPressure; + if (overrideAxisValues[fingerIndex] == OverrideState.NoOverride) + { + fingerAxis[fingerIndex] = e.buttonPressure; + } + } + + protected virtual void DoThumbEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerEvent(0, e); + } + + protected virtual void DoIndexEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerEvent(1, e); + } + + protected virtual void DoMiddleEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerEvent(2, e); + } + + protected virtual void DoRingEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerEvent(3, e); + } + + protected virtual void DoPinkyEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerEvent(4, e); + } + + protected virtual void DoThreeFingerEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerEvent(2, e); + SetFingerEvent(3, e); + SetFingerEvent(4, e); + } + + protected virtual void DoThumbAxisEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerAxisEvent(0, e); + } + + protected virtual void DoIndexAxisEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerAxisEvent(1, e); + } + + protected virtual void DoMiddleAxisEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerAxisEvent(2, e); + } + + protected virtual void DoRingAxisEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerAxisEvent(3, e); + } + + protected virtual void DoPinkyAxisEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerAxisEvent(4, e); + } + + protected virtual void DoThreeFingerAxisEvent(object sender, ControllerInteractionEventArgs e) + { + SetFingerAxisEvent(2, e); + SetFingerAxisEvent(3, e); + SetFingerAxisEvent(4, e); + } + + protected virtual bool IsButtonPressed(int arrayIndex) + { + float minValue = (axisTypes[arrayIndex] == VRTK_ControllerEvents.AxisType.SenseAxis && controllerEvents != null ? controllerEvents.senseAxisPressThreshold : 0f); + return (fingerStates[arrayIndex] || fingerRawAxis[arrayIndex] > minValue); + } + + protected virtual void SaveFingerAxis(int arrayIndex, float updateAxis) + { + fingerSaveAxis[arrayIndex] = (fingerSaveAxis[arrayIndex] != fingerForceAxis[arrayIndex] ? updateAxis : fingerSaveAxis[arrayIndex]); + } + + protected virtual void HandleOverrideOn(bool ignoreAllOverrides, float[] givenFingerAxis, bool[] overridePermissions, float[] overrideValues) + { + if (!ignoreAllOverrides) + { + for (int i = 0; i < overrideAxisValues.Length; i++) + { + if (overridePermissions[i] && !IsButtonPressed(i) && overrideAxisValues[i] != OverrideState.WasOverring) + { + SetOverrideValue(i, ref overrideAxisValues, OverrideState.IsOverriding); + if (overrideAxisValues[i] == OverrideState.NoOverride) + { + fingerUntouchedAxis[i] = givenFingerAxis[i]; + } + SaveFingerAxis(i, givenFingerAxis[i]); + fingerForceAxis[i] = overrideValues[i]; + } + } + } + } + + protected virtual void HandleOverrideOff(bool ignoreAllOverrides, bool[] overridePermissions, bool keepOverriding) + { + if (!ignoreAllOverrides) + { + for (int i = 0; i < fingerAxis.Length; i++) + { + if (overridePermissions[i] && !IsButtonPressed(i) && overrideAxisValues[i] == OverrideState.IsOverriding) + { + SetOverrideValue(i, ref overrideAxisValues, (keepOverriding ? OverrideState.KeepOverring : OverrideState.WasOverring)); + fingerAxis[i] = fingerForceAxis[i]; + fingerForceAxis[i] = fingerSaveAxis[i]; + } + } + } + } + + protected virtual float CorrectOverrideValue(float givenOverride) + { + return (givenOverride == 0f ? 0.0001f : givenOverride); + } + + protected virtual bool ApplyFingerOverrides(AxisOverrides.ApplyOverrideType overrideType, int arrayIndex) + { + if (overrideType == AxisOverrides.ApplyOverrideType.Always || + (overrideType == AxisOverrides.ApplyOverrideType.DigitalState && axisTypes[arrayIndex] == VRTK_ControllerEvents.AxisType.Digital) || + (overrideType == AxisOverrides.ApplyOverrideType.AxisState && axisTypes[arrayIndex] == VRTK_ControllerEvents.AxisType.Axis) || + (overrideType == AxisOverrides.ApplyOverrideType.SenseAxisState && axisTypes[arrayIndex] == VRTK_ControllerEvents.AxisType.SenseAxis) || + (overrideType == AxisOverrides.ApplyOverrideType.AxisAndSenseAxisState && (axisTypes[arrayIndex] == VRTK_ControllerEvents.AxisType.Axis || axisTypes[arrayIndex] == VRTK_ControllerEvents.AxisType.SenseAxis))) + { + return true; + } + return false; + } + + protected virtual bool[] GetOverridePermissions(AxisOverrides overrideType) + { + bool[] overrides = new bool[] + { + ApplyFingerOverrides(overrideType.applyThumbOverride, 0), + ApplyFingerOverrides(overrideType.applyIndexOverride, 1), + ApplyFingerOverrides(overrideType.applyMiddleOverride, 2), + ApplyFingerOverrides(overrideType.applyRingOverride, 3), + ApplyFingerOverrides(overrideType.applyPinkyOverride, 4) + }; + return overrides; + } + + protected virtual float[] GetOverrideValues(AxisOverrides overrideType) + { + float[] overrides = new float[] + { + CorrectOverrideValue(overrideType.thumbOverride), + CorrectOverrideValue(overrideType.indexOverride), + CorrectOverrideValue(overrideType.middleOverride), + CorrectOverrideValue(overrideType.ringOverride), + CorrectOverrideValue(overrideType.pinkyOverride) + }; + return overrides; + } + + protected virtual void SetAnimatorStateOn(string state, AxisOverrides overrides) + { + animator.SetFloat(state, (overrides.ignoreAllOverrides ? -1f : overrides.stateValue)); + } + + protected virtual void SetAnimatorStateOff(string state) + { + animator.SetFloat(state, -1f); + } + + protected virtual void DoControllerNearTouch(object sender, ObjectInteractEventArgs e) + { + if (interactTouch != null && interactTouch.GetTouchedObject() == null) + { + SetAnimatorStateOn("NearTouchState", nearTouchOverrides); + HandleOverrideOn(nearTouchOverrides.ignoreAllOverrides, fingerAxis, GetOverridePermissions(nearTouchOverrides), GetOverrideValues(nearTouchOverrides)); + } + } + + protected virtual void DoControllerNearUntouch(object sender, ObjectInteractEventArgs e) + { + if (interactNearTouch.GetNearTouchedObjects().Count == 0 && (interactTouch == null || interactTouch.GetTouchedObject() == null)) + { + for (int i = 0; i < fingerUntouchedAxis.Length; i++) + { + if (!IsButtonPressed(i)) + { + SetOverrideValue(i, ref overrideAxisValues, OverrideState.WasOverring); + fingerForceAxis[i] = fingerUntouchedAxis[i]; + } + } + SetAnimatorStateOff("NearTouchState"); + HandleOverrideOff(nearTouchOverrides.ignoreAllOverrides, GetOverridePermissions(nearTouchOverrides), false); + } + } + + protected virtual void DoControllerTouch(object sender, ObjectInteractEventArgs e) + { + SetAnimatorStateOn("TouchState", touchOverrides); + HandleOverrideOn(touchOverrides.ignoreAllOverrides, fingerAxis, GetOverridePermissions(touchOverrides), GetOverrideValues(touchOverrides)); + } + + protected virtual void DoControllerUntouch(object sender, ObjectInteractEventArgs e) + { + if (interactNearTouch == null || nearTouchOverrides.ignoreAllOverrides) + { + for (int i = 0; i < fingerUntouchedAxis.Length; i++) + { + if (!IsButtonPressed(i)) + { + SetOverrideValue(i, ref overrideAxisValues, OverrideState.WasOverring); + fingerForceAxis[i] = fingerUntouchedAxis[i]; + } + } + } + SetAnimatorStateOff("TouchState"); + HandleOverrideOff(touchOverrides.ignoreAllOverrides, GetOverridePermissions(touchOverrides), false); + } + + protected virtual void DoControllerGrab(object sender, ObjectInteractEventArgs e) + { + bool isUsing = (interactUse != null && interactUse.GetUsingObject() != null); + float[] overrideValues = (GetOverrideValues((isUsing ? useOverrides : grabOverrides))); + float[] overrideFingerAxis = (isUsing ? GetOverrideValues(grabOverrides) : fingerAxis); + SetAnimatorStateOn("GrabState", grabOverrides); + HandleOverrideOn(grabOverrides.ignoreAllOverrides, overrideFingerAxis, GetOverridePermissions(grabOverrides), overrideValues); + } + + protected virtual void DoControllerUngrab(object sender, ObjectInteractEventArgs e) + { + SetAnimatorStateOff("GrabState"); + HandleOverrideOff(grabOverrides.ignoreAllOverrides, GetOverridePermissions(touchOverrides), false); + } + + protected virtual void DoControllerUse(object sender, ObjectInteractEventArgs e) + { + bool isGrabbing = (interactGrab != null && interactGrab.GetGrabbedObject() != null); + float[] overrideFingerAxis = (isGrabbing ? GetOverrideValues(grabOverrides) : fingerAxis); + SetAnimatorStateOn("UseState", useOverrides); + HandleOverrideOn(useOverrides.ignoreAllOverrides, overrideFingerAxis, GetOverridePermissions(useOverrides), GetOverrideValues(useOverrides)); + } + + protected virtual void DoControllerUnuse(object sender, ObjectInteractEventArgs e) + { + SetAnimatorStateOff("UseState"); + HandleOverrideOff(useOverrides.ignoreAllOverrides, GetOverridePermissions(useOverrides), true); + } + #endregion Event methods + + protected virtual void DetectController() + { + controllerType = VRTK_DeviceFinder.GetCurrentControllerType(controllerReference); + if (controllerType != SDK_BaseController.ControllerType.Undefined) + { + if (setFingersForControllerType) + { + switch (controllerType) + { + case SDK_BaseController.ControllerType.SteamVR_ViveWand: + case SDK_BaseController.ControllerType.SteamVR_WindowsMRController: + case SDK_BaseController.ControllerType.WindowsMR_MotionController: + thumbState = VRTK_ControllerEvents.AxisType.Digital; + indexState = VRTK_ControllerEvents.AxisType.Axis; + middleState = VRTK_ControllerEvents.AxisType.Digital; + ringState = VRTK_ControllerEvents.AxisType.Digital; + pinkyState = VRTK_ControllerEvents.AxisType.Digital; + threeFingerState = VRTK_ControllerEvents.AxisType.Digital; + break; + case SDK_BaseController.ControllerType.Oculus_OculusTouch: + case SDK_BaseController.ControllerType.SteamVR_OculusTouch: + thumbState = VRTK_ControllerEvents.AxisType.Digital; + indexState = VRTK_ControllerEvents.AxisType.Axis; + middleState = VRTK_ControllerEvents.AxisType.Digital; + ringState = VRTK_ControllerEvents.AxisType.Digital; + pinkyState = VRTK_ControllerEvents.AxisType.Digital; + threeFingerState = VRTK_ControllerEvents.AxisType.Axis; + break; + case SDK_BaseController.ControllerType.SteamVR_ValveKnuckles: + thumbState = VRTK_ControllerEvents.AxisType.Digital; + indexState = VRTK_ControllerEvents.AxisType.SenseAxis; + middleState = VRTK_ControllerEvents.AxisType.SenseAxis; + ringState = VRTK_ControllerEvents.AxisType.SenseAxis; + pinkyState = VRTK_ControllerEvents.AxisType.SenseAxis; + threeFingerState = VRTK_ControllerEvents.AxisType.SenseAxis; + threeFingerAxisButton = SDK_BaseController.ButtonTypes.StartMenu; + break; + default: + thumbState = VRTK_ControllerEvents.AxisType.Digital; + indexState = VRTK_ControllerEvents.AxisType.Digital; + middleState = VRTK_ControllerEvents.AxisType.Digital; + ringState = VRTK_ControllerEvents.AxisType.Digital; + pinkyState = VRTK_ControllerEvents.AxisType.Digital; + threeFingerState = VRTK_ControllerEvents.AxisType.Digital; + break; + } + } + UnsubscribeEvents(); + SubscribeEvents(); + if (mirrorModel) + { + mirrorModel = false; + MirrorHand(); + } + } + } + + protected virtual void MirrorHand() + { + Transform modelTransform = (handModel != null ? handModel : transform.Find("Model")); + if (modelTransform != null) + { + modelTransform.localScale = new Vector3(modelTransform.localScale.x * -1f, modelTransform.localScale.y, modelTransform.localScale.z); + } + } + + protected virtual void SetOverrideValue(int stateIndex, ref OverrideState[] overrideState, OverrideState stateValue) + { + overrideState[stateIndex] = stateValue; + } + + protected virtual void ProcessFinger(VRTK_ControllerEvents.AxisType state, int arrayIndex) + { + axisTypes[arrayIndex] = state; + if (overrideAxisValues[arrayIndex] != OverrideState.NoOverride) + { + if (fingerAxis[arrayIndex] != fingerForceAxis[arrayIndex]) + { + LerpChangePosition(arrayIndex, fingerAxis[arrayIndex], fingerForceAxis[arrayIndex], animationSnapSpeed); + } + else if (overrideAxisValues[arrayIndex] == OverrideState.WasOverring) + { + SetOverrideValue(arrayIndex, ref overrideAxisValues, OverrideState.NoOverride); + } + } + else + { + if (state == VRTK_ControllerEvents.AxisType.Digital) + { + if (fingerChangeStates[arrayIndex]) + { + fingerChangeStates[arrayIndex] = false; + float startAxis = (fingerStates[arrayIndex] ? 0f : 1f); + float targetAxis = (fingerStates[arrayIndex] ? 1f : 0f); + LerpChangePosition(arrayIndex, startAxis, targetAxis, animationSnapSpeed); + } + } + else + { + SetFingerPosition(arrayIndex, fingerAxis[arrayIndex]); + } + } + + //Final sanity check, if you're not touching anything but the override is still set, then clear the override. + if (((interactTouch == null && interactNearTouch == null) || (interactNearTouch == null && interactTouch.GetTouchedObject() == null) || (interactNearTouch != null && interactNearTouch.GetNearTouchedObjects().Count == 0)) && overrideAxisValues[arrayIndex] != OverrideState.NoOverride) + { + SetOverrideValue(arrayIndex, ref overrideAxisValues, OverrideState.NoOverride); + } + } + + protected virtual void LerpChangePosition(int arrayIndex, float startPosition, float targetPosition, float speed) + { + fingerAnimationRoutine[arrayIndex] = StartCoroutine(ChangePosition(arrayIndex, startPosition, targetPosition, speed)); + + } + + protected virtual IEnumerator ChangePosition(int arrayIndex, float startAxis, float targetAxis, float time) + { + float elapsedTime = 0f; + while (elapsedTime < time) + { + elapsedTime += Time.deltaTime; + float currentAxis = Mathf.Lerp(startAxis, targetAxis, (elapsedTime / time)); + SetFingerPosition(arrayIndex, currentAxis); + yield return null; + } + SetFingerPosition(arrayIndex, targetAxis); + fingerAnimationRoutine[arrayIndex] = null; + } + + protected virtual void SetFingerPosition(int arrayIndex, float axis) + { + int animationLayer = arrayIndex + 1; + animator.SetLayerWeight(animationLayer, axis); + fingerAxis[arrayIndex] = axis; + if (overrideAxisValues[arrayIndex] == OverrideState.WasOverring) + { + SetOverrideValue(arrayIndex, ref overrideAxisValues, OverrideState.NoOverride); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs.meta new file mode 100644 index 0000000..9e69d3b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1c52b3a0d5f4fd744bbbd135b8d647b2 +timeCreated: 1499466949 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas.meta new file mode 100644 index 0000000..442e3ce --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b4d0c96821e10854c8d0fe4def1c1a28 +folderAsset: yes +timeCreated: 1507204172 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab new file mode 100644 index 0000000..87eec66 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab @@ -0,0 +1,1613 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &110822 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22467656} + - component: {fileID: 22250206} + - component: {fileID: 11477680} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &117788 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22497984} + - component: {fileID: 22262052} + - component: {fileID: 11481478} + - component: {fileID: 11416238} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &125134 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22435580} + - component: {fileID: 22234568} + - component: {fileID: 11482552} + - component: {fileID: 11423078} + m_Layer: 5 + m_Name: ConsoleOutput + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &127340 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22482256} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &133038 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22418410} + - component: {fileID: 22299618} + - component: {fileID: 11466318} + - component: {fileID: 11440894} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &134034 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22406496} + - component: {fileID: 11448950} + m_Layer: 5 + m_Name: CollapseLog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &135780 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22483240} + - component: {fileID: 22279840} + - component: {fileID: 11405140} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &136292 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22408340} + - component: {fileID: 22288050} + - component: {fileID: 11422604} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &137892 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22483880} + - component: {fileID: 11405038} + - component: {fileID: 22202394} + - component: {fileID: 11447792} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &146450 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22413218} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &158180 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22484078} + - component: {fileID: 22287472} + - component: {fileID: 11411936} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &160868 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22469982} + - component: {fileID: 22346910} + - component: {fileID: 11445554} + - component: {fileID: 11401606} + - component: {fileID: 11401380} + - component: {fileID: 114000013522143402} + m_Layer: 5 + m_Name: ConsoleViewerCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &161546 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22486372} + - component: {fileID: 11443104} + - component: {fileID: 22210970} + - component: {fileID: 11433936} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &162810 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22408864} + - component: {fileID: 22270820} + - component: {fileID: 11456702} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &163490 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22465218} + - component: {fileID: 22237068} + - component: {fileID: 11476460} + - component: {fileID: 11480112} + m_Layer: 5 + m_Name: ActionPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &165706 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22435444} + - component: {fileID: 22276946} + - component: {fileID: 11420764} + - component: {fileID: 11420022} + m_Layer: 5 + m_Name: ClearLogButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &173778 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22447912} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &182956 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22461140} + - component: {fileID: 22282352} + - component: {fileID: 11409704} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &186154 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22461928} + - component: {fileID: 22255336} + - component: {fileID: 11480824} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &187814 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22404458} + - component: {fileID: 22232646} + - component: {fileID: 11455126} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &11401380 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 941ae8e67d7565f48840449741c7bf2a, type: 3} + m_Name: + m_EditorClassIdentifier: + fontSize: 20 + infoMessage: {r: 0, g: 0, b: 0, a: 1} + assertMessage: {r: 0, g: 0, b: 0, a: 1} + warningMessage: {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + errorMessage: {r: 1, g: 0, b: 0, a: 1} + exceptionMessage: {r: 1, g: 0, b: 0, a: 1} +--- !u!114 &11401606 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &11405038 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 137892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 22482256} + m_Horizontal: 0 + m_Vertical: 0 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 22486372} + m_HorizontalScrollbar: {fileID: 11416238} + m_VerticalScrollbar: {fileID: 11440894} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11405140 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135780} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Collapse Log +--- !u!114 &11409704 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 182956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11411936 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 158180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11416238 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 117788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11456702} + m_HandleRect: {fileID: 22408864} + m_Direction: 0 + m_Value: 0 + m_Size: 0.93097913 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11420022 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.30987498, g: 0.21896625, b: 0.5955882, a: 1} + m_HighlightedColor: {r: 0.4892317, g: 0.33780277, b: 0.64705884, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11420764} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11401380} + m_MethodName: ClearLog + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11420764 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11422604 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Clear Log +--- !u!114 &11423078 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 125134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11433936 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11440894 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11411936} + m_HandleRect: {fileID: 22484078} + m_Direction: 2 + m_Value: 0.48192754 + m_Size: 0.82073426 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11443104 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &11445554 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &11447792 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 137892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11448950 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 134034} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11409704} + toggleTransition: 1 + graphic: {fileID: 11477680} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11401380} + m_MethodName: SetCollapse + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 0 +--- !u!114 &11455126 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.28792536, g: 0.07974695, b: 0.722, a: 0.891} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11456702 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 162810} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11466318 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11476460 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11477680 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11480112 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 7 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &11480824 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 186154} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11481478 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 117788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11482552 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 125134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!222 &22202394 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 137892} +--- !u!222 &22210970 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161546} +--- !u!222 &22232646 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187814} +--- !u!222 &22234568 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 125134} +--- !u!222 &22237068 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163490} +--- !u!222 &22250206 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110822} +--- !u!222 &22255336 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 186154} +--- !u!222 &22262052 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 117788} +--- !u!222 &22270820 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 162810} +--- !u!222 &22276946 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165706} +--- !u!222 &22279840 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135780} +--- !u!222 &22282352 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 182956} +--- !u!222 &22287472 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 158180} +--- !u!222 &22288050 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136292} +--- !u!222 &22299618 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133038} +--- !u!223 &22346910 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160868} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &22404458 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187814} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22469982} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22406496 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 134034} + 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: 22461140} + - {fileID: 22483240} + m_Father: {fileID: 22465218} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22408340 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22435444} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22408864 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 162810} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22447912} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22413218 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 146450} + 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: 22484078} + m_Father: {fileID: 22418410} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22418410 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133038} + 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: 22413218} + m_Father: {fileID: 22483880} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 30, y: -27} + m_Pivot: {x: 1, y: 1} +--- !u!224 &22435444 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165706} + 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: 22408340} + m_Father: {fileID: 22465218} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22435580 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 125134} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22482256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &22447912 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173778} + 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: 22408864} + m_Father: {fileID: 22497984} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22461140 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 182956} + 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: 22467656} + m_Father: {fileID: 22406496} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 40, y: -25} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22461928 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 186154} + 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: 22483880} + - {fileID: 22465218} + m_Father: {fileID: 22469982} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22465218 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163490} + 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: 22406496} + - {fileID: 22435444} + m_Father: {fileID: 22461928} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: -0.000030517578} + m_SizeDelta: {x: 0, y: 50} + m_Pivot: {x: 0.5, y: 0} +--- !u!224 &22467656 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110822} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22461140} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22469982 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160868} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.16} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 22404458} + - {fileID: 22461928} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 1.4} + m_SizeDelta: {x: 640, y: 480} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22482256 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 127340} + 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: 22435580} + m_Father: {fileID: 22486372} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 43} + m_SizeDelta: {x: 623, y: 463} + m_Pivot: {x: 0, y: 1} +--- !u!224 &22483240 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135780} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22406496} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 32.5, y: -4.5} + m_SizeDelta: {x: -75, y: -11} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22483880 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 137892} + 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: 22486372} + - {fileID: 22497984} + - {fileID: 22418410} + m_Father: {fileID: 22461928} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 25} + m_SizeDelta: {x: 0, y: -50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22484078 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 158180} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22413218} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22486372 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161546} + 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: 22482256} + m_Father: {fileID: 22483880} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -10, y: 5} + m_SizeDelta: {x: -60, y: -50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22497984 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 117788} + 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: 22447912} + m_Father: {fileID: 22483880} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -27, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 160868} + m_IsPrefabParent: 1 +--- !u!114 &114000013522143402 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1518a5e598c7da244bc4850d3ae63354, type: 3} + m_Name: + m_EditorClassIdentifier: + clickOnPointerCollision: 0 + autoActivateWithinDistance: 0 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab.meta new file mode 100644 index 0000000..fa087d8 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b9dbb125b47726449ffe47a4110f342 +timeCreated: 1469911234 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs new file mode 100644 index 0000000..5e07037 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs @@ -0,0 +1,119 @@ +// Console Viewer Canvas|Prefabs|0020 +namespace VRTK +{ + using UnityEngine; + using UnityEngine.UI; + using System.Collections.Generic; + using System.Text.RegularExpressions; + using System.Linq; + + /// + /// Adds an in-scene representation of the Unity console on a world space canvas. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas` prefab into the scene hierarchy. + /// + /// > It is also possible to interact with the `ConsoleViewerCanvas` with a `VRTK_UIPointer`. + /// + public class VRTK_ConsoleViewer : MonoBehaviour + { + [Tooltip("The size of the font the log text is displayed in.")] + public int fontSize = 14; + [Tooltip("The colour of the text for an info log message.")] + public Color infoMessage = Color.black; + [Tooltip("The colour of the text for an assertion log message.")] + public Color assertMessage = Color.black; + [Tooltip("The colour of the text for a warning log message.")] + public Color warningMessage = Color.yellow; + [Tooltip("The colour of the text for an error log message.")] + public Color errorMessage = Color.red; + [Tooltip("The colour of the text for an exception log message.")] + public Color exceptionMessage = Color.red; + + protected Dictionary logTypeColors; + protected ScrollRect scrollWindow; + protected RectTransform consoleRect; + protected Text consoleOutput; + protected const string NEWLINE = "\n"; + protected int lineBuffer = 50; + protected int currentBuffer; + protected string lastMessage; + protected bool collapseLog = false; + + /// + /// The SetCollapse method determines whether the console will collapse same message output into the same line. A state of `true` will collapse messages and `false` will print the same message for each line. + /// + /// The state of whether to collapse the output messages, true will collapse and false will not collapse. + public virtual void SetCollapse(bool state) + { + collapseLog = state; + } + + /// + /// The ClearLog method clears the current log view of all messages + /// + public virtual void ClearLog() + { + consoleOutput.text = ""; + currentBuffer = 0; + lastMessage = ""; + } + + protected virtual void Awake() + { + logTypeColors = new Dictionary() + { + { LogType.Assert, assertMessage }, + { LogType.Error, errorMessage }, + { LogType.Exception, exceptionMessage }, + { LogType.Log, infoMessage }, + { LogType.Warning, warningMessage } + }; + scrollWindow = transform.Find("Panel/Scroll View").GetComponent(); + consoleRect = transform.Find("Panel/Scroll View/Viewport/Content").GetComponent(); + consoleOutput = transform.Find("Panel/Scroll View/Viewport/Content/ConsoleOutput").GetComponent(); + + consoleOutput.fontSize = fontSize; + ClearLog(); + } + + protected virtual void OnEnable() + { + Application.logMessageReceived += HandleLog; + } + + protected virtual void OnDisable() + { + Application.logMessageReceived -= HandleLog; + consoleRect.sizeDelta = Vector2.zero; + } + + protected virtual string GetMessage(string message, LogType type) + { + string color = ColorUtility.ToHtmlStringRGBA(logTypeColors[type]); + return "" + message + "" + NEWLINE; + } + + protected virtual void HandleLog(string message, string stackTrace, LogType type) + { + string logOutput = GetMessage(message, type); + + if (!collapseLog || lastMessage != logOutput) + { + consoleOutput.text += logOutput; + lastMessage = logOutput; + } + + consoleRect.sizeDelta = new Vector2(consoleOutput.preferredWidth, consoleOutput.preferredHeight); + scrollWindow.verticalNormalizedPosition = 0; + currentBuffer++; + if (currentBuffer >= lineBuffer) + { + IEnumerable lines = Regex.Split(consoleOutput.text, NEWLINE).Skip(lineBuffer / 2); + consoleOutput.text = string.Join(NEWLINE, lines.ToArray()); + currentBuffer = lineBuffer / 2; + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs.meta new file mode 100644 index 0000000..ce3cd44 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 941ae8e67d7565f48840449741c7bf2a +timeCreated: 1492435081 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator.meta new file mode 100644 index 0000000..561582f --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e74e21ab30df7aa419c38ca3858ca6ba +folderAsset: yes +timeCreated: 1507204195 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab new file mode 100644 index 0000000..9ba0bb3 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011401907096} + m_IsPrefabParent: 1 +--- !u!1 &1000011401907096 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014230070706} + - component: {fileID: 135000011948786534} + - component: {fileID: 54000011260950592} + - component: {fileID: 114000011069860120} + m_Layer: 0 + m_Name: ControllerRigidbodyActivator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000014230070706 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011401907096} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &54000011260950592 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011401907096} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 2 +--- !u!114 &114000011069860120 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011401907096} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a45ca363358b3cd40872c8608ca3743b, type: 3} + m_Name: + m_EditorClassIdentifier: + isEnabled: 1 +--- !u!135 &135000011948786534 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011401907096} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.1 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab.meta new file mode 100644 index 0000000..f442e46 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33a096ef14a38e543af97bd67de0db31 +timeCreated: 1476601232 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs new file mode 100644 index 0000000..a576f60 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs @@ -0,0 +1,116 @@ +// Controller Rigidbody Activator|Prefabs|0050 +namespace VRTK +{ + using UnityEngine; + + /// + /// Event Payload + /// + /// The object that touching the activator. + public struct ControllerRigidbodyActivatorEventArgs + { + public VRTK_InteractTouch touchingObject; + } + + /// + /// Event Payload + /// + /// this object + /// + public delegate void ControllerRigidbodyActivatorEventHandler(object sender, ControllerRigidbodyActivatorEventArgs e); + + /// + /// Provides a simple trigger collider volume that when a controller enters will enable the rigidbody on the controller. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator` prefab in the scene at the location where the controller rigidbody should be automatically activated. + /// * The prefab contains a default sphere collider to determine ths collision, this collider component can be customised in the inspector or can be replaced with another collider component (set to `Is Trigger`). + /// + /// > If the prefab is placed as a child of the target Interactable Object then the collider volume on the prefab will trigger collisions on the Interactable Object. + /// + public class VRTK_ControllerRigidbodyActivator : MonoBehaviour + { + [Tooltip("If this is checked then the Collider will have it's Rigidbody toggled on and off during a collision.")] + public bool isEnabled = true; + [Tooltip("If this is checked then the Rigidbody Activator will activate the rigidbody and colliders on the Interact Touch script.")] + public bool activateInteractTouch = true; + [Tooltip("If this is checked then the Rigidbody Activator will activate the rigidbody and colliders on the Controller Tracked Collider script.")] + public bool activateTrackedCollider = false; + + /// + /// Emitted when the controller rigidbody is turned on. + /// + public event ControllerRigidbodyActivatorEventHandler ControllerRigidbodyOn; + /// + /// Emitted when the controller rigidbody is turned off. + /// + public event ControllerRigidbodyActivatorEventHandler ControllerRigidbodyOff; + + public virtual void OnControllerRigidbodyOn(ControllerRigidbodyActivatorEventArgs e) + { + if (ControllerRigidbodyOn != null) + { + ControllerRigidbodyOn(this, e); + } + } + + public virtual void OnControllerRigidbodyOff(ControllerRigidbodyActivatorEventArgs e) + { + if (ControllerRigidbodyOff != null) + { + ControllerRigidbodyOff(this, e); + } + } + + protected virtual void OnTriggerEnter(Collider collider) + { + ToggleRigidbody(collider, true); + } + + protected virtual void OnTriggerExit(Collider collider) + { + ToggleRigidbody(collider, false); + } + + protected virtual void ToggleRigidbody(Collider collider, bool state) + { + if (isEnabled || !state) + { + if (activateTrackedCollider) + { + VRTK_ControllerTrackedCollider trackedCollider = collider.GetComponentInParent(); + if (trackedCollider != null) + { + trackedCollider.ToggleColliders(state); + EmitEvent(state, trackedCollider.interactTouch); + } + } + + if (activateInteractTouch) + { + VRTK_InteractTouch touch = collider.GetComponentInParent(); + if (touch != null) + { + touch.ToggleControllerRigidBody(state, state); + EmitEvent(state, touch); + } + } + } + } + + protected virtual void EmitEvent(bool state, VRTK_InteractTouch touch) + { + ControllerRigidbodyActivatorEventArgs e; + e.touchingObject = touch; + if (state) + { + OnControllerRigidbodyOn(e); + } + else + { + OnControllerRigidbodyOff(e); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs.meta new file mode 100644 index 0000000..098e83b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a45ca363358b3cd40872c8608ca3743b +timeCreated: 1492435207 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips.meta new file mode 100644 index 0000000..5fb7324 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 84afe28aef27c0b4382a3532c6c7ad62 +folderAsset: yes +timeCreated: 1507204213 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab new file mode 100644 index 0000000..c0289c5 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab @@ -0,0 +1,3771 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100434 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22454212} + - component: {fileID: 22209622} + - component: {fileID: 11456052} + - component: {fileID: 11495896} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &104668 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22421806} + - component: {fileID: 22396976} + - component: {fileID: 11461778} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &112742 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 418306} + m_Layer: 2 + m_Name: LineStart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &114800 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 472402} + - component: {fileID: 11455702} + m_Layer: 2 + m_Name: TriggerTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &116776 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 427840} + - component: {fileID: 11489614} + m_Layer: 2 + m_Name: TouchpadTwoTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &120774 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22498756} + - component: {fileID: 22377644} + - component: {fileID: 11465552} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &122654 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 435554} + m_Layer: 2 + m_Name: LineStart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &132124 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 400338} + - component: {fileID: 12063410} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &133382 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22482542} + - component: {fileID: 22271638} + - component: {fileID: 11442146} + - component: {fileID: 11413686} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &140250 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22429454} + - component: {fileID: 22238450} + - component: {fileID: 11438416} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &141968 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22465506} + - component: {fileID: 22277846} + - component: {fileID: 11402464} + - component: {fileID: 11452124} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &150862 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 412680} + - component: {fileID: 12081906} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &151380 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 479208} + - component: {fileID: 11415184} + m_Layer: 2 + m_Name: ControllerTooltips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &153986 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22488092} + - component: {fileID: 22275730} + - component: {fileID: 11445312} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &154316 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22442990} + - component: {fileID: 22227682} + - component: {fileID: 11475002} + - component: {fileID: 11429140} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &156688 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 457702} + - component: {fileID: 12072516} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &159302 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 453788} + m_Layer: 2 + m_Name: LineStart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &163462 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22445350} + - component: {fileID: 22289070} + - component: {fileID: 11431276} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &165326 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22476268} + - component: {fileID: 22235748} + - component: {fileID: 11420452} + - component: {fileID: 11406310} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &167588 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 484582} + - component: {fileID: 11454652} + m_Layer: 2 + m_Name: GripTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &178472 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 414302} + - component: {fileID: 11402720} + m_Layer: 2 + m_Name: StartMenuTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &181886 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22432698} + - component: {fileID: 22244356} + - component: {fileID: 11499216} + - component: {fileID: 11404920} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &183314 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22422736} + - component: {fileID: 22277520} + - component: {fileID: 11440366} + - component: {fileID: 11469246} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &184776 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22420896} + - component: {fileID: 22200322} + - component: {fileID: 11420096} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &185092 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22481940} + - component: {fileID: 22297708} + - component: {fileID: 11417476} + - component: {fileID: 11474050} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &189652 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22489358} + - component: {fileID: 22390342} + - component: {fileID: 11452196} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &192578 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 422802} + - component: {fileID: 12079670} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &195056 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22493222} + - component: {fileID: 22362080} + - component: {fileID: 11493186} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &199942 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 434770} + m_Layer: 2 + m_Name: LineStart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &400338 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 132124} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 484582} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &412680 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 150862} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 414302} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &414302 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178472} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: 0.1233, y: 0.0156, z: -0.1569} + m_LocalScale: {x: 1, y: 0.9999993, z: 0.9999993} + m_Children: + - {fileID: 412680} + - {fileID: 434770} + - {fileID: 22498756} + m_Father: {fileID: 479208} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 89.980194, y: 0, z: 0} +--- !u!4 &418306 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 112742} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0368, y: 0, z: -0.0724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 427840} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &422802 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 192578} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 427840} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &427840 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 116776} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: 0.1135, y: 0.0131, z: -0.0902} + m_LocalScale: {x: 1, y: 0.99999976, z: 0.99999976} + m_Children: + - {fileID: 422802} + - {fileID: 418306} + - {fileID: 22489358} + m_Father: {fileID: 479208} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 89.980194, y: 0, z: 0} +--- !u!4 &434770 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 199942} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 414302} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &435554 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122654} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 484582} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &453788 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 159302} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 472402} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &457702 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 156688} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 472402} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &472402 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 114800} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} + m_LocalPosition: {x: -0.1, y: -0.017, z: -0.0608} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 457702} + - {fileID: 453788} + - {fileID: 22493222} + m_Father: {fileID: 479208} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 89.980194, y: 0, z: 0} +--- !u!4 &479208 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 151380} + 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: 472402} + - {fileID: 484582} + - {fileID: 4902960099699280} + - {fileID: 427840} + - {fileID: 4000012396937550} + - {fileID: 4000014175454880} + - {fileID: 414302} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &484582 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 167588} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} + m_LocalPosition: {x: -0.113, y: 0, z: -0.1623} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 400338} + - {fileID: 435554} + - {fileID: 22421806} + m_Father: {fileID: 479208} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &11402464 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11402720 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178472} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 434770} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 1, g: 1, b: 1, a: 1} + containerColor: {r: 0, g: 0, b: 0, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!114 &11404920 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 181886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11406310 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165326} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11413686 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11415184 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 151380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 24a9c9ae8b1fb1542b78598ac955afe0, type: 3} + m_Name: + m_EditorClassIdentifier: + triggerText: Trigger + gripText: Grip + touchpadText: Touchpad + touchpadTwoText: TouchpadTwo + buttonOneText: ButtonOne + buttonTwoText: ButtonTwo + startMenuText: StartMenu + tipBackgroundColor: {r: 0, g: 0, b: 0, a: 1} + tipTextColor: {r: 1, g: 1, b: 1, a: 1} + tipLineColor: {r: 0, g: 0, b: 0, a: 1} + trigger: {fileID: 0} + grip: {fileID: 0} + touchpad: {fileID: 0} + touchpadTwo: {fileID: 0} + buttonOne: {fileID: 0} + buttonTwo: {fileID: 0} + startMenu: {fileID: 0} + controllerEvents: {fileID: 0} + headsetControllerAware: {fileID: 0} + hideWhenNotInView: 1 + retryInitMaxTries: 10 + retryInitCounter: 0.1 +--- !u!114 &11417476 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11420096 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 184776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11420452 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165326} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11429140 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11431276 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163462} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11438416 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 140250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11440366 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11442146 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11445312 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 153986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11452124 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11452196 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 189652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &11454652 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 167588} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 435554} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 1, g: 1, b: 1, a: 1} + containerColor: {r: 0, g: 0, b: 0, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!114 &11455702 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 114800} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 453788} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 1, g: 1, b: 1, a: 1} + containerColor: {r: 0, g: 0, b: 0, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!114 &11456052 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11461778 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 104668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &11465552 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &11469246 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11474050 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11475002 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11489614 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 116776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 418306} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 1, g: 1, b: 1, a: 1} + containerColor: {r: 0, g: 0, b: 0, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!114 &11493186 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 195056} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &11495896 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11499216 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 181886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!120 &12063410 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 132124} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!120 &12072516 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 156688} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!120 &12079670 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 192578} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!120 &12081906 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 150862} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!222 &22200322 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 184776} +--- !u!222 &22209622 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100434} +--- !u!222 &22227682 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154316} +--- !u!222 &22235748 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165326} +--- !u!222 &22238450 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 140250} +--- !u!222 &22244356 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 181886} +--- !u!222 &22271638 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133382} +--- !u!222 &22275730 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 153986} +--- !u!222 &22277520 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183314} +--- !u!222 &22277846 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141968} +--- !u!222 &22289070 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163462} +--- !u!222 &22297708 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185092} +--- !u!223 &22362080 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 195056} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!223 &22377644 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120774} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!223 &22390342 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 189652} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!223 &22396976 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 104668} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &22420896 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 184776} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22493222} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22421806 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 104668} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 22445350} + - {fileID: 22465506} + - {fileID: 22476268} + m_Father: {fileID: 484582} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22422736 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183314} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22493222} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22429454 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 140250} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22489358} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22432698 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 181886} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22489358} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22442990 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154316} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22498756} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22445350 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163462} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22421806} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22454212 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100434} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22498756} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22465506 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141968} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22421806} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22476268 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165326} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22421806} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22481940 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185092} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22489358} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22482542 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133382} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22493222} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22488092 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 153986} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22498756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22489358 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 189652} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.07239999} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 22429454} + - {fileID: 22432698} + - {fileID: 22481940} + m_Father: {fileID: 427840} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0.086799994, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22493222 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 195056} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 22420896} + - {fileID: 22482542} + - {fileID: 22422736} + m_Father: {fileID: 472402} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22498756 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120774} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 22488092} + - {fileID: 22442990} + - {fileID: 22454212} + m_Father: {fileID: 414302} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 151380} + m_IsPrefabParent: 1 +--- !u!1 &1000011074126690 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013056628304} + - component: {fileID: 120000011353740912} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011116365254 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012273502934} + - component: {fileID: 223000010039630650} + - component: {fileID: 114000012363958314} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011366120058 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013893780094} + - component: {fileID: 222000011982481808} + - component: {fileID: 114000014093169502} + - component: {fileID: 114000013268699548} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011486596710 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011546663224} + m_Layer: 2 + m_Name: LineStart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011740718424 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013895493572} + - component: {fileID: 222000013241926666} + - component: {fileID: 114000013101879482} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011905105796 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014175454880} + - component: {fileID: 114000014163857056} + m_Layer: 2 + m_Name: ButtonTwoTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012379195038 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014165330106} + m_Layer: 2 + m_Name: LineStart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012694676508 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011018885128} + - component: {fileID: 222000012114728242} + - component: {fileID: 114000012294710408} + - component: {fileID: 114000013797038712} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012862124634 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012396937550} + - component: {fileID: 114000012444902488} + m_Layer: 2 + m_Name: ButtonOneTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012990394168 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012279963300} + - component: {fileID: 223000011099627710} + - component: {fileID: 114000010349668930} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013000720922 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011877382514} + - component: {fileID: 222000010612447358} + - component: {fileID: 114000011890862886} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013362805168 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012153209662} + - component: {fileID: 222000013341157098} + - component: {fileID: 114000011299360962} + - component: {fileID: 114000011045427428} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013380415750 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013287511056} + - component: {fileID: 120000011431987130} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014186441226 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000014259110642} + - component: {fileID: 222000013305234862} + - component: {fileID: 114000011734848668} + - component: {fileID: 114000014261854206} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1259399061544798 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4902960099699280} + - component: {fileID: 114528242261555550} + m_Layer: 2 + m_Name: TouchpadTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1326845345082126 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4563321935340700} + - component: {fileID: 120457147633150144} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1353539257112848 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224160605373872468} + - component: {fileID: 222611202280502122} + - component: {fileID: 114412391767620626} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1363913582340546 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224533806161329942} + - component: {fileID: 222474055676653688} + - component: {fileID: 114487195447779416} + - component: {fileID: 114053127084620310} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1475251183619018 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224792751024443172} + - component: {fileID: 222346843890933432} + - component: {fileID: 114441674729286082} + - component: {fileID: 114038178377879986} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1491114576681964 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224140764237986962} + - component: {fileID: 223129402451760480} + - component: {fileID: 114441285129634996} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1953665284369864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4563392985214122} + m_Layer: 2 + m_Name: LineStart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000011546663224 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011486596710} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012396937550} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012396937550 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862124634} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} + m_LocalPosition: {x: 0.1274, y: 0.0156, z: -0.007} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013287511056} + - {fileID: 4000011546663224} + - {fileID: 224000012279963300} + m_Father: {fileID: 479208} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 89.980194, y: 0, z: 0} +--- !u!4 &4000013056628304 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011074126690} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000014175454880} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013287511056 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013380415750} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012396937550} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014165330106 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012379195038} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000014175454880} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014175454880 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011905105796} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: 0.1274, y: 0.0156, z: 0.0434} + m_LocalScale: {x: 1, y: 0.99999964, z: 0.99999964} + m_Children: + - {fileID: 4000013056628304} + - {fileID: 4000014165330106} + - {fileID: 224000012273502934} + m_Father: {fileID: 479208} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 89.980194, y: 0, z: 0} +--- !u!4 &4563321935340700 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1326845345082126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4902960099699280} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4563392985214122 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1953665284369864} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4902960099699280} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4902960099699280 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1259399061544798} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} + m_LocalPosition: {x: 0.1135, y: 0.0131, z: -0.0902} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4563321935340700} + - {fileID: 4563392985214122} + - {fileID: 224140764237986962} + m_Father: {fileID: 479208} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 89.980194, y: 0, z: 0} +--- !u!114 &114000010349668930 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012990394168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &114000011045427428 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013362805168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &114000011299360962 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013362805168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &114000011734848668 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014186441226} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &114000011890862886 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013000720922} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000012294710408 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012694676508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &114000012363958314 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011116365254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &114000012444902488 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862124634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 4000011546663224} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 1, g: 1, b: 1, a: 1} + containerColor: {r: 0, g: 0, b: 0, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!114 &114000013101879482 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011740718424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000013268699548 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011366120058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &114000013797038712 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012694676508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &114000014093169502 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011366120058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &114000014163857056 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011905105796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 4000014165330106} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 1, g: 1, b: 1, a: 1} + containerColor: {r: 0, g: 0, b: 0, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!114 &114000014261854206 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014186441226} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &114038178377879986 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1475251183619018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &114053127084620310 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1363913582340546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &114412391767620626 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353539257112848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114441285129634996 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491114576681964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &114441674729286082 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1475251183619018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &114487195447779416 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1363913582340546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &114528242261555550 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1259399061544798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 4563392985214122} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 1, g: 1, b: 1, a: 1} + containerColor: {r: 0, g: 0, b: 0, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!120 &120000011353740912 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011074126690} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!120 &120000011431987130 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013380415750} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!120 &120457147633150144 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1326845345082126} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!222 &222000010612447358 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013000720922} +--- !u!222 &222000011982481808 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011366120058} +--- !u!222 &222000012114728242 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012694676508} +--- !u!222 &222000013241926666 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011740718424} +--- !u!222 &222000013305234862 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014186441226} +--- !u!222 &222000013341157098 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013362805168} +--- !u!222 &222346843890933432 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1475251183619018} +--- !u!222 &222474055676653688 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1363913582340546} +--- !u!222 &222611202280502122 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353539257112848} +--- !u!223 &223000010039630650 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011116365254} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!223 &223000011099627710 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012990394168} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!223 &223129402451760480 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491114576681964} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224000011018885128 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012694676508} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012279963300} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011877382514 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013000720922} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012279963300} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012153209662 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013362805168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012273502934} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012273502934 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011116365254} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 224000013895493572} + - {fileID: 224000012153209662} + - {fileID: 224000013893780094} + m_Father: {fileID: 4000014175454880} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012279963300 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012990394168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 224000011877382514} + - {fileID: 224000011018885128} + - {fileID: 224000014259110642} + m_Father: {fileID: 4000012396937550} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013893780094 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011366120058} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012273502934} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013895493572 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011740718424} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012273502934} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000014259110642 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014186441226} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012279963300} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224140764237986962 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491114576681964} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 224160605373872468} + - {fileID: 224792751024443172} + - {fileID: 224533806161329942} + m_Father: {fileID: 4902960099699280} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224160605373872468 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353539257112848} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224140764237986962} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224533806161329942 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1363913582340546} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224140764237986962} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224792751024443172 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1475251183619018} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224140764237986962} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab.meta new file mode 100644 index 0000000..0b3772e --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 910be6460ba00dc4bb13725c3ff972cb +timeCreated: 1467033205 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs new file mode 100644 index 0000000..f4c5472 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs @@ -0,0 +1,464 @@ +// Controller Tooltips|Prefabs|0070 +namespace VRTK +{ + using UnityEngine; + + /// + /// Event Payload + /// + /// The tooltip element being affected. + public struct ControllerTooltipsEventArgs + { + public VRTK_ControllerTooltips.TooltipButtons element; + } + + /// + /// Event Payload + /// + /// this object + /// + public delegate void ControllerTooltipsEventHandler(object sender, ControllerTooltipsEventArgs e); + + /// + /// Adds a collection of Object Tooltips to the Controller providing information to what the controller buttons may do. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/ControllerTooltips/ControllerTooltips` prefab as a child of the relevant controller script alias GameObject in the scene hierarchy. + /// * If no `Button Transform Settings` are provided in the inspector at Edit time then the button transforms will attempt to be set to the transforms of the current SDK default controller model. + /// * If one of the `Button Text Settings` text options are not provided, then the tooltip for that specific button will be hidden. + /// + /// > There are a number of parameters that can be set on the Prefab which are provided by the `VRTK_ControllerTooltips` script which is applied to the prefab. + /// + /// + /// `VRTK/Examples/029_Controller_Tooltips` displays two cubes that have an object tooltip added to them along with tooltips that have been added to the controllers. + /// + public class VRTK_ControllerTooltips : MonoBehaviour + { + public enum TooltipButtons + { + None, + TriggerTooltip, + GripTooltip, + TouchpadTooltip, + TouchpadTwoTooltip, + ButtonOneTooltip, + ButtonTwoTooltip, + StartMenuTooltip + } + + [Header("Button Text Settings")] + + [Tooltip("The text to display for the trigger button action.")] + public string triggerText; + [Tooltip("The text to display for the grip button action.")] + public string gripText; + [Tooltip("The text to display for the touchpad action.")] + public string touchpadText; + [Tooltip("The text to display for the touchpad two action.")] + public string touchpadTwoText; + [Tooltip("The text to display for button one action.")] + public string buttonOneText; + [Tooltip("The text to display for button two action.")] + public string buttonTwoText; + [Tooltip("The text to display for the start menu action.")] + public string startMenuText; + + [Header("Tooltip Colour Settings")] + + [Tooltip("The colour to use for the tooltip background container.")] + public Color tipBackgroundColor = Color.black; + [Tooltip("The colour to use for the text within the tooltip.")] + public Color tipTextColor = Color.white; + [Tooltip("The colour to use for the line between the tooltip and the relevant controller button.")] + public Color tipLineColor = Color.black; + + [Header("Button Transform Settings")] + + [Tooltip("The transform for the position of the trigger button on the controller.")] + public Transform trigger; + [Tooltip("The transform for the position of the grip button on the controller.")] + public Transform grip; + [Tooltip("The transform for the position of the touchpad button on the controller.")] + public Transform touchpad; + [Tooltip("The transform for the position of the touchpad two button on the controller.")] + public Transform touchpadTwo; + [Tooltip("The transform for the position of button one on the controller.")] + public Transform buttonOne; + [Tooltip("The transform for the position of button two on the controller.")] + public Transform buttonTwo; + [Tooltip("The transform for the position of the start menu on the controller.")] + public Transform startMenu; + + [Header("Custom Settings")] + + [Tooltip("The controller to read the controller events from. If this is blank then it will attempt to get a controller events script from the same or parent GameObject.")] + public VRTK_ControllerEvents controllerEvents; + [Tooltip("The headset controller aware script to use to see if the headset is looking at the controller. If this is blank then it will attempt to get a controller events script from the same or parent GameObject.")] + public VRTK_HeadsetControllerAware headsetControllerAware; + [Tooltip("If this is checked then the tooltips will be hidden when the headset is not looking at the controller.")] + public bool hideWhenNotInView = true; + + [Header("Obsolete Settings")] + + [System.Obsolete("`VRTK_ControllerTooltips.retryInitMaxTries` has been deprecated as tooltip initialisation now uses the `VRTK_TrackedController.ControllerModelAvailable` event.")] + [ObsoleteInspector] + public int retryInitMaxTries = 10; + [System.Obsolete("`VRTK_ControllerTooltips.retryInitCounter` has been deprecated as tooltip initialisation now uses the `VRTK_TrackedController.ControllerModelAvailable` event.")] + [ObsoleteInspector] + public float retryInitCounter = 0.1f; + + /// + /// Emitted when the controller tooltip is turned on. + /// + public event ControllerTooltipsEventHandler ControllerTooltipOn; + /// + /// Emitted when the controller tooltip is turned off. + /// + public event ControllerTooltipsEventHandler ControllerTooltipOff; + + protected TooltipButtons[] availableButtons = new TooltipButtons[0]; + protected VRTK_ObjectTooltip[] buttonTooltips = new VRTK_ObjectTooltip[0]; + protected bool[] tooltipStates = new bool[0]; + protected bool overallState = true; + protected VRTK_TrackedController trackedController; + + public virtual void OnControllerTooltipOn(ControllerTooltipsEventArgs e) + { + if (ControllerTooltipOn != null) + { + ControllerTooltipOn(this, e); + } + } + + public virtual void OnControllerTooltipOff(ControllerTooltipsEventArgs e) + { + if (ControllerTooltipOff != null) + { + ControllerTooltipOff(this, e); + } + } + + /// + /// The Reset method reinitalises the tooltips on all of the controller elements. + /// + public virtual void ResetTooltip() + { + InitialiseTips(); + } + + /// + /// The UpdateText method allows the tooltip text on a specific controller element to be updated at runtime. + /// + /// The specific controller element to change the tooltip text on. + /// A string containing the text to update the tooltip to display. + public virtual void UpdateText(TooltipButtons element, string newText) + { + switch (element) + { + case TooltipButtons.ButtonOneTooltip: + buttonOneText = newText; + break; + case TooltipButtons.ButtonTwoTooltip: + buttonTwoText = newText; + break; + case TooltipButtons.StartMenuTooltip: + startMenuText = newText; + break; + case TooltipButtons.GripTooltip: + gripText = newText; + break; + case TooltipButtons.TouchpadTooltip: + touchpadText = newText; + break; + case TooltipButtons.TouchpadTwoTooltip: + touchpadTwoText = newText; + break; + case TooltipButtons.TriggerTooltip: + triggerText = newText; + break; + } + ResetTooltip(); + } + + /// + /// The ToggleTips method will display the controller tooltips if the state is `true` and will hide the controller tooltips if the state is `false`. An optional `element` can be passed to target a specific controller tooltip to toggle otherwise all tooltips are toggled. + /// + /// The state of whether to display or hide the controller tooltips, true will display and false will hide. + /// The specific element to hide the tooltip on, if it is `TooltipButtons.None` then it will hide all tooltips. Optional parameter defaults to `TooltipButtons.None` + public virtual void ToggleTips(bool state, TooltipButtons element = TooltipButtons.None) + { + if (element == TooltipButtons.None) + { + overallState = state; + for (int i = 1; i < buttonTooltips.Length; i++) + { + if (buttonTooltips[i].displayText.Length > 0) + { + buttonTooltips[i].gameObject.SetActive(state); + } + } + } + else + { + if (buttonTooltips[(int)element].displayText.Length > 0) + { + buttonTooltips[(int)element].gameObject.SetActive(state); + } + } + EmitEvent(state, element); + } + + protected virtual void Awake() + { + VRTK_SDKManager.AttemptAddBehaviourToToggleOnLoadedSetupChange(this); + InitButtonsArray(); + } + + protected virtual void OnEnable() + { + controllerEvents = (controllerEvents != null ? controllerEvents : GetComponentInParent()); + InitButtonsArray(); + InitListeners(); + ResetTooltip(); + } + + protected virtual void OnDisable() + { + if (controllerEvents != null) + { + controllerEvents.ControllerEnabled -= DoControllerEnabled; + controllerEvents.ControllerVisible -= DoControllerVisible; + controllerEvents.ControllerHidden -= DoControllerInvisible; + controllerEvents.ControllerModelAvailable -= DoControllerModelAvailable; + } + else if (trackedController != null) + { + trackedController.ControllerModelAvailable -= TrackedControllerDoControllerModelAvailable; + } + + if (headsetControllerAware != null) + { + headsetControllerAware.ControllerGlanceEnter -= DoGlanceEnterController; + headsetControllerAware.ControllerGlanceExit -= DoGlanceExitController; + } + } + + protected virtual void OnDestroy() + { + VRTK_SDKManager.AttemptRemoveBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void EmitEvent(bool state, TooltipButtons element) + { + ControllerTooltipsEventArgs e; + e.element = element; + if (state) + { + OnControllerTooltipOn(e); + } + else + { + OnControllerTooltipOff(e); + } + } + + protected virtual void InitButtonsArray() + { + availableButtons = new TooltipButtons[] + { + TooltipButtons.None, + TooltipButtons.TriggerTooltip, + TooltipButtons.GripTooltip, + TooltipButtons.TouchpadTooltip, + TooltipButtons.TouchpadTwoTooltip, + TooltipButtons.ButtonOneTooltip, + TooltipButtons.ButtonTwoTooltip, + TooltipButtons.StartMenuTooltip + }; + + buttonTooltips = new VRTK_ObjectTooltip[availableButtons.Length]; + tooltipStates = new bool[availableButtons.Length]; + + for (int i = 1; i < availableButtons.Length; i++) + { + buttonTooltips[i] = transform.Find(availableButtons[i].ToString()).GetComponent(); + } + } + + protected virtual void InitListeners() + { + if (controllerEvents != null) + { + controllerEvents.ControllerEnabled += DoControllerEnabled; + controllerEvents.ControllerVisible += DoControllerVisible; + controllerEvents.ControllerHidden += DoControllerInvisible; + controllerEvents.ControllerModelAvailable += DoControllerModelAvailable; + } + else + { + trackedController = GetComponentInParent(); + if (trackedController != null) + { + trackedController.ControllerModelAvailable += TrackedControllerDoControllerModelAvailable; + } + } + + headsetControllerAware = (headsetControllerAware != null ? headsetControllerAware : FindObjectOfType()); + if (headsetControllerAware != null) + { + headsetControllerAware.ControllerGlanceEnter += DoGlanceEnterController; + headsetControllerAware.ControllerGlanceExit += DoGlanceExitController; + ToggleTips(false); + } + } + + protected virtual void DoControllerEnabled(object sender, ControllerInteractionEventArgs e) + { + if (controllerEvents != null) + { + GameObject actualController = VRTK_DeviceFinder.GetActualController(controllerEvents.gameObject); + if (actualController != null && actualController.activeInHierarchy) + { + ResetTooltip(); + } + } + } + + protected virtual void DoControllerVisible(object sender, ControllerInteractionEventArgs e) + { + for (int i = 0; i < availableButtons.Length; i++) + { + ToggleTips(tooltipStates[i], availableButtons[i]); + } + } + + protected virtual void DoControllerInvisible(object sender, ControllerInteractionEventArgs e) + { + for (int i = 1; i < buttonTooltips.Length; i++) + { + tooltipStates[i] = buttonTooltips[i].gameObject.activeSelf; + } + ToggleTips(false); + } + + protected virtual void DoControllerModelAvailable(object sender, ControllerInteractionEventArgs e) + { + ResetTooltip(); + } + + + protected virtual void TrackedControllerDoControllerModelAvailable(object sender, VRTKTrackedControllerEventArgs e) + { + ResetTooltip(); + } + + protected virtual void DoGlanceEnterController(object sender, HeadsetControllerAwareEventArgs e) + { + if (controllerEvents != null && hideWhenNotInView) + { + VRTK_ControllerReference checkControllerReference = VRTK_ControllerReference.GetControllerReference(controllerEvents.gameObject); + if (checkControllerReference == e.controllerReference) + { + ToggleTips(true); + } + } + } + + protected virtual void DoGlanceExitController(object sender, HeadsetControllerAwareEventArgs e) + { + if (controllerEvents != null && hideWhenNotInView) + { + VRTK_ControllerReference checkControllerReference = VRTK_ControllerReference.GetControllerReference(controllerEvents.gameObject); + if (checkControllerReference == e.controllerReference) + { + ToggleTips(false); + } + } + } + + protected virtual void InitialiseTips() + { + VRTK_ObjectTooltip[] tooltips = GetComponentsInChildren(true); + for (int i = 0; i < tooltips.Length; i++) + { + VRTK_ObjectTooltip tooltip = tooltips[i]; + string tipText = ""; + Transform tipTransform = null; + + switch (tooltip.name.Replace("Tooltip", "").ToLower()) + { + case "trigger": + tipText = triggerText; + tipTransform = GetTransform(trigger, SDK_BaseController.ControllerElements.Trigger); + break; + case "grip": + tipText = gripText; + tipTransform = GetTransform(grip, SDK_BaseController.ControllerElements.GripLeft); + break; + case "touchpad": + tipText = touchpadText; + tipTransform = GetTransform(touchpad, SDK_BaseController.ControllerElements.Touchpad); + break; + case "touchpadtwo": + tipText = touchpadTwoText; + tipTransform = GetTransform(touchpadTwo, SDK_BaseController.ControllerElements.TouchpadTwo); + break; + case "buttonone": + tipText = buttonOneText; + tipTransform = GetTransform(buttonOne, SDK_BaseController.ControllerElements.ButtonOne); + break; + case "buttontwo": + tipText = buttonTwoText; + tipTransform = GetTransform(buttonTwo, SDK_BaseController.ControllerElements.ButtonTwo); + break; + case "startmenu": + tipText = startMenuText; + tipTransform = GetTransform(startMenu, SDK_BaseController.ControllerElements.StartMenu); + break; + } + + tooltip.displayText = tipText; + tooltip.drawLineTo = tipTransform; + + tooltip.containerColor = tipBackgroundColor; + tooltip.fontColor = tipTextColor; + tooltip.lineColor = tipLineColor; + + tooltip.ResetTooltip(); + + if (tipTransform == null || tipText.Trim().Length == 0) + { + tooltip.gameObject.SetActive(false); + } + } + + if (headsetControllerAware == null || !hideWhenNotInView) + { + ToggleTips(overallState); + } + } + + protected virtual Transform GetTransform(Transform setTransform, SDK_BaseController.ControllerElements findElement) + { + Transform returnTransform = null; + if (setTransform != null) + { + returnTransform = setTransform; + } + else if (controllerEvents != null) + { + GameObject modelController = VRTK_DeviceFinder.GetModelAliasController(controllerEvents.gameObject); + + if (modelController != null && modelController.activeInHierarchy) + { + SDK_BaseController.ControllerHand controllerHand = VRTK_DeviceFinder.GetControllerHand(controllerEvents.gameObject); + string elementPath = VRTK_SDK_Bridge.GetControllerElementPath(findElement, controllerHand, true); + returnTransform = (elementPath != null ? modelController.transform.Find(elementPath) : null); + } + } + + return returnTransform; + } + } +} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs.meta new file mode 100644 index 0000000..0c8555b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 24a9c9ae8b1fb1542b78598ac955afe0 +timeCreated: 1492435224 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera.meta b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera.meta new file mode 100644 index 0000000..f6c2324 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a998a9665186e8b4a9803fe9d6f56c7c +folderAsset: yes +timeCreated: 1507204232 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab new file mode 100644 index 0000000..64b5273 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab @@ -0,0 +1,407 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1042811817518116} + m_IsPrefabParent: 1 +--- !u!1 &1042811817518116 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4934652213904522} + - component: {fileID: 114633414738637088} + - component: {fileID: 114999985697777428} + m_Layer: 0 + m_Name: DesktopCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1191981426926616 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224730995454723592} + - component: {fileID: 222022361979082978} + - component: {fileID: 114875260969753814} + - component: {fileID: 114804801066480696} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1339917933382392 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4233084601455098} + - component: {fileID: 20925059199990588} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1740920664178068 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224448664911673038} + - component: {fileID: 223647970445981788} + - component: {fileID: 114438113607979530} + - component: {fileID: 114812799459679886} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1833957408490314 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224596492490445500} + - component: {fileID: 222925746554489996} + - component: {fileID: 114045748572757610} + m_Layer: 0 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4233084601455098 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1339917933382392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4934652213904522} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4934652213904522 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1042811817518116} + 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: 4233084601455098} + - {fileID: 224448664911673038} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20925059199990588 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1339917933382392} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.05 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!114 &114045748572757610 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1833957408490314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 10305, guid: 0000000000000000f000000000000000, type: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114438113607979530 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1740920664178068} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114633414738637088 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1042811817518116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 80051f0bcd2e4f6c99dcca21d8991fe4, type: 3} + m_Name: + m_EditorClassIdentifier: + desktopCamera: {fileID: 0} + followScript: {fileID: 0} + headsetImage: {fileID: 114045748572757610} + headsetRenderTexture: {fileID: 0} +--- !u!114 &114804801066480696 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1191981426926616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 +--- !u!114 &114812799459679886 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1740920664178068} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 10 + m_Bottom: 10 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114875260969753814 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1191981426926616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114999985697777428 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1042811817518116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe5040c2eaa9ff147b80ded004191c67, type: 3} + m_Name: + m_EditorClassIdentifier: + gameObjectToFollow: {fileID: 0} + gameObjectToChange: {fileID: 0} + followsPosition: 1 + smoothsPosition: 1 + maxAllowedPerFrameDistanceDifference: 0.003 + followsRotation: 1 + smoothsRotation: 1 + maxAllowedPerFrameAngleDifference: 1.5 + followsScale: 0 + smoothsScale: 0 + maxAllowedPerFrameSizeDifference: 0.003 + _moment: 2 +--- !u!222 &222022361979082978 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1191981426926616} +--- !u!222 &222925746554489996 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1833957408490314} +--- !u!223 &223647970445981788 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1740920664178068} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224448664911673038 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1740920664178068} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224730995454723592} + m_Father: {fileID: 4934652213904522} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224596492490445500 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1833957408490314} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224730995454723592} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 300, y: 170} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224730995454723592 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1191981426926616} + 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: 224596492490445500} + m_Father: {fileID: 224448664911673038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab.meta new file mode 100644 index 0000000..e1f7f39 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cff3fcd971e904049aab5e4ec16486cf +timeCreated: 1498292593 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs new file mode 100644 index 0000000..9e4baf6 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs @@ -0,0 +1,145 @@ +// Desktop Camera|Prefabs|0040 +namespace VRTK +{ + using UnityEngine; + using UnityEngine.UI; + using System.Collections.Generic; + using System.Linq; + + /// + /// Allows rendering a separate camera that is shown on the desktop only, without changing what's seen in VR headsets. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/DesktopCamera/DesktopCamera` prefab in the scene. + /// + [AddComponentMenu("VRTK/Scripts/Prefabs/VRTK_DesktopCamera")] + public class VRTK_DesktopCamera : MonoBehaviour + { + [Header("Desktop Camera")] + + [Tooltip("The camera to use for the desktop view. If left blank the camera on the game object this script is attached to or any of its children will be used.")] + public Camera desktopCamera; + [Tooltip("The follow script to use for following the headset. If left blank the follow script on the game object this script is attached to or any of its children will be used.")] + public VRTK_ObjectFollow followScript; + + [Header("Headset Image")] + + [Tooltip("The optional image to render the headset's view into. Can be left blank.")] + public RawImage headsetImage; + [Tooltip("The optional render texture to render the headset's view into. Can be left blank. If this is blank and `headsetImage` is set a default render texture will be created.")] + public RenderTexture headsetRenderTexture; + + protected Camera headsetCameraCopy; + protected VRTK_TransformFollow headsetCameraTransformFollow; + + protected virtual void OnEnable() + { + desktopCamera = desktopCamera == null ? GetComponentInChildren() : desktopCamera; + followScript = followScript == null ? GetComponentInChildren() : followScript; + + if (desktopCamera == null) + { + VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_DesktopCamera", "Camera", "desktopCamera", "the same", " or any child of it")); + return; + } + + if (followScript == null) + { + VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_DesktopCamera", "VRTK_ObjectFollow", "followScript", "the same", " or any child of it")); + return; + } + + headsetCameraTransformFollow = gameObject.AddComponent(); + headsetCameraTransformFollow.moment = VRTK_TransformFollow.FollowMoment.OnLateUpdate; + + if (VRTK_SDKManager.SubscribeLoadedSetupChanged(LoadedSetupChanged) && VRTK_SDKManager.GetLoadedSDKSetup() != null) + { + ConfigureForCurrentSDKSetup(); + } + } + + protected virtual void OnDisable() + { + VRTK_SDKManager.UnsubscribeLoadedSetupChanged(LoadedSetupChanged); + Destroy(headsetCameraTransformFollow); + if (headsetCameraCopy != null) + { + Destroy(headsetCameraCopy.gameObject); + } + } + + protected virtual void LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + ConfigureForCurrentSDKSetup(); + } + + protected virtual void ConfigureForCurrentSDKSetup() + { + if (headsetCameraCopy != null) + { + Destroy(headsetCameraCopy.gameObject); + } + + headsetCameraTransformFollow.enabled = false; + followScript.enabled = false; + + if (VRTK_SDKManager.GetLoadedSDKSetup() == null) + { + return; + } + + Camera headsetCamera = VRTK_DeviceFinder.HeadsetCamera().GetComponent(); + + desktopCamera.depth = headsetCamera.depth + 1; + desktopCamera.stereoTargetEye = StereoTargetEyeMask.None; + + followScript.gameObjectToFollow = headsetCamera.gameObject; + followScript.gameObjectToChange = desktopCamera.gameObject; + followScript.Follow(); + followScript.enabled = true; + + if (headsetImage == null) + { + return; + } + + if (headsetRenderTexture == null) + { + headsetRenderTexture = new RenderTexture( + (int)headsetImage.rectTransform.rect.width, + (int)headsetImage.rectTransform.rect.height, + 24, + RenderTextureFormat.ARGB32) + { + name = VRTK_SharedMethods.GenerateVRTKObjectName(true, "Headset RenderTexture") + }; + } + + headsetCameraCopy = Instantiate(headsetCamera, transform); + headsetCameraCopy.name = VRTK_SharedMethods.GenerateVRTKObjectName(true, "Headset Camera Copy"); + headsetCameraCopy.targetTexture = headsetRenderTexture; + + foreach (Transform child in headsetCameraCopy.transform) + { + Destroy(child.gameObject); + } + + IEnumerable componentsToDestroy = headsetCameraCopy + .GetComponents() + .Where(component => component != headsetCameraCopy && !(component is Transform)); + foreach (Component component in componentsToDestroy) + { + Destroy(component); + } + + headsetCameraTransformFollow.gameObjectToFollow = headsetCamera.gameObject; + headsetCameraTransformFollow.gameObjectToChange = headsetCameraCopy.gameObject; + headsetCameraTransformFollow.Follow(); + headsetCameraTransformFollow.enabled = true; + + headsetImage.texture = headsetRenderTexture; + headsetImage.SetNativeSize(); + } + } +} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs.meta new file mode 100644 index 0000000..46dc9ec --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 80051f0bcd2e4f6c99dcca21d8991fe4 +timeCreated: 1500230874 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint.meta b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint.meta new file mode 100644 index 0000000..b110a9d --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d634ebdbba38e674bad55f4429bcfdba +folderAsset: yes +timeCreated: 1507204248 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab new file mode 100644 index 0000000..dc7cfbf --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab @@ -0,0 +1,361 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000014182278838} + m_IsPrefabParent: 1 +--- !u!1 &1000010328351412 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013737293598} + - component: {fileID: 33000013961166148} + - component: {fileID: 23000011410588948} + m_Layer: 0 + m_Name: cursorCapsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010836385482 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012573688674} + - component: {fileID: 33000011832110440} + - component: {fileID: 23000010780883118} + m_Layer: 0 + m_Name: cursorCapsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012360424226 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011187840838} + - component: {fileID: 33000012222041474} + - component: {fileID: 23000011060080464} + m_Layer: 0 + m_Name: cursorCapsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012676122638 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012354296782} + m_Layer: 0 + m_Name: defaultCursor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013403734506 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012404171068} + m_Layer: 0 + m_Name: hoverCursor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014040001326 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010033549378} + m_Layer: 0 + m_Name: lockedCursor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014182278838 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010082710416} + - component: {fileID: 114000010870356714} + m_Layer: 0 + m_Name: DestinationPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010033549378 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014040001326} + 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: 4000013737293598} + m_Father: {fileID: 4000010082710416} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010082710416 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014182278838} + 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: 4000012354296782} + - {fileID: 4000012404171068} + - {fileID: 4000010033549378} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011187840838 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012360424226} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.4, z: 0} + m_LocalScale: {x: 0.4, y: 0.4, z: 0.4} + m_Children: [] + m_Father: {fileID: 4000012354296782} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012354296782 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012676122638} + 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: 4000011187840838} + m_Father: {fileID: 4000010082710416} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012404171068 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013403734506} + 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: 4000012573688674} + m_Father: {fileID: 4000010082710416} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012573688674 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010836385482} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.4, z: 0} + m_LocalScale: {x: 0.4, y: 0.4, z: 0.4} + m_Children: [] + m_Father: {fileID: 4000012404171068} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013737293598 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010328351412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.4, z: 0} + m_LocalScale: {x: 0.4, y: 0.4, z: 0.4} + m_Children: [] + m_Father: {fileID: 4000010033549378} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23000010780883118 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010836385482} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f5a180e78cba3b64d9cffa9c458a391d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23000011060080464 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012360424226} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 28bb0e600244c8a4181bcf69514c5716, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23000011410588948 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010328351412} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: b43e5571a9fe23946bf3070cdfceb1b0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33000011832110440 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010836385482} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012222041474 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012360424226} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000013961166148 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010328351412} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &114000010870356714 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014182278838} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f6512be739a547c4f8c3323a1bdb9708, type: 3} + m_Name: + m_EditorClassIdentifier: + enableTeleport: 1 + targetListPolicy: {fileID: 0} + defaultCursorObject: {fileID: 1000012676122638} + hoverCursorObject: {fileID: 1000013403734506} + lockedCursorObject: {fileID: 1000014040001326} + destinationLocation: {fileID: 0} + snapToPoint: 1 + hidePointerCursorOnHover: 1 + hideDirectionIndicatorOnHover: 0 + snapToRotation: 0 + teleporter: {fileID: 0} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab.meta new file mode 100644 index 0000000..d0a414a --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5174ba385e2fcac40a9009762418e317 +timeCreated: 1487417997 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs new file mode 100644 index 0000000..201708e --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs @@ -0,0 +1,459 @@ +// Destination Point|Prefabs|0090 +namespace VRTK +{ + using UnityEngine; + using System.Collections; + + /// + /// Event Payload + /// + /// this object + public delegate void DestinationPointEventHandler(object sender); + + /// + /// Allows for a specific scene marker or specific area within the scene that can be teleported to. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/DestinationPoint/DestinationPoint` prefab at the desired location within the scene. + /// * Uncheck the `Enable Teleport` checkbox to lock the destination point and prevent teleporting to it. + /// * Uncheck the `Snap To Point` checkbox to provide a destination area rather than a specific point to teleport to. + /// + /// + /// `044_CameraRig_RestrictedTeleportZones` uses the `VRTK_DestinationPoint` prefab to set up a collection of pre-defined teleport locations. + /// + public class VRTK_DestinationPoint : VRTK_DestinationMarker + { + /// + /// Allowed snap to rotation types. + /// + public enum RotationTypes + { + /// + /// No rotation information will be emitted in the destination set payload. + /// + NoRotation, + /// + /// The destination point's rotation will be emitted without taking into consideration the current headset rotation. + /// + RotateWithNoHeadsetOffset, + /// + /// The destination point's rotation will be emitted and will take into consideration the current headset rotation. + /// + RotateWithHeadsetOffset + } + + [Header("Destination Point Settings")] + + [Tooltip("The GameObject to use to represent the default cursor state.")] + public GameObject defaultCursorObject; + [Tooltip("The GameObject to use to represent the hover cursor state.")] + public GameObject hoverCursorObject; + [Tooltip("The GameObject to use to represent the locked cursor state.")] + public GameObject lockedCursorObject; + [Tooltip("An optional transform to determine the destination location for the destination marker. This can be useful to offset the destination location from the destination point. If this is left empty then the destiantion point transform will be used.")] + public Transform destinationLocation; + [Tooltip("If this is checked then after teleporting, the play area will be snapped to the origin of the destination point. If this is false then it's possible to teleport to anywhere within the destination point collider.")] + public bool snapToPoint = true; + [Tooltip("If this is checked, then the pointer cursor will be hidden when a valid destination point is hovered over.")] + public bool hidePointerCursorOnHover = true; + [Tooltip("If this is checked, then the pointer direction indicator will be hidden when a valid destination point is hovered over. A pointer direction indicator will always be hidden if snap to rotation is set.")] + public bool hideDirectionIndicatorOnHover = false; + [Tooltip("Determines if the play area will be rotated to the rotation of the destination point upon the destination marker being set.")] + public RotationTypes snapToRotation = RotationTypes.NoRotation; + + [Header("Custom Settings")] + + [Tooltip("The scene teleporter that is used. If this is not specified then it will be auto looked up in the scene.")] + public VRTK_BasicTeleport teleporter; + + public static VRTK_DestinationPoint currentDestinationPoint; + + /// + /// Emitted when the destination point is enabled. + /// + public event DestinationPointEventHandler DestinationPointEnabled; + /// + /// Emitted when the destination point is disabled. + /// + public event DestinationPointEventHandler DestinationPointDisabled; + /// + /// Emitted when the destination point is locked. + /// + public event DestinationPointEventHandler DestinationPointLocked; + /// + /// Emitted when the destination point is unlocked. + /// + public event DestinationPointEventHandler DestinationPointUnlocked; + /// + /// Emitted when the destination point is reset. + /// + public event DestinationPointEventHandler DestinationPointReset; + + protected Collider pointCollider; + protected bool createdCollider; + protected Rigidbody pointRigidbody; + protected bool createdRigidbody; + protected Coroutine initaliseListeners; + protected bool isActive; + protected VRTK_BasePointerRenderer.VisibilityStates storedCursorState; + protected bool storedDirectionIndicatorState; + protected bool currentTeleportState; + protected bool customTeleporter; + protected Transform playArea; + protected Transform headset; + + public virtual void OnDestinationPointEnabled() + { + if (DestinationPointEnabled != null) + { + DestinationPointEnabled(this); + } + } + + public virtual void OnDestinationPointDisabled() + { + if (DestinationPointDisabled != null) + { + DestinationPointDisabled(this); + } + } + + public virtual void OnDestinationPointLocked() + { + if (DestinationPointLocked != null) + { + DestinationPointLocked(this); + } + } + + public virtual void OnDestinationPointUnlocked() + { + if (DestinationPointUnlocked != null) + { + DestinationPointUnlocked(this); + } + } + + public virtual void OnDestinationPointReset() + { + if (DestinationPointReset != null) + { + DestinationPointReset(this); + } + } + + /// + /// The ResetDestinationPoint resets the destination point back to the default state. + /// + public virtual void ResetDestinationPoint() + { + ResetPoint(); + } + + protected virtual void Awake() + { + VRTK_SDKManager.AttemptAddBehaviourToToggleOnLoadedSetupChange(this); + } + + protected override void OnEnable() + { + base.OnEnable(); + customTeleporter = (teleporter != null); + CreateColliderIfRequired(); + SetupRigidbody(); + initaliseListeners = StartCoroutine(ManageDestinationMarkersAtEndOfFrame()); + ResetPoint(); + currentTeleportState = enableTeleport; + playArea = VRTK_DeviceFinder.PlayAreaTransform(); + headset = VRTK_DeviceFinder.HeadsetTransform(); + destinationLocation = (destinationLocation != null ? destinationLocation : transform); + } + + protected override void OnDisable() + { + base.OnDisable(); + if (initaliseListeners != null) + { + StopCoroutine(initaliseListeners); + } + + ManageDestinationMarkers(false); + if (createdCollider) + { + Destroy(pointCollider); + pointCollider = null; + } + + if (createdRigidbody) + { + Destroy(pointRigidbody); + pointRigidbody = null; + } + + if (!customTeleporter) + { + teleporter = null; + } + } + + protected virtual void OnDestroy() + { + VRTK_SDKManager.AttemptRemoveBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void Update() + { + if (enableTeleport != currentTeleportState) + { + ResetPoint(); + } + currentTeleportState = enableTeleport; + } + + protected virtual void CreateColliderIfRequired() + { + pointCollider = GetComponentInChildren(); + createdCollider = false; + if (pointCollider == null) + { + pointCollider = gameObject.AddComponent(); + createdCollider = true; + } + + pointCollider.isTrigger = true; + } + + protected virtual void SetupRigidbody() + { + pointRigidbody = GetComponent(); + createdRigidbody = false; + if (pointRigidbody == null) + { + pointRigidbody = gameObject.AddComponent(); + createdRigidbody = true; + } + pointRigidbody.isKinematic = true; + pointRigidbody.useGravity = false; + } + + protected virtual IEnumerator ManageDestinationMarkersAtEndOfFrame() + { + yield return new WaitForEndOfFrame(); + if (enabled) + { + ManageDestinationMarkers(true); + } + teleporter = (teleporter == null && VRTK_ObjectCache.registeredTeleporters.Count > 0 ? VRTK_ObjectCache.registeredTeleporters[0] : teleporter); + } + + protected virtual void ManageDestinationMarkers(bool state) + { + ManageDestinationMarkerListeners(VRTK_DeviceFinder.GetControllerLeftHand(), state); + ManageDestinationMarkerListeners(VRTK_DeviceFinder.GetControllerRightHand(), state); + + for (int i = 0; i < VRTK_ObjectCache.registeredDestinationMarkers.Count; i++) + { + VRTK_DestinationMarker destinationMarker = VRTK_ObjectCache.registeredDestinationMarkers[i]; + ManageDestinationMarkerListeners(destinationMarker.gameObject, state); + } + } + + protected virtual void ManageDestinationMarkerListeners(GameObject markerMaker, bool register) + { + if (markerMaker != null) + { + VRTK_DestinationMarker[] worldMarkers = markerMaker.GetComponentsInChildren(); + for (int i = 0; i < worldMarkers.Length; i++) + { + VRTK_DestinationMarker worldMarker = worldMarkers[i]; + if (worldMarker == this) + { + continue; + } + if (register) + { + worldMarker.DestinationMarkerEnter += DoDestinationMarkerEnter; + worldMarker.DestinationMarkerExit += DoDestinationMarkerExit; + worldMarker.DestinationMarkerSet += DoDestinationMarkerSet; + } + else + { + worldMarker.DestinationMarkerEnter -= DoDestinationMarkerEnter; + worldMarker.DestinationMarkerExit -= DoDestinationMarkerExit; + worldMarker.DestinationMarkerSet -= DoDestinationMarkerSet; + } + } + } + } + + protected virtual void DoDestinationMarkerEnter(object sender, DestinationMarkerEventArgs e) + { + if (!isActive && e.raycastHit.transform == transform) + { + isActive = true; + ToggleCursor(sender, false); + EnablePoint(); + if (snapToPoint && teleporter != null) + { + teleporter.SetActualTeleportDestination(destinationLocation.position, GetRotation()); + } + OnDestinationMarkerEnter(SetDestinationMarkerEvent(0f, e.raycastHit.transform, e.raycastHit, e.raycastHit.transform.position, e.controllerReference, false, GetRotation())); + } + } + + protected virtual void DoDestinationMarkerExit(object sender, DestinationMarkerEventArgs e) + { + if (isActive && e.raycastHit.transform == transform) + { + isActive = false; + ToggleCursor(sender, true); + ResetPoint(); + if (snapToPoint && teleporter != null) + { + teleporter.ResetActualTeleportDestination(); + } + OnDestinationMarkerExit(SetDestinationMarkerEvent(0f, e.raycastHit.transform, e.raycastHit, e.raycastHit.transform.position, e.controllerReference, false, GetRotation())); + } + } + + protected virtual void DoDestinationMarkerSet(object sender, DestinationMarkerEventArgs e) + { + if (e.raycastHit.transform == transform) + { + currentDestinationPoint = this; + if (snapToPoint) + { + if (teleporter != null) + { + teleporter.SetActualTeleportDestination(destinationLocation.position, GetRotation()); + } + DisablePoint(); + } + } + else if (currentDestinationPoint != this) + { + ResetPoint(); + } + else if (currentDestinationPoint != null && e.raycastHit.transform != currentDestinationPoint.transform) + { + currentDestinationPoint = null; + ResetPoint(); + } + } + + protected virtual void ToggleCursor(object sender, bool state) + { + if ((hidePointerCursorOnHover || hideDirectionIndicatorOnHover) && sender.GetType() == typeof(VRTK_Pointer)) + { + VRTK_Pointer pointer = (VRTK_Pointer)sender; + if (pointer != null && pointer.pointerRenderer != null) + { + TogglePointerCursor(pointer.pointerRenderer, state); + ToggleDirectionIndicator(pointer.pointerRenderer, state); + } + } + } + + protected virtual void TogglePointerCursor(VRTK_BasePointerRenderer pointerRenderer, bool state) + { + if (hidePointerCursorOnHover) + { + if (!state) + { + storedCursorState = pointerRenderer.cursorVisibility; + pointerRenderer.cursorVisibility = VRTK_BasePointerRenderer.VisibilityStates.AlwaysOff; + } + else + { + pointerRenderer.cursorVisibility = storedCursorState; + } + } + } + + protected virtual void ToggleDirectionIndicator(VRTK_BasePointerRenderer pointerRenderer, bool state) + { + if (pointerRenderer.directionIndicator != null && hideDirectionIndicatorOnHover) + { + if (!state) + { + storedDirectionIndicatorState = pointerRenderer.directionIndicator.isActive; + pointerRenderer.directionIndicator.isActive = false; + } + else + { + pointerRenderer.directionIndicator.isActive = storedDirectionIndicatorState; + } + } + } + + protected virtual void EnablePoint() + { + ToggleObject(lockedCursorObject, false); + ToggleObject(defaultCursorObject, false); + ToggleObject(hoverCursorObject, true); + OnDestinationPointEnabled(); + } + + protected virtual void SetColliderState(bool state) + { + if (pointCollider != null) + { + pointCollider.enabled = state; + } + } + + protected virtual void DisablePoint() + { + SetColliderState(false); + ToggleObject(lockedCursorObject, false); + ToggleObject(defaultCursorObject, false); + ToggleObject(hoverCursorObject, false); + OnDestinationPointDisabled(); + } + + protected virtual void ResetPoint() + { + if (snapToPoint && currentDestinationPoint == this) + { + return; + } + + ToggleObject(hoverCursorObject, false); + if (enableTeleport) + { + SetColliderState(true); + ToggleObject(defaultCursorObject, true); + ToggleObject(lockedCursorObject, false); + OnDestinationPointUnlocked(); + } + else + { + SetColliderState(false); + ToggleObject(lockedCursorObject, true); + ToggleObject(defaultCursorObject, false); + OnDestinationPointLocked(); + } + OnDestinationPointReset(); + } + + protected virtual void ToggleObject(GameObject givenObject, bool state) + { + if (givenObject != null) + { + givenObject.SetActive(state); + } + } + + protected virtual Quaternion? GetRotation() + { + if (snapToRotation == RotationTypes.NoRotation) + { + return null; + } + + float offset = (snapToRotation == RotationTypes.RotateWithHeadsetOffset && playArea != null && headset != null ? playArea.eulerAngles.y - headset.eulerAngles.y : 0f); + return Quaternion.Euler(0f, destinationLocation.eulerAngles.y + offset, 0f); + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs.meta new file mode 100644 index 0000000..0d5465d --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f6512be739a547c4f8c3323a1bdb9708 +timeCreated: 1492435238 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas.meta b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas.meta new file mode 100644 index 0000000..ff6efe2 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7b842bfc341ceeb4c9270c1f354490aa +folderAsset: yes +timeCreated: 1507204281 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab new file mode 100644 index 0000000..f9f3041 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab @@ -0,0 +1,200 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &148444 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22449092} + - component: {fileID: 22346136} + - component: {fileID: 11456460} + - component: {fileID: 11470338} + m_Layer: 5 + m_Name: FramesPerSecondCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &185676 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22486204} + - component: {fileID: 22243976} + - component: {fileID: 11417664} + - component: {fileID: 11465480} + m_Layer: 5 + m_Name: FramesPerSecondText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &11417664 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 50 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: FPS +--- !u!114 &11456460 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148444} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &11465480 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c05937b3f7f046f4ba4de4f8f7b39f2f, type: 3} + m_Name: + m_EditorClassIdentifier: + displayFPS: 1 + targetFPS: 90 + fontSize: 32 + position: {x: 0, y: 0, z: 0} + goodColor: {r: 0, g: 1, b: 0, a: 1} + warnColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + badColor: {r: 1, g: 0, b: 0, a: 1} +--- !u!114 &11470338 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148444} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &22243976 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185676} +--- !u!223 &22346136 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148444} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 0} + m_PlaneDistance: 0.1 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &22449092 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148444} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 22486204} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &22486204 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 185676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22449092} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 148444} + m_IsPrefabParent: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab.meta new file mode 100644 index 0000000..f3499b5 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 39aa6e3f7c442a04d997c9ed23f46981 +timeCreated: 1462698525 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs new file mode 100644 index 0000000..0f2e198 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs @@ -0,0 +1,118 @@ +// Frames Per Second Canvas|Prefabs|0030 +namespace VRTK +{ + using UnityEngine; + using UnityEngine.UI; + + /// + /// Provides a frames per second text element to the HMD view. To use the prefab it must be placed into the scene then the headset camera needs attaching to the canvas: + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas` prefab in the scene hierarchy. + /// + /// > This script is largely based on the script at: http://talesfromtherift.com/vr-fps-counter/ So all credit to Peter Koch for his work. Twitter: @peterept + /// + /// + /// `VRTK/Examples/018_CameraRig_FramesPerSecondCounter` displays the frames per second in the centre of the headset view. Pressing the trigger generates a new sphere and pressing the touchpad generates ten new spheres. Eventually when lots of spheres are present the FPS will drop and demonstrate the prefab. + /// + public class VRTK_FramesPerSecondViewer : MonoBehaviour + { + [Tooltip("Toggles whether the FPS text is visible.")] + public bool displayFPS = true; + [Tooltip("The frames per second deemed acceptable that is used as the benchmark to change the FPS text colour.")] + public int targetFPS = 90; + [Tooltip("The size of the font the FPS is displayed in.")] + public int fontSize = 32; + [Tooltip("The position of the FPS text within the headset view.")] + public Vector3 position = Vector3.zero; + [Tooltip("The colour of the FPS text when the frames per second are within reasonable limits of the Target FPS.")] + public Color goodColor = Color.green; + [Tooltip("The colour of the FPS text when the frames per second are falling short of reasonable limits of the Target FPS.")] + public Color warnColor = Color.yellow; + [Tooltip("The colour of the FPS text when the frames per second are at an unreasonable level of the Target FPS.")] + public Color badColor = Color.red; + + protected const float updateInterval = 0.5f; + protected int framesCount; + protected float framesTime; + protected Canvas canvas; + protected Text text; + + protected virtual void OnEnable() + { + VRTK_SDKManager.SubscribeLoadedSetupChanged(LoadedSetupChanged); + InitCanvas(); + } + + protected virtual void OnDisable() + { + if (!gameObject.activeSelf) + { + VRTK_SDKManager.UnsubscribeLoadedSetupChanged(LoadedSetupChanged); + } + } + + protected virtual void Update() + { + framesCount++; + framesTime += Time.unscaledDeltaTime; + + if (framesTime > updateInterval) + { + if (text != null) + { + if (displayFPS) + { + float fps = framesCount / framesTime; + text.text = string.Format("{0:F2} FPS", fps); + text.color = (fps > (targetFPS - 5) ? goodColor : + (fps > (targetFPS - 30) ? warnColor : + badColor)); + } + else + { + text.text = ""; + } + } + framesCount = 0; + framesTime = 0; + } + } + + protected virtual void LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + if (this != null && VRTK_SDKManager.ValidInstance() && gameObject.activeInHierarchy) + { + SetCanvasCamera(); + } + } + + protected virtual void InitCanvas() + { + canvas = transform.GetComponentInParent(); + text = GetComponent(); + + if (canvas != null) + { + canvas.planeDistance = 0.5f; + } + + if (text != null) + { + text.fontSize = fontSize; + text.transform.localPosition = position; + } + SetCanvasCamera(); + } + + protected virtual void SetCanvasCamera() + { + Transform sdkCamera = VRTK_DeviceFinder.HeadsetCamera(); + if (sdkCamera != null) + { + canvas.worldCamera = sdkCamera.GetComponent(); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs.meta new file mode 100644 index 0000000..cec6421 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c05937b3f7f046f4ba4de4f8f7b39f2f +timeCreated: 1492435312 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip.meta new file mode 100644 index 0000000..44263fa --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5573a209dff1f5348989698da49d2692 +folderAsset: yes +timeCreated: 1507204301 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab new file mode 100644 index 0000000..62f4fca --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab @@ -0,0 +1,508 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &135510 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22406066} + - component: {fileID: 22203070} + - component: {fileID: 11479638} + m_Layer: 2 + m_Name: UIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &136616 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22412712} + - component: {fileID: 22241664} + - component: {fileID: 11416536} + - component: {fileID: 11443526} + m_Layer: 2 + m_Name: UITextReverse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &178200 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22482598} + - component: {fileID: 22209158} + - component: {fileID: 11411478} + - component: {fileID: 11454844} + m_Layer: 2 + m_Name: UITextFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &181452 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22400294} + - component: {fileID: 22315610} + - component: {fileID: 11455180} + m_Layer: 2 + m_Name: TooltipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &182086 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 441652} + - component: {fileID: 11464476} + m_Layer: 2 + m_Name: ObjectTooltip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &198614 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 433762} + - component: {fileID: 12043548} + m_Layer: 2 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &433762 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 198614} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 441652} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &441652 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 182086} + 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: 433762} + - {fileID: 22400294} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &11411478 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11416536 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: New Text +--- !u!114 &11443526 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11454844 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &11455180 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 181452} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!114 &11464476 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 182086} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ed683b89cd94a44bb399806ce5cce6, type: 3} + m_Name: + m_EditorClassIdentifier: + displayText: TooltipText + fontSize: 14 + containerSize: {x: 100, y: 30} + drawLineFrom: {fileID: 0} + drawLineTo: {fileID: 0} + lineWidth: 0.001 + fontColor: {r: 0, g: 0, b: 0, a: 1} + containerColor: {r: 1, g: 0.5588235, b: 0.5588235, a: 1} + lineColor: {r: 0, g: 0, b: 0, a: 1} + alwaysFaceHeadset: 0 +--- !u!114 &11479638 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.36764705, g: 0.5551724, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!120 &12043548 +LineRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 198614} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_Parameters: + serializedVersion: 2 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!222 &22203070 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135510} +--- !u!222 &22209158 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178200} +--- !u!222 &22241664 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136616} +--- !u!223 &22315610 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 181452} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &22400294 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 181452} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 22406066} + - {fileID: 22482598} + - {fileID: 22412712} + m_Father: {fileID: 441652} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.1, y: 0.03} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22406066 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135510} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22400294} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22412712 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136616} + m_LocalRotation: {x: 7.1054274e-15, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22400294} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22482598 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178200} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22400294} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 182086} + m_IsPrefabParent: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab.meta new file mode 100644 index 0000000..17d0d7b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ab61c80dfd411f4c86b8553b0c42cf1 +timeCreated: 1467030310 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs new file mode 100644 index 0000000..1c138f9 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs @@ -0,0 +1,190 @@ +// Object Tooltip|Prefabs|0060 +namespace VRTK +{ + using UnityEngine; + using UnityEngine.UI; + + /// + /// Event Payload + /// + /// The optional new text that is given to the tooltip. + public struct ObjectTooltipEventArgs + { + public string newText; + } + + /// + /// Event Payload + /// + /// this object + /// + public delegate void ObjectTooltipEventHandler(object sender, ObjectTooltipEventArgs e); + + /// + /// Adds a World Space Canvas that can be used to provide additional information about an object by providing a piece of text with a line drawn to a destination point. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/ObjectTooltip/ObjectTooltip` prefab into the scene hierarchy, preferably as a child of the GameObject it is associated with. + /// * Set the `Draw Line To` option to the Transform component of the GameObject the Tooltip will be assoicated with. + /// + /// + /// `VRTK/Examples/029_Controller_Tooltips` displays two cubes that have an object tooltip added to them along with tooltips that have been added to the controllers. + /// + public class VRTK_ObjectTooltip : MonoBehaviour + { + [Tooltip("The text that is displayed on the tooltip.")] + public string displayText; + [Tooltip("The size of the text that is displayed.")] + public int fontSize = 14; + [Tooltip("The size of the tooltip container where `x = width` and `y = height`.")] + public Vector2 containerSize = new Vector2(0.1f, 0.03f); + [Tooltip("An optional transform of where to start drawing the line from. If one is not provided the centre of the tooltip is used for the initial line position.")] + public Transform drawLineFrom; + [Tooltip("A transform of another object in the scene that a line will be drawn from the tooltip to, this helps denote what the tooltip is in relation to. If no transform is provided and the tooltip is a child of another object, then the parent object's transform will be used as this destination position.")] + public Transform drawLineTo; + [Tooltip("The width of the line drawn between the tooltip and the destination transform.")] + public float lineWidth = 0.001f; + [Tooltip("The colour to use for the text on the tooltip.")] + public Color fontColor = Color.black; + [Tooltip("The colour to use for the background container of the tooltip.")] + public Color containerColor = Color.black; + [Tooltip("The colour to use for the line drawn between the tooltip and the destination transform.")] + public Color lineColor = Color.black; + [Tooltip("If this is checked then the tooltip will be rotated so it always face the headset.")] + public bool alwaysFaceHeadset = false; + + /// + /// Emitted when the object tooltip is reset. + /// + public event ObjectTooltipEventHandler ObjectTooltipReset; + /// + /// Emitted when the object tooltip text is updated. + /// + public event ObjectTooltipEventHandler ObjectTooltipTextUpdated; + + protected LineRenderer line; + protected Transform headset; + + public virtual void OnObjectTooltipReset(ObjectTooltipEventArgs e) + { + if (ObjectTooltipReset != null) + { + ObjectTooltipReset(this, e); + } + } + + public virtual void OnObjectTooltipTextUpdated(ObjectTooltipEventArgs e) + { + if (ObjectTooltipTextUpdated != null) + { + ObjectTooltipTextUpdated(this, e); + } + } + + /// + /// The ResetTooltip method resets the tooltip back to its initial state. + /// + public virtual void ResetTooltip() + { + SetContainer(); + SetText("UITextFront"); + SetText("UITextReverse"); + SetLine(); + if (drawLineTo == null && transform.parent != null) + { + drawLineTo = transform.parent; + } + OnObjectTooltipReset(SetEventPayload()); + } + + /// + /// The UpdateText method allows the tooltip text to be updated at runtime. + /// + /// A string containing the text to update the tooltip to display. + public virtual void UpdateText(string newText) + { + displayText = newText; + OnObjectTooltipTextUpdated(SetEventPayload(newText)); + ResetTooltip(); + } + + protected virtual void Awake() + { + VRTK_SDKManager.AttemptAddBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void OnEnable() + { + ResetTooltip(); + headset = VRTK_DeviceFinder.HeadsetTransform(); + } + + protected virtual void OnDestroy() + { + VRTK_SDKManager.AttemptRemoveBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void Update() + { + DrawLine(); + if (alwaysFaceHeadset) + { + transform.LookAt(headset); + } + } + + protected virtual ObjectTooltipEventArgs SetEventPayload(string newText = "") + { + ObjectTooltipEventArgs e; + e.newText = newText; + return e; + } + + protected virtual void SetContainer() + { + transform.Find("TooltipCanvas").GetComponent().sizeDelta = containerSize; + Transform tmpContainer = transform.Find("TooltipCanvas/UIContainer"); + tmpContainer.GetComponent().sizeDelta = containerSize; + tmpContainer.GetComponent().color = containerColor; + } + + protected virtual void SetText(string name) + { + Text tmpText = transform.Find("TooltipCanvas/" + name).GetComponent(); + tmpText.material = Resources.Load("UIText") as Material; + tmpText.text = displayText.Replace("\\n", "\n"); + tmpText.color = fontColor; + tmpText.fontSize = fontSize; + } + + protected virtual void SetLine() + { + line = transform.Find("Line").GetComponent(); + line.material = Resources.Load("TooltipLine") as Material; + line.material.color = lineColor; +#if UNITY_5_5_OR_NEWER + line.startColor = lineColor; + line.endColor = lineColor; + line.startWidth = lineWidth; + line.endWidth = lineWidth; +#else + line.SetColors(lineColor, lineColor); + line.SetWidth(lineWidth, lineWidth); +#endif + if (drawLineFrom == null) + { + drawLineFrom = transform; + } + } + + protected virtual void DrawLine() + { + if (drawLineTo != null) + { + line.SetPosition(0, drawLineFrom.position); + line.SetPosition(1, drawLineTo.position); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs.meta new file mode 100644 index 0000000..8049feb --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 58ed683b89cd94a44bb399806ce5cce6 +timeCreated: 1492435323 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu.meta b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu.meta new file mode 100644 index 0000000..4e29501 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5e80ec3e745e2284eafb282fdb742a47 +folderAsset: yes +timeCreated: 1507204333 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab new file mode 100644 index 0000000..c7e3493 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab @@ -0,0 +1,714 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011479503222} + m_IsPrefabParent: 1 +--- !u!1 &1000010341222188 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012631413850} + - component: {fileID: 222000011040399942} + - component: {fileID: 114000011807583148} + m_Layer: 5 + m_Name: PanelLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010701239266 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013569275664} + - component: {fileID: 222000011234404338} + - component: {fileID: 114000012686535644} + m_Layer: 5 + m_Name: PanelLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011105831702 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010703947596} + - component: {fileID: 114000013345227420} + m_Layer: 5 + m_Name: PanelTopControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011479503222 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012009530204} + - component: {fileID: 114000012948772104} + m_Layer: 0 + m_Name: PanelMenu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012166891492 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013199083542} + - component: {fileID: 114000011372917448} + m_Layer: 5 + m_Name: PanelBottomControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000012457777852 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013999857770} + - component: {fileID: 114000012212823514} + m_Layer: 5 + m_Name: PanelRightControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000013154830886 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010491611608} + - component: {fileID: 222000010170072988} + - component: {fileID: 114000011252902500} + m_Layer: 5 + m_Name: PanelLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013253791130 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012548946982} + - component: {fileID: 222000010982820986} + - component: {fileID: 114000010004236538} + m_Layer: 5 + m_Name: PanelContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013262441960 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012573961716} + - component: {fileID: 114000012884452260} + m_Layer: 5 + m_Name: PanelLeftControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000013400582030 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013944077242} + - component: {fileID: 222000012389736212} + - component: {fileID: 114000013611564328} + m_Layer: 5 + m_Name: PanelLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013798255254 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010437766854} + - component: {fileID: 223000010242798310} + - component: {fileID: 114000011735383070} + - component: {fileID: 114000013194473748} + m_Layer: 5 + m_Name: PanelMenuCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000012009530204 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011479503222} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224000010437766854} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114000010004236538 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013253791130} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.629} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000011252902500 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013154830886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Panel 1 + + Top' +--- !u!114 &114000011372917448 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012166891492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e65b843b8ee4a1478dca47c73e9470c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000011735383070 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013798255254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114000011807583148 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010341222188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Panel 3 + + Left' +--- !u!114 &114000012212823514 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012457777852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e65b843b8ee4a1478dca47c73e9470c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000012686535644 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010701239266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Panel 2 + + Bottom' +--- !u!114 &114000012884452260 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013262441960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e65b843b8ee4a1478dca47c73e9470c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000012948772104 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011479503222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f1fceeb01cf34240a9aaec5945ae2b3, type: 3} + m_Name: + m_EditorClassIdentifier: + rotateTowards: {fileID: 0} + zoomScaleMultiplier: 1 + topPanelMenuItemController: {fileID: 0} + bottomPanelMenuItemController: {fileID: 0} + leftPanelMenuItemController: {fileID: 0} + rightPanelMenuItemController: {fileID: 0} +--- !u!114 &114000013194473748 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013798255254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114000013345227420 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011105831702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e65b843b8ee4a1478dca47c73e9470c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000013611564328 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013400582030} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Panel 4 + + Right' +--- !u!222 &222000010170072988 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013154830886} +--- !u!222 &222000010982820986 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013253791130} +--- !u!222 &222000011040399942 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010341222188} +--- !u!222 &222000011234404338 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010701239266} +--- !u!222 &222000012389736212 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013400582030} +--- !u!223 &223000010242798310 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013798255254} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224000010437766854 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013798255254} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: + - {fileID: 224000012548946982} + m_Father: {fileID: 4000012009530204} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010491611608 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013154830886} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000010703947596} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.0000028611394} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010703947596 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011105831702} + 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: 224000010491611608} + m_Father: {fileID: 224000012548946982} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012548946982 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013253791130} + 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: 224000010703947596} + - {fileID: 224000013199083542} + - {fileID: 224000012573961716} + - {fileID: 224000013999857770} + m_Father: {fileID: 224000010437766854} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012573961716 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013262441960} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000005, y: 1, z: 1.0000002} + m_Children: + - {fileID: 224000012631413850} + m_Father: {fileID: 224000012548946982} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.000002861023} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012631413850 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010341222188} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012573961716} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013199083542 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012166891492} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000005, y: 1, z: 1.0000002} + m_Children: + - {fileID: 224000013569275664} + m_Father: {fileID: 224000012548946982} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.0005338788} + m_SizeDelta: {x: 0, y: 0.0010677576} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013569275664 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010701239266} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000013199083542} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013944077242 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013400582030} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000013999857770} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013999857770 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012457777852} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000005, y: 1, z: 1.0000002} + m_Children: + - {fileID: 224000013944077242} + m_Father: {fileID: 224000012548946982} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.0000039339066} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab.meta new file mode 100644 index 0000000..6dce9ee --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3811576a34988d47b60f99463017a58 +timeCreated: 1472624814 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs new file mode 100644 index 0000000..c8efda3 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs @@ -0,0 +1,504 @@ +// Panel Menu|Prefabs|0130 +namespace VRTK +{ + using System.Collections; + using UnityEngine; + + /// + /// Adds a top-level controller to handle the display of up to four child PanelMenuItemController items which are displayed as a canvas UI panel. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/PanelMenu/PanelMenu` prefab as a child of the `VRTK_InteractableObject` the panel menu is for. + /// * Optionally remove the panel control menu item child GameObjects if they are not required, e.g. `PanelTopControls`. + /// * Set the panel menu item controllers on the `VRTK_PanelMenuController` script to determine which panel control menu items are available. + /// * The available panel control menu items can be activated by pressing the corresponding direction on the touchpad. + /// + /// + /// `040_Controls_Panel_Menu` contains three basic interactive object examples of the PanelMenu in use. + /// + public class VRTK_PanelMenuController : MonoBehaviour + { + public enum TouchpadPressPosition + { + None, + Top, + Bottom, + Left, + Right + } + + [Tooltip("The GameObject the panel should rotate towards, which is the Camera (eye) by default.")] + public GameObject rotateTowards; + [Tooltip("The scale multiplier, which relates to the scale of parent interactable object.")] + public float zoomScaleMultiplier = 1f; + [Tooltip("The top PanelMenuItemController, which is triggered by pressing up on the controller touchpad.")] + public VRTK_PanelMenuItemController topPanelMenuItemController; + [Tooltip("The bottom PanelMenuItemController, which is triggered by pressing down on the controller touchpad.")] + public VRTK_PanelMenuItemController bottomPanelMenuItemController; + [Tooltip("The left PanelMenuItemController, which is triggered by pressing left on the controller touchpad.")] + public VRTK_PanelMenuItemController leftPanelMenuItemController; + [Tooltip("The right PanelMenuItemController, which is triggered by pressing right on the controller touchpad.")] + public VRTK_PanelMenuItemController rightPanelMenuItemController; + + // Relates to scale of canvas on panel items. + protected const float CanvasScaleSize = 0.001f; + + // Swipe sensitivity / detection. + protected const float AngleTolerance = 30f; + protected const float SwipeMinDist = 0.2f; + protected const float SwipeMinVelocity = 4.0f; + + protected VRTK_ControllerEvents controllerEvents; + protected VRTK_PanelMenuItemController currentPanelMenuItemController; + protected GameObject interactableObject; + protected GameObject canvasObject; + protected readonly Vector2 xAxis = new Vector2(1, 0); + protected readonly Vector2 yAxis = new Vector2(0, 1); + protected Vector2 touchStartPosition; + protected Vector2 touchEndPosition; + protected float touchStartTime; + protected float currentAngle; + protected bool isTrackingSwipe = false; + protected bool isPendingSwipeCheck = false; + protected bool isGrabbed = false; + protected bool isShown = false; + protected Coroutine tweenMenuScaleRoutine; + + /// + /// The ToggleMenu method is used to show or hide the menu. + /// + public virtual void ToggleMenu() + { + if (isShown) + { + HideMenu(true); + } + else + { + ShowMenu(); + } + } + + /// + /// The ShowMenu method is used to show the menu. + /// + public virtual void ShowMenu() + { + if (!isShown) + { + isShown = true; + InitTweenMenuScale(isShown); + } + } + + /// + /// The HideMenu method is used to hide the menu. + /// + /// If true then the menu is always hidden. + public virtual void HideMenu(bool force) + { + if (isShown && force) + { + isShown = false; + InitTweenMenuScale(isShown); + } + } + + /// + /// The HideMenuImmediate method is used to immediately hide the menu. + /// + public virtual void HideMenuImmediate() + { + if (currentPanelMenuItemController != null && isShown) + { + HandlePanelMenuItemControllerVisibility(currentPanelMenuItemController); + } + transform.localScale = Vector3.zero; + canvasObject.transform.localScale = Vector3.zero; + isShown = false; + } + + protected virtual void Awake() + { + Initialize(); + VRTK_SDKManager.AttemptAddBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void Start() + { + interactableObject = gameObject.transform.parent.gameObject; + if (interactableObject == null || interactableObject.GetComponent() == null) + { + VRTK_Logger.Warn(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "PanelMenuController", "VRTK_InteractableObject", "a parent")); + return; + } + + interactableObject.GetComponent().InteractableObjectGrabbed += new InteractableObjectEventHandler(DoInteractableObjectIsGrabbed); + interactableObject.GetComponent().InteractableObjectUngrabbed += new InteractableObjectEventHandler(DoInteractableObjectIsUngrabbed); + + canvasObject = gameObject.transform.GetChild(0).gameObject; + if (canvasObject == null || canvasObject.GetComponent() == null) + { + VRTK_Logger.Warn(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "PanelMenuController", "Canvas", "a child")); + } + } + + protected virtual void OnDestroy() + { + VRTK_SDKManager.AttemptRemoveBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void Update() + { + if (interactableObject != null) + { + if (rotateTowards == null) + { + rotateTowards = VRTK_DeviceFinder.HeadsetTransform().gameObject; + if (rotateTowards == null) + { + VRTK_Logger.Warn(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.COULD_NOT_FIND_OBJECT_FOR_ACTION, "PanelMenuController", "an object", "rotate towards")); + } + } + + if (isShown) + { + if (rotateTowards != null) + { + transform.rotation = Quaternion.LookRotation((rotateTowards.transform.position - transform.position) * -1, Vector3.up); + } + } + + if (isPendingSwipeCheck) + { + CalculateSwipeAction(); + } + } + } + + protected virtual void Initialize() + { + if (Application.isPlaying) + { + if (!isShown) + { + transform.localScale = Vector3.zero; + } + } + + if (controllerEvents == null) + { + transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z); + controllerEvents = GetComponentInParent(); + } + } + + protected virtual void BindControllerEvents() + { + controllerEvents.TouchpadPressed += new ControllerInteractionEventHandler(DoTouchpadPress); + controllerEvents.TouchpadTouchStart += new ControllerInteractionEventHandler(DoTouchpadTouched); + controllerEvents.TouchpadTouchEnd += new ControllerInteractionEventHandler(DoTouchpadUntouched); + controllerEvents.TouchpadAxisChanged += new ControllerInteractionEventHandler(DoTouchpadAxisChanged); + controllerEvents.TriggerPressed += new ControllerInteractionEventHandler(DoTriggerPressed); + } + + protected virtual void UnbindControllerEvents() + { + controllerEvents.TouchpadPressed -= new ControllerInteractionEventHandler(DoTouchpadPress); + controllerEvents.TouchpadTouchStart -= new ControllerInteractionEventHandler(DoTouchpadTouched); + controllerEvents.TouchpadTouchEnd -= new ControllerInteractionEventHandler(DoTouchpadUntouched); + controllerEvents.TouchpadAxisChanged -= new ControllerInteractionEventHandler(DoTouchpadAxisChanged); + controllerEvents.TriggerPressed -= new ControllerInteractionEventHandler(DoTriggerPressed); + } + + protected virtual void HandlePanelMenuItemControllerVisibility(VRTK_PanelMenuItemController targetPanelItemController) + { + if (isShown) + { + if (currentPanelMenuItemController == targetPanelItemController) + { + targetPanelItemController.Hide(interactableObject); + currentPanelMenuItemController = null; + HideMenu(true); + } + else + { + currentPanelMenuItemController.Hide(interactableObject); + currentPanelMenuItemController = targetPanelItemController; + } + } + else + { + currentPanelMenuItemController = targetPanelItemController; + } + + if (currentPanelMenuItemController != null) + { + currentPanelMenuItemController.Show(interactableObject); + ShowMenu(); + } + } + + protected virtual void InitTweenMenuScale(bool show) + { + if (tweenMenuScaleRoutine != null) + { + StopCoroutine(tweenMenuScaleRoutine); + } + if (enabled) + { + tweenMenuScaleRoutine = StartCoroutine(TweenMenuScale(show)); + } + } + + protected virtual IEnumerator TweenMenuScale(bool show) + { + float targetScale = 0; + Vector3 direction = -1 * Vector3.one; + if (show) + { + canvasObject.transform.localScale = new Vector3(CanvasScaleSize, CanvasScaleSize, CanvasScaleSize); + targetScale = zoomScaleMultiplier; + direction = Vector3.one; + } + int i = 0; + while (i < 250 && ((show && transform.localScale.x < targetScale) || (!show && transform.localScale.x > targetScale))) + { + transform.localScale += direction * Time.deltaTime * 4f * zoomScaleMultiplier; + yield return true; + i++; + } + transform.localScale = direction * targetScale; + + if (!show) + { + canvasObject.transform.localScale = Vector3.zero; + } + } + + protected virtual void DoInteractableObjectIsGrabbed(object sender, InteractableObjectEventArgs e) + { + controllerEvents = e.interactingObject.GetComponentInParent(); + if (controllerEvents != null) + { + BindControllerEvents(); + } + isGrabbed = true; + } + + protected virtual void DoInteractableObjectIsUngrabbed(object sender, InteractableObjectEventArgs e) + { + isGrabbed = false; + if (isShown) + { + HideMenuImmediate(); + } + + if (controllerEvents != null) + { + UnbindControllerEvents(); + controllerEvents = null; + } + } + + protected virtual void DoTouchpadPress(object sender, ControllerInteractionEventArgs e) + { + if (isGrabbed) + { + TouchpadPressPosition pressPosition = CalculateTouchpadPressPosition(); + switch (pressPosition) + { + case TouchpadPressPosition.Top: + if (topPanelMenuItemController != null) + { + HandlePanelMenuItemControllerVisibility(topPanelMenuItemController); + } + break; + + case TouchpadPressPosition.Bottom: + if (bottomPanelMenuItemController != null) + { + HandlePanelMenuItemControllerVisibility(bottomPanelMenuItemController); + } + break; + + case TouchpadPressPosition.Left: + if (leftPanelMenuItemController != null) + { + HandlePanelMenuItemControllerVisibility(leftPanelMenuItemController); + } + break; + + case TouchpadPressPosition.Right: + if (rightPanelMenuItemController != null) + { + HandlePanelMenuItemControllerVisibility(rightPanelMenuItemController); + } + break; + } + } + } + + protected virtual void DoTouchpadTouched(object sender, ControllerInteractionEventArgs e) + { + touchStartPosition = new Vector2(e.touchpadAxis.x, e.touchpadAxis.y); + touchStartTime = Time.time; + isTrackingSwipe = true; + } + + protected virtual void DoTouchpadUntouched(object sender, ControllerInteractionEventArgs e) + { + isTrackingSwipe = false; + isPendingSwipeCheck = true; + } + + protected virtual void DoTouchpadAxisChanged(object sender, ControllerInteractionEventArgs e) + { + ChangeAngle(CalculateAngle(e)); + + if (isTrackingSwipe) + { + touchEndPosition = new Vector2(e.touchpadAxis.x, e.touchpadAxis.y); + } + } + + protected virtual void DoTriggerPressed(object sender, ControllerInteractionEventArgs e) + { + if (isGrabbed) + { + OnTriggerPressed(); + } + } + + protected virtual void ChangeAngle(float angle, object sender = null) + { + currentAngle = angle; + } + + protected virtual void CalculateSwipeAction() + { + isPendingSwipeCheck = false; + + float deltaTime = Time.time - touchStartTime; + Vector2 swipeVector = touchEndPosition - touchStartPosition; + float velocity = swipeVector.magnitude / deltaTime; + + if ((velocity > SwipeMinVelocity) && (swipeVector.magnitude > SwipeMinDist)) + { + swipeVector.Normalize(); + float angleOfSwipe = Vector2.Dot(swipeVector, xAxis); + angleOfSwipe = Mathf.Acos(angleOfSwipe) * Mathf.Rad2Deg; + + // Left / right + if (angleOfSwipe < AngleTolerance) + { + OnSwipeRight(); + } + else if ((180.0f - angleOfSwipe) < AngleTolerance) + { + OnSwipeLeft(); + } + else + { + // Top / bottom + angleOfSwipe = Vector2.Dot(swipeVector, yAxis); + angleOfSwipe = Mathf.Acos(angleOfSwipe) * Mathf.Rad2Deg; + if (angleOfSwipe < AngleTolerance) + { + OnSwipeTop(); + } + else if ((180.0f - angleOfSwipe) < AngleTolerance) + { + OnSwipeBottom(); + } + } + } + } + + protected virtual TouchpadPressPosition CalculateTouchpadPressPosition() + { + if (CheckAnglePosition(currentAngle, AngleTolerance, 0)) + { + return TouchpadPressPosition.Top; + } + else if (CheckAnglePosition(currentAngle, AngleTolerance, 180)) + { + return TouchpadPressPosition.Bottom; + } + else if (CheckAnglePosition(currentAngle, AngleTolerance, 270)) + { + return TouchpadPressPosition.Left; + } + else if (CheckAnglePosition(currentAngle, AngleTolerance, 90)) + { + return TouchpadPressPosition.Right; + } + + return TouchpadPressPosition.None; + } + + protected virtual void OnSwipeLeft() + { + if (currentPanelMenuItemController != null) + { + currentPanelMenuItemController.SwipeLeft(interactableObject); + } + } + + protected virtual void OnSwipeRight() + { + if (currentPanelMenuItemController != null) + { + currentPanelMenuItemController.SwipeRight(interactableObject); + } + } + + protected virtual void OnSwipeTop() + { + if (currentPanelMenuItemController != null) + { + currentPanelMenuItemController.SwipeTop(interactableObject); + } + } + + protected virtual void OnSwipeBottom() + { + if (currentPanelMenuItemController != null) + { + currentPanelMenuItemController.SwipeBottom(interactableObject); + } + } + + protected virtual void OnTriggerPressed() + { + if (currentPanelMenuItemController != null) + { + currentPanelMenuItemController.TriggerPressed(interactableObject); + } + } + + protected virtual float CalculateAngle(ControllerInteractionEventArgs e) + { + return e.touchpadAngle; + } + + protected virtual float NormAngle(float currentDegree, float maxAngle = 360) + { + if (currentDegree < 0) currentDegree = currentDegree + maxAngle; + return currentDegree % maxAngle; + } + + protected virtual bool CheckAnglePosition(float currentDegree, float tolerance, float targetDegree) + { + float lowerBound = NormAngle(currentDegree - tolerance); + float upperBound = NormAngle(currentDegree + tolerance); + + if (lowerBound > upperBound) + { + return targetDegree >= lowerBound || targetDegree <= upperBound; + } + return targetDegree >= lowerBound && targetDegree <= upperBound; + } + } +} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs.meta new file mode 100644 index 0000000..4b16b35 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6f1fceeb01cf34240a9aaec5945ae2b3 +timeCreated: 1492440757 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs new file mode 100644 index 0000000..0f31f7e --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs @@ -0,0 +1,198 @@ +// Panel Menu Item|Prefabs|0140 +namespace VRTK +{ + using UnityEngine; + + /// + /// Event Payload + /// + /// The GameObject for the interactable object the PanelMenu is attached to. + public struct PanelMenuItemControllerEventArgs + { + public GameObject interactableObject; + } + + /// + /// Event Payload + /// + /// this object + /// + public delegate void PanelMenuItemControllerEventHandler(object sender, PanelMenuItemControllerEventArgs e); + + /// + /// Intercepts the controller events sent from a `VRTK_PanelMenuController` and passes them onto additional custom event subscriber scripts, which then carry out the required custom UI actions. + /// + /// + /// > This script is not directly part of a prefab but is a helper associated to the `PanelMenu` prefab. + /// + /// * Place the `VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController` script on the child GameObject of any Panel Item Container which is contained within the `PanelMenuController` prefab within the scene. + /// * Pick up the VRTK_InteractableObject show/hide the panel menu by pressing the touchpad top/bottom/left/right you can open/close the child UI panel that has been assigned via the Unity Editor panel. + /// + /// + /// `040_Controls_Panel_Menu` contains three basic interactive object examples of the PanelMenu in use. + /// + public class VRTK_PanelMenuItemController : MonoBehaviour + { + /// + /// Emitted when the panel menu item is showing. + /// + public event PanelMenuItemControllerEventHandler PanelMenuItemShowing; + /// + /// Emitted when the panel menu item is hiding. + /// + public event PanelMenuItemControllerEventHandler PanelMenuItemHiding; + /// + /// Emitted when the panel menu item is open and the user swipes left on the controller touchpad. + /// + public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeLeft; + /// + /// Emitted when the panel menu item is open and the user swipes right on the controller touchpad. + /// + public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeRight; + /// + /// Emitted when the panel menu item is open and the user swipes top on the controller touchpad. + /// + public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeTop; + /// + /// Emitted when the panel menu item is open and the user swipes bottom on the controller touchpad. + /// + public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeBottom; + /// + /// Emitted when the panel menu item is open and the user presses the trigger of the controller holding the interactable object. + /// + public event PanelMenuItemControllerEventHandler PanelMenuItemTriggerPressed; + + public virtual void OnPanelMenuItemShowing(PanelMenuItemControllerEventArgs e) + { + if (PanelMenuItemShowing != null) + { + PanelMenuItemShowing(this, e); + } + } + + public virtual void OnPanelMenuItemHiding(PanelMenuItemControllerEventArgs e) + { + if (PanelMenuItemHiding != null) + { + PanelMenuItemHiding(this, e); + } + } + + public virtual void OnPanelMenuItemSwipeLeft(PanelMenuItemControllerEventArgs e) + { + if (PanelMenuItemSwipeLeft != null) + { + PanelMenuItemSwipeLeft(this, e); + } + } + + public virtual void OnPanelMenuItemSwipeRight(PanelMenuItemControllerEventArgs e) + { + if (PanelMenuItemSwipeRight != null) + { + PanelMenuItemSwipeRight(this, e); + } + } + + public virtual void OnPanelMenuItemSwipeTop(PanelMenuItemControllerEventArgs e) + { + if (PanelMenuItemSwipeTop != null) + { + PanelMenuItemSwipeTop(this, e); + } + } + + public virtual void OnPanelMenuItemSwipeBottom(PanelMenuItemControllerEventArgs e) + { + if (PanelMenuItemSwipeBottom != null) + { + PanelMenuItemSwipeBottom(this, e); + } + } + + /// + /// The SetPanelMenuItemEvent is used to build up the event payload. + /// + /// The object the menu is attached to. + /// The payload for the event. + public virtual PanelMenuItemControllerEventArgs SetPanelMenuItemEvent(GameObject interactableObject) + { + PanelMenuItemControllerEventArgs e; + e.interactableObject = interactableObject; + return e; + } + + /// + /// The Show method is used to show the menu. + /// + /// The object the menu is attached to. + public virtual void Show(GameObject interactableObject) + { + gameObject.SetActive(true); + OnPanelMenuItemShowing(SetPanelMenuItemEvent(interactableObject)); + } + + /// + /// The Hide method is used to show the menu. + /// + /// The object the menu is attached to. + public virtual void Hide(GameObject interactableObject) + { + gameObject.SetActive(false); + OnPanelMenuItemHiding(SetPanelMenuItemEvent(interactableObject)); + } + + /// + /// The SwipeLeft method is used when the control is swiped left. + /// + /// The object the menu is attached to. + public virtual void SwipeLeft(GameObject interactableObject) + { + OnPanelMenuItemSwipeLeft(SetPanelMenuItemEvent(interactableObject)); + } + + /// + /// The SwipeRight method is used when the control is swiped right. + /// + /// The object the menu is attached to. + public virtual void SwipeRight(GameObject interactableObject) + { + OnPanelMenuItemSwipeRight(SetPanelMenuItemEvent(interactableObject)); + } + + /// + /// The SwipeTop method is used when the control is swiped up. + /// + /// The object the menu is attached to. + public virtual void SwipeTop(GameObject interactableObject) + { + OnPanelMenuItemSwipeTop(SetPanelMenuItemEvent(interactableObject)); + } + + /// + /// The SwipeBottom method is used when the control is swiped down. + /// + /// The object the menu is attached to. + public virtual void SwipeBottom(GameObject interactableObject) + { + OnPanelMenuItemSwipeBottom(SetPanelMenuItemEvent(interactableObject)); + } + + /// + /// The TriggerPressed method is used when the control action button is pressed. + /// + /// The object the menu is attached to. + public virtual void TriggerPressed(GameObject interactableObject) + { + OnPanelMenuItemTriggerPressed(SetPanelMenuItemEvent(interactableObject)); + } + + protected virtual void OnPanelMenuItemTriggerPressed(PanelMenuItemControllerEventArgs e) + { + if (PanelMenuItemTriggerPressed != null) + { + PanelMenuItemTriggerPressed(this, e); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs.meta new file mode 100644 index 0000000..dc1ca9b --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0e65b843b8ee4a1478dca47c73e9470c +timeCreated: 1492440780 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator.meta b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator.meta new file mode 100644 index 0000000..096afcc --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 74141e64f9d8a27409d565a1d612318d +folderAsset: yes +timeCreated: 1507204361 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab new file mode 100644 index 0000000..39cdb49 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab @@ -0,0 +1,385 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000010029692868} + m_IsPrefabParent: 1 +--- !u!1 &1000010029692868 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011051854964} + - component: {fileID: 114000013321266418} + m_Layer: 0 + m_Name: PointerDirectionIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010308724658 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010119450582} + - component: {fileID: 33000013136408546} + - component: {fileID: 23000013082547924} + m_Layer: 0 + m_Name: ArrowBody + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011842599384 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011232835354} + - component: {fileID: 33000010948628238} + - component: {fileID: 23000010806201822} + m_Layer: 0 + m_Name: ArrowHead + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012073891920 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010761581198} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1001509100487370 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4505267426372662} + - component: {fileID: 33479992987533812} + - component: {fileID: 23558364266865106} + m_Layer: 0 + m_Name: ArrowBody + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1242575248306392 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4494597059343800} + m_Layer: 0 + m_Name: InvalidLocation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1618801641097212 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4196135926608290} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1764245928179372 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4673969480646744} + m_Layer: 0 + m_Name: ValidLocation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4000010119450582 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010308724658} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.15, z: 0.1} + m_Children: [] + m_Father: {fileID: 4000010761581198} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!4 &4000010761581198 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012073891920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010119450582} + m_Father: {fileID: 4494597059343800} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011051854964 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010029692868} + 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: 4673969480646744} + - {fileID: 4494597059343800} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011232835354 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011842599384} + m_LocalRotation: {x: 0.38268343, y: 0, z: 0, w: 0.92387956} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 4196135926608290} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 45, y: 0, z: 0} +--- !u!4 &4196135926608290 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1618801641097212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4505267426372662} + - {fileID: 4000011232835354} + m_Father: {fileID: 4673969480646744} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4494597059343800 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1242575248306392} + 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: 4000010761581198} + m_Father: {fileID: 4000011051854964} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4505267426372662 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1001509100487370} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.15, z: 0.1} + m_Children: [] + m_Father: {fileID: 4196135926608290} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!4 &4673969480646744 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1764245928179372} + 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: 4196135926608290} + m_Father: {fileID: 4000011051854964} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23000010806201822 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011842599384} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f5a180e78cba3b64d9cffa9c458a391d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23000013082547924 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010308724658} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 28bb0e600244c8a4181bcf69514c5716, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23558364266865106 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1001509100487370} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: b43e5571a9fe23946bf3070cdfceb1b0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33000010948628238 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011842599384} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000013136408546 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010308724658} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33479992987533812 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1001509100487370} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &114000013321266418 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010029692868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ab83c671fdbadc64099c66949ea544fb, type: 3} + m_Name: + m_EditorClassIdentifier: + touchpadDeadzone: {x: 0, y: 0} + includeHeadsetOffset: 1 + displayOnInvalidLocation: 1 + usePointerColor: 0 + indicatorVisibility: 0 + isActive: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab.meta new file mode 100644 index 0000000..bb07e86 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fae4d3c6bce5d264f966e5a4fb54fa3a +timeCreated: 1490221552 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs new file mode 100644 index 0000000..b95fe46 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs @@ -0,0 +1,170 @@ +// Pointer Direction Indicator|Prefabs|0100 +namespace VRTK +{ + using UnityEngine; + + /// + /// Event Payload + /// + /// this object + public delegate void PointerDirectionIndicatorEventHandler(object sender); + + /// + /// Adds a Pointer Direction Indicator to a pointer renderer and determines a given world rotation that can be used by a Destiantion Marker. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator` prefab into the scene hierarchy. + /// * Attach the `PointerDirectionIndicator` scene GameObejct to the `Direction Indicator` inspector parameter on a `VRTK_BasePointerRenderer` component. + /// + /// > This can be useful for rotating the play area upon teleporting to face the user in a new direction without expecting them to physically turn in the play space. + /// + public class VRTK_PointerDirectionIndicator : MonoBehaviour + { + /// + /// States of Direction Indicator Visibility. + /// + public enum VisibilityState + { + /// + /// Only shows the direction indicator when the pointer is active. + /// + OnWhenPointerActive, + /// + /// Only shows the direction indicator when the pointer cursor is visible or if the cursor is hidden and the pointer is active. + /// + AlwaysOnWithPointerCursor + } + + [Header("Control Settings")] + + [Tooltip("The touchpad axis needs to be above this deadzone for it to register as a valid touchpad angle.")] + public Vector2 touchpadDeadzone = Vector2.zero; + [Tooltip("The axis to use for the direction coordinates.")] + public VRTK_ControllerEvents.Vector2AxisAlias coordinateAxis = VRTK_ControllerEvents.Vector2AxisAlias.Touchpad; + + [Header("Appearance Settings")] + + [Tooltip("If this is checked then the reported rotation will include the offset of the headset rotation in relation to the play area.")] + public bool includeHeadsetOffset = true; + [Tooltip("If this is checked then the direction indicator will be displayed when the location is invalid.")] + public bool displayOnInvalidLocation = true; + [Tooltip("If this is checked then the pointer valid/invalid colours will also be used to change the colour of the direction indicator.")] + public bool usePointerColor = false; + [Tooltip("Determines when the direction indicator will be visible.")] + public VisibilityState indicatorVisibility = VisibilityState.OnWhenPointerActive; + + [HideInInspector] + public bool isActive = true; + + /// + /// Emitted when the object tooltip is reset. + /// + public event PointerDirectionIndicatorEventHandler PointerDirectionIndicatorPositionSet; + + protected VRTK_ControllerEvents controllerEvents; + protected Transform playArea; + protected Transform headset; + protected GameObject validLocation; + protected GameObject invalidLocation; + + public virtual void OnPointerDirectionIndicatorPositionSet() + { + if (PointerDirectionIndicatorPositionSet != null) + { + PointerDirectionIndicatorPositionSet(this); + } + } + + /// + /// The Initialize method is used to set up the direction indicator. + /// + /// The Controller Events script that is used to control the direction indicator's rotation. + public virtual void Initialize(VRTK_ControllerEvents events) + { + controllerEvents = events; + playArea = VRTK_DeviceFinder.PlayAreaTransform(); + headset = VRTK_DeviceFinder.HeadsetTransform(); + } + + /// + /// The SetPosition method is used to set the world position of the direction indicator. + /// + /// Determines if the direction indicator GameObject should be active or not. + /// The position to set the direction indicator to. + public virtual void SetPosition(bool active, Vector3 position) + { + transform.position = position; + gameObject.SetActive((isActive && active)); + OnPointerDirectionIndicatorPositionSet(); + } + + /// + /// The GetRotation method returns the current reported rotation of the direction indicator. + /// + /// The reported rotation of the direction indicator. + public virtual Quaternion GetRotation() + { + float offset = (includeHeadsetOffset ? playArea.eulerAngles.y - headset.eulerAngles.y : 0f); + return Quaternion.Euler(0f, transform.localEulerAngles.y + offset, 0f); + } + + /// + /// The SetMaterialColor method sets the current material colour on the direction indicator. + /// + /// The colour to update the direction indicatormaterial to. + /// Determines if the colour being set is based from a valid location or invalid location. + public virtual void SetMaterialColor(Color color, bool validity) + { + if (validLocation != null) + { + validLocation.SetActive(validity); + } + + if (invalidLocation != null) + { + invalidLocation.SetActive((displayOnInvalidLocation ? !validity : validity)); + } + + if (usePointerColor) + { + Renderer[] renderers = GetComponentsInChildren(); + for (int i = 0; i < renderers.Length; i++) + { + renderers[i].material.color = color; + } + } + } + + /// + /// The GetControllerEvents method returns the associated Controller Events script with the Pointer Direction Indicator script. + /// + /// The associated Controller Events script. + public virtual VRTK_ControllerEvents GetControllerEvents() + { + return controllerEvents; + } + + protected virtual void Awake() + { + validLocation = transform.Find("ValidLocation").gameObject; + invalidLocation = transform.Find("InvalidLocation").gameObject; + gameObject.SetActive(false); + } + + protected virtual void Update() + { + if (controllerEvents != null && controllerEvents.GetAxisState(coordinateAxis, SDK_BaseController.ButtonPressTypes.Touch) && !InsideDeadzone(controllerEvents.GetAxis(coordinateAxis))) + { + float touchpadAngle = controllerEvents.GetAxisAngle(coordinateAxis); + float angle = ((touchpadAngle > 180) ? touchpadAngle -= 360 : touchpadAngle) + headset.eulerAngles.y; + transform.localEulerAngles = new Vector3(0f, angle, 0f); + } + } + + protected virtual bool InsideDeadzone(Vector2 currentAxis) + { + return (currentAxis == Vector2.zero || (Mathf.Abs(currentAxis.x) <= touchpadDeadzone.x && Mathf.Abs(currentAxis.y) <= touchpadDeadzone.y)); + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs.meta new file mode 100644 index 0000000..376f48f --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab83c671fdbadc64099c66949ea544fb +timeCreated: 1492435334 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu.meta new file mode 100644 index 0000000..fab482e --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 78806666886250a49bef0a48c597087a +folderAsset: yes +timeCreated: 1507204395 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab new file mode 100644 index 0000000..4bc35a8 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab @@ -0,0 +1,283 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &122840 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22453742} + - component: {fileID: 22297788} + - component: {fileID: 11411068} + - component: {fileID: 11446826} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &128202 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 496472} + m_Layer: 0 + m_Name: RadialMenu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &173834 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22461082} + - component: {fileID: 22365358} + - component: {fileID: 11415230} + m_Layer: 5 + m_Name: RadialMenuUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &496472 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 128202} + m_LocalRotation: {x: 0.68186426, y: 0, z: 0, w: 0.73147875} + m_LocalPosition: {x: 0, y: 0.0093, z: -0.0494} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22461082} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 85.979, y: 0, z: 0} +--- !u!114 &11411068 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122840} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eaf1c68ccf50a478cbcb3f252e4be182, type: 3} + m_Name: + m_EditorClassIdentifier: + buttons: + - ButtonIcon: {fileID: 21300000, guid: e15fc9048ad6ddd47aedc4c27bb6946d, type: 3} + OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHold: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverEnter: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverExit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + - ButtonIcon: {fileID: 21300000, guid: e15fc9048ad6ddd47aedc4c27bb6946d, type: 3} + OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHold: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverEnter: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverExit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + - ButtonIcon: {fileID: 21300000, guid: e15fc9048ad6ddd47aedc4c27bb6946d, type: 3} + OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHold: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverEnter: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverExit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + - ButtonIcon: {fileID: 21300000, guid: e15fc9048ad6ddd47aedc4c27bb6946d, type: 3} + OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHold: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverEnter: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + OnHoverExit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + buttonPrefab: {fileID: 139096, guid: 6b84885a25431a84595e546913f79de8, type: 2} + generateOnAwake: 1 + buttonThickness: 0.5 + buttonColor: {r: 1, g: 1, b: 1, a: 1} + offsetDistance: 1 + offsetRotation: 0 + rotateIcons: 0 + iconMargin: 0 + isShown: 0 + hideOnRelease: 1 + executeOnUnclick: 0 + baseHapticStrength: 600 + deadZone: 0 + menuButtons: [] +--- !u!114 &11415230 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173834} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &11446826 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122840} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0dcac3928cb2f4d70a4ea75b4c2ae285, type: 3} + m_Name: + m_EditorClassIdentifier: + events: {fileID: 0} +--- !u!222 &22297788 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122840} +--- !u!223 &22365358 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173834} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &22453742 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122840} + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071067} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22461082} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 160} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22461082 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173834} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.0002, y: 0.0002, z: 0.0002} + m_Children: + - {fileID: 22453742} + m_Father: {fileID: 496472} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 128202} + m_IsPrefabParent: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab.meta new file mode 100644 index 0000000..91884f0 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5fe2f7f9d3e98a478d151422643620c +timeCreated: 1467174956 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton.meta new file mode 100644 index 0000000..4714a28 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a5ca9ac53232643f0943f955291dd452 +folderAsset: yes +timeCreated: 1467297629 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab new file mode 100644 index 0000000..621122c --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab @@ -0,0 +1,194 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &139096 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22484042} + - 222: {fileID: 22267164} + - 114: {fileID: 11429754} + - 114: {fileID: 11426504} + m_Layer: 0 + m_Name: Arc + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &194314 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22466108} + - 222: {fileID: 22248944} + - 114: {fileID: 11403046} + - 114: {fileID: 11467250} + m_Layer: 5 + m_Name: ButtonIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &11403046 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11426504 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139096} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.66176474, g: 0.66176474, b: 0.66176474, a: 1} + m_PressedColor: {r: 0.18382353, g: 0.18382353, b: 0.18382353, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11429754} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11429754 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139096} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e58c3c3223ac44f2c8ebf08b8efd9c3a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Texture: {fileID: 0} + fillPercent: 0 + fill: 0 + thickness: 0 + segments: 360 +--- !u!114 &11467250 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba1847ad7d9dd4cc6a7f836eb18f5434, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!222 &22248944 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194314} +--- !u!222 &22267164 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139096} +--- !u!224 &22466108 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194314} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22484042} + m_RootOrder: 0 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -29.3, y: 0} + m_SizeDelta: {x: 15, y: 15} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22484042 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139096} + 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: 22466108} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 139096} + m_IsPrefabParent: 1 diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab.meta new file mode 100644 index 0000000..17034ec --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b84885a25431a84595e546913f79de8 +timeCreated: 1467174956 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs new file mode 100644 index 0000000..9d8d3fa --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs @@ -0,0 +1,9 @@ +namespace VRTK +{ + using UnityEngine; + + public class RadialButtonIcon : MonoBehaviour + { + //Easier than getting tag, can't change through project settings + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs.meta new file mode 100644 index 0000000..f9faa04 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ba1847ad7d9dd4cc6a7f836eb18f5434 +timeCreated: 1492441168 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 90d37a8f8d07cfc4cbbc2aced31167ae, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs new file mode 100644 index 0000000..30cc6b3 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs @@ -0,0 +1,110 @@ +namespace VRTK +{ + using UnityEngine; + using UnityEngine.UI; + [ExecuteInEditMode] + public class UICircle : Graphic + { + [Range(0, 100)] + public int fillPercent; + public bool fill = true; + public int thickness = 5; + [Range(0, 360)] + public int segments = 360; + + [SerializeField] + protected Texture setTexture; + + public override Texture mainTexture + { + get + { + return (setTexture == null ? s_WhiteTexture : setTexture); + } + } + + // Texture to be used. + public Texture texture + { + get + { + return setTexture; + } + set + { + if (setTexture == value) + { + return; + } + setTexture = value; + SetVerticesDirty(); + SetMaterialDirty(); + } + } + + protected virtual void Update() + { + thickness = (int)Mathf.Clamp(thickness, 0, rectTransform.rect.width / 2); + } + + protected virtual UIVertex[] SetVbo(Vector2[] vertices, Vector2[] uvs) + { + UIVertex[] vbo = new UIVertex[4]; + for (int i = 0; i < vertices.Length; i++) + { + UIVertex vert = UIVertex.simpleVert; + vert.color = color; + vert.position = vertices[i]; + vert.uv0 = uvs[i]; + vbo[i] = vert; + } + return vbo; + } + + protected override void OnPopulateMesh(VertexHelper vh) + { + float outer = -rectTransform.pivot.x * rectTransform.rect.width; + float inner = -rectTransform.pivot.x * rectTransform.rect.width + thickness; + vh.Clear(); + + Vector2 prevX = Vector2.zero; + Vector2 prevY = Vector2.zero; + Vector2 uv0 = new Vector2(0, 0); + Vector2 uv1 = new Vector2(0, 1); + Vector2 uv2 = new Vector2(1, 1); + Vector2 uv3 = new Vector2(1, 0); + Vector2 pos0; + Vector2 pos1; + Vector2 pos2; + Vector2 pos3; + float f = (fillPercent / 100f); + float degrees = 360f / segments; + int fa = (int)((segments + 1) * f); + for (int i = -1 - (fa / 2); i < fa / 2 + 1; i++) + { + float rad = Mathf.Deg2Rad * (i * degrees); + float c = Mathf.Cos(rad); + float s = Mathf.Sin(rad); + uv0 = new Vector2(0, 1); + uv1 = new Vector2(1, 1); + uv2 = new Vector2(1, 0); + uv3 = new Vector2(0, 0); + pos0 = prevX; + pos1 = new Vector2(outer * c, outer * s); + if (fill) + { + pos2 = Vector2.zero; + pos3 = Vector2.zero; + } + else + { + pos2 = new Vector2(inner * c, inner * s); + pos3 = prevY; + } + prevX = pos1; + prevY = pos2; + vh.AddUIVertexQuad(SetVbo(new[] { pos0, pos1, pos2, pos3 }, new[] { uv0, uv1, uv2, uv3 })); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs.meta new file mode 100644 index 0000000..4b2c880 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e58c3c3223ac44f2c8ebf08b8efd9c3a +timeCreated: 1492441153 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 90d37a8f8d07cfc4cbbc2aced31167ae, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs new file mode 100644 index 0000000..588d8d3 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs @@ -0,0 +1,375 @@ +// Independent Radial Menu|Prefabs|0120 +namespace VRTK +{ + using UnityEngine; + using System.Collections.Generic; + using System.Collections; + + /// + /// Allows the RadialMenu to be anchored to any object, not just a controller. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/RadialMenu/RadialMenu` prefab as a child of the GameObject to associate the Radial Menu with. + /// * Position and scale the menu by adjusting the transform of the `RadialMenu` empty. + /// * Replace `VRTK_RadialMenuController` with `VRTK_IndependentRadialMenuController` that is located on the `RadialMenu/RadialMenuUI/Panel` GameObject. + /// * Ensure the parent object has the `VRTK_InteractableObject` script. + /// * Verify that `Is Usable` and `Hold Button to Use` are both checked on the `VRTK_InteractableObject`. + /// * Attach `VRTK_InteractTouch` and `VRTK_InteractUse` scripts to the objects that will activate the Radial Menu (e.g. the Controllers). + /// + /// + /// `VRTK/Examples/030_Controls_RadialTouchpadMenu` displays a radial menu for each controller. The left controller uses the `Hide On Release` variable, so it will only be visible if the left touchpad is being touched. It also uses the `Execute On Unclick` variable to delay execution until the touchpad button is unclicked. The example scene also contains a demonstration of anchoring the RadialMenu to an interactable cube instead of a controller. + /// + public class VRTK_IndependentRadialMenuController : VRTK_RadialMenuController + { + [Tooltip("If the RadialMenu is the child of an object with VRTK_InteractableObject attached, this will be automatically obtained. It can also be manually set.")] + public VRTK_InteractableObject eventsManager; + [Tooltip("Whether or not the script should dynamically add a SphereCollider to surround the menu.")] + public bool addMenuCollider = true; + [Tooltip("This times the size of the RadialMenu is the size of the collider.")] + [Range(0, 10)] + public float colliderRadiusMultiplier = 1.2f; + [Tooltip("If true, after a button is clicked, the RadialMenu will hide.")] + public bool hideAfterExecution = true; + [Tooltip("How far away from the object the menu should be placed, relative to the size of the RadialMenu.")] + [Range(-10, 10)] + public float offsetMultiplier = 1.1f; + [Tooltip("The object the RadialMenu should face towards. If left empty, it will automatically try to find the Headset Camera.")] + public GameObject rotateTowards; + + protected List interactingObjects = new List(); // Objects (controllers) that are either colliding with the menu or clicking the menu + protected HashSet collidingObjects = new HashSet(); // Just objects that are currently colliding with the menu or its parent + protected SphereCollider menuCollider; + protected Coroutine delayedSetColliderEnabledRoutine; + protected Vector3 desiredColliderCenter; + protected Quaternion initialRotation; + protected bool isClicked = false; + protected bool waitingToDisableCollider = false; + protected int counter = 2; + + /// + /// The UpdateEventsManager method is used to update the events within the menu controller. + /// + public virtual void UpdateEventsManager() + { + VRTK_InteractableObject newEventsManager = transform.GetComponentInParent(); + if (newEventsManager == null) + { + VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_IndependentRadialMenuController", "VRTK_InteractableObject", "eventsManager", "the parent")); + return; + } + else if (newEventsManager != eventsManager) // Changed managers + { + if (eventsManager != null) + { // Unsubscribe from the old events + OnDisable(); + } + + eventsManager = newEventsManager; + + // Subscribe to new events + OnEnable(); + + Destroy(menuCollider); + + // Reset to initial state + Initialize(); + } + } + + protected override void Initialize() + { + if (eventsManager == null) + { + initialRotation = transform.localRotation; + UpdateEventsManager(); + return; // If all goes well in updateEventsManager, it will then call Initialize again, skipping this if statement + } + + // Reset variables + interactingObjects.Clear(); + collidingObjects.Clear(); + if (delayedSetColliderEnabledRoutine != null) + { + StopCoroutine(delayedSetColliderEnabledRoutine); + } + isClicked = false; + waitingToDisableCollider = false; + counter = 2; + + if (transform.childCount == 0) // This means things haven't been properly initialized yet, will cause problems. + { + return; + } + + float radius = (transform.GetChild(0).GetComponent().rect.width / 2) * offsetMultiplier; + transform.localPosition = new Vector3(0, 0, radius); + + if (addMenuCollider) + { + gameObject.SetActive(false); // Just be sure it doesn't briefly flash + transform.localScale = Vector3.one; // If this were left at zero it would ruin the transformations below + + Quaternion startingRot = transform.rotation; + transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0)); // Rotation can mess up the calculations below + + SphereCollider collider = eventsManager.gameObject.AddComponent(); + + // All of the transformVector's are to account for the scaling of the radial menu's 'panel' and the scaling of the eventsManager parent object + collider.radius = (transform.GetChild(0).GetComponent().rect.width / 2) * colliderRadiusMultiplier * eventsManager.transform.InverseTransformVector(transform.GetChild(0).TransformVector(Vector3.one)).x; + collider.center = eventsManager.transform.InverseTransformVector(transform.position - eventsManager.transform.position); + + collider.isTrigger = true; + collider.enabled = false; // Want this to only activate when the menu is showing + + menuCollider = collider; + desiredColliderCenter = collider.center; + + transform.rotation = startingRot; + } + + if (!menu.isShown) + { + transform.localScale = Vector3.zero; + } + gameObject.SetActive(true); + } + + protected override void Awake() + { + menu = GetComponent(); + VRTK_SDKManager.AttemptAddBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void Start() + { + Initialize(); + } + + protected override void OnEnable() + { + if (eventsManager != null) + { + eventsManager.InteractableObjectUsed += ObjectClicked; + eventsManager.InteractableObjectUnused += ObjectUnClicked; + eventsManager.InteractableObjectTouched += ObjectTouched; + eventsManager.InteractableObjectUntouched += ObjectUntouched; + + menu.FireHapticPulse += AttemptHapticPulse; + } + else + { + Initialize(); + } + } + + protected override void OnDisable() + { + if (eventsManager != null) + { + eventsManager.InteractableObjectUsed -= ObjectClicked; + eventsManager.InteractableObjectUnused -= ObjectUnClicked; + eventsManager.InteractableObjectTouched -= ObjectTouched; + eventsManager.InteractableObjectUntouched -= ObjectUntouched; + + menu.FireHapticPulse -= AttemptHapticPulse; + } + } + + protected virtual void OnDestroy() + { + VRTK_SDKManager.AttemptRemoveBehaviourToToggleOnLoadedSetupChange(this); + } + + protected virtual void Update() + { + if (rotateTowards == null) // Backup + { + Transform headset = VRTK_DeviceFinder.HeadsetTransform(); + if (headset) + { + rotateTowards = headset.gameObject; + } + else + { + VRTK_Logger.Warn(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.COULD_NOT_FIND_OBJECT_FOR_ACTION, "IndependentRadialMenu", "an object", "rotate towards")); + } + } + + if (menu.isShown) + { + if (interactingObjects.Count > 0) // There's not really an event for the controller moving, so just update the position every frame + { + DoChangeAngle(CalculateAngle(interactingObjects[0]), this); + } + + if (rotateTowards != null) + { + transform.rotation = Quaternion.LookRotation((rotateTowards.transform.position - transform.position) * -1, Vector3.up) * initialRotation; // Face the target, but maintain initial rotation + } + } + } + + protected virtual void FixedUpdate() + { + if (waitingToDisableCollider) + { + if (counter == 0) + { + menuCollider.enabled = false; + waitingToDisableCollider = false; + + counter = 2; + } + else + { + counter--; + } + } + } + + protected override void AttemptHapticPulse(float strength) + { + if (interactingObjects.Count > 0) + { + VRTK_ControllerHaptics.TriggerHapticPulse(VRTK_ControllerReference.GetControllerReference(interactingObjects[0]), strength); + } + } + + protected virtual void ObjectClicked(object sender, InteractableObjectEventArgs e) + { + DoClickButton(sender); + isClicked = true; + + if (hideAfterExecution && !menu.executeOnUnclick) + { + ImmediatelyHideMenu(e); + } + } + + protected virtual void ObjectUnClicked(object sender, InteractableObjectEventArgs e) + { + DoUnClickButton(sender); + isClicked = false; + + if ((hideAfterExecution || (collidingObjects.Count == 0 && menu.hideOnRelease)) && menu.executeOnUnclick) + { + ImmediatelyHideMenu(e); + } + } + + protected virtual void ObjectTouched(object sender, InteractableObjectEventArgs e) + { + DoShowMenu(CalculateAngle(e.interactingObject), sender); + collidingObjects.Add(e.interactingObject); + VRTK_SharedMethods.AddListValue(interactingObjects, e.interactingObject, true); + if (addMenuCollider && menuCollider != null) + { + SetColliderState(true, e); + if (delayedSetColliderEnabledRoutine != null) + { + StopCoroutine(delayedSetColliderEnabledRoutine); + } + } + } + + protected virtual void ObjectUntouched(object sender, InteractableObjectEventArgs e) + { + collidingObjects.Remove(e.interactingObject); + if (((!menu.executeOnUnclick || !isClicked) && menu.hideOnRelease) || (Object)sender == this) + { + DoHideMenu(hideAfterExecution, sender); + interactingObjects.Remove(e.interactingObject); + if (addMenuCollider && menuCollider != null) + { + // In case there's any gap between the normal collider and the menuCollider, delay a bit. Cancelled if collider is re-entered + delayedSetColliderEnabledRoutine = StartCoroutine(DelayedSetColliderEnabled(false, 0.25f, e)); + } + } + } + + protected virtual TouchAngleDeflection CalculateAngle(GameObject interactingObject) + { + Vector3 controllerPosition = interactingObject.transform.position; + + Vector3 toController = controllerPosition - transform.position; + Vector3 projection = transform.position + Vector3.ProjectOnPlane(toController, transform.forward); + + float angle = 0; + angle = AngleSigned(transform.right * -1, projection - transform.position, transform.forward); + + // Ensure angle is positive + if (angle < 0) + { + angle += 360.0f; + } + + return new TouchAngleDeflection(angle, 1); + } + + protected virtual float AngleSigned(Vector3 v1, Vector3 v2, Vector3 n) + { + return Mathf.Atan2(Vector3.Dot(n, Vector3.Cross(v1, v2)), Vector3.Dot(v1, v2)) * Mathf.Rad2Deg; + } + + protected virtual void ImmediatelyHideMenu(InteractableObjectEventArgs e) + { + ObjectUntouched(this, e); + if (delayedSetColliderEnabledRoutine != null) + { + StopCoroutine(delayedSetColliderEnabledRoutine); + } + SetColliderState(false, e); // Don't want to wait for this + } + + protected virtual void SetColliderState(bool state, InteractableObjectEventArgs e) + { + if (addMenuCollider && menuCollider != null) + { + if (state) + { + menuCollider.enabled = true; + menuCollider.center = desiredColliderCenter; + } + else + { + bool should = true; + Collider[] colliders = eventsManager.GetComponents(); + Collider[] controllerColliders = e.interactingObject.GetComponent().ControllerColliders(); + for (int i = 0; i < colliders.Length; i++) + { + Collider collider = colliders[i]; + if (collider != menuCollider) + { + for (int j = 0; j < controllerColliders.Length; j++) + { + Collider controllerCollider = controllerColliders[j]; + if (controllerCollider.bounds.Intersects(collider.bounds)) + { + should = false; + } + } + } + } + + if (should) + { + menuCollider.center = new Vector3(100000000.0f, 100000000.0f, 100000000.0f); // This needs to be done to get OnTriggerExit() to fire, unfortunately + waitingToDisableCollider = true; // Need to give other things time to realize that they're not colliding with this anymore, so do it a couple FixedUpdates + } + else + { + menuCollider.enabled = false; + } + } + } + } + + protected virtual IEnumerator DelayedSetColliderEnabled(bool enabled, float delay, InteractableObjectEventArgs e) + { + yield return new WaitForSeconds(delay); + + SetColliderState(enabled, e); + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs.meta new file mode 100644 index 0000000..fac7fd2 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d8f1ec0a70304e945b4337f0e6a28178 +timeCreated: 1492441017 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs new file mode 100644 index 0000000..c578bee --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs @@ -0,0 +1,449 @@ +// Radial Menu|Prefabs|0110 +namespace VRTK +{ + using UnityEngine; + using System.Collections; + using UnityEngine.Events; + using System.Collections.Generic; + using UnityEngine.UI; + using UnityEngine.EventSystems; + + public struct TouchAngleDeflection + { + public float angle; + public float deflection; + + /// + /// Constructs an object to hold the angle and deflection of the user's touch on the touchpad + /// + /// The angle of the touch on the radial menu. + /// Deflection of the touch, where 0 is the centre and 1 is the edge. + public TouchAngleDeflection(float angle, float deflection) + { + this.angle = angle; + this.deflection = deflection; + } + } + + public delegate void HapticPulseEventHandler(float strength); + + /// + /// Provides a UI element into the world space that can be dropped into a Controller GameObject and used to create and use Radial Menus from the touchpad. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/RadialMenu/RadialMenu` prefab as a child of a Controller script alias GameObject. + /// + /// + /// `VRTK/Examples/030_Controls_RadialTouchpadMenu` displays a radial menu for each controller. The left controller uses the `Hide On Release` variable, so it will only be visible if the left touchpad is being touched. It also uses the `Execute On Unclick` variable to delay execution until the touchpad button is unclicked. The example scene also contains a demonstration of anchoring the RadialMenu to an interactable cube instead of a controller. + /// + [ExecuteInEditMode] + public class VRTK_RadialMenu : MonoBehaviour + { + [System.Serializable] + public class RadialMenuButton + { + public Sprite ButtonIcon; + public UnityEvent OnClick = new UnityEvent(); + public UnityEvent OnHold = new UnityEvent(); + public UnityEvent OnHoverEnter = new UnityEvent(); + public UnityEvent OnHoverExit = new UnityEvent(); + } + + public enum ButtonEvent + { + hoverOn, + hoverOff, + click, + unclick + } + + [Tooltip("An array of Buttons that define the interactive buttons required to be displayed as part of the radial menu.")] + public List buttons = new List(); + [Tooltip("The base for each button in the menu, by default set to a dynamic circle arc that will fill up a portion of the menu.")] + public GameObject buttonPrefab; + [Tooltip("If checked, then the buttons will be auto generated on awake.")] + public bool generateOnAwake = true; + [Tooltip("Percentage of the menu the buttons should fill, 1.0 is a pie slice, 0.1 is a thin ring.")] + [Range(0f, 1f)] + public float buttonThickness = 0.5f; + [Tooltip("The background colour of the buttons, default is white.")] + public Color buttonColor = Color.white; + [Tooltip("The distance the buttons should move away from the centre. This creates space between the individual buttons.")] + public float offsetDistance = 1; + [Tooltip("The additional rotation of the Radial Menu.")] + [Range(0, 359)] + public float offsetRotation; + [Tooltip("Whether button icons should rotate according to their arc or be vertical compared to the controller.")] + public bool rotateIcons; + [Tooltip("The margin in pixels that the icon should keep within the button.")] + public float iconMargin; + [Tooltip("Whether the buttons are shown")] + public bool isShown; + [Tooltip("Whether the buttons should be visible when not in use.")] + public bool hideOnRelease; + [Tooltip("Whether the button action should happen when the button is released, as opposed to happening immediately when the button is pressed.")] + public bool executeOnUnclick; + [Tooltip("The base strength of the haptic pulses when the selected button is changed, or a button is pressed. Set to zero to disable.")] + [Range(0, 1)] + public float baseHapticStrength; + [Tooltip("The dead zone in the middle of the dial where the menu does not consider a button is selected. Set to zero to disable.")] + [Range(0, 1)] + public float deadZone = 0; + + public event HapticPulseEventHandler FireHapticPulse; + + //Has to be public to keep state from editor -> play mode? + [Tooltip("The actual GameObjects that make up the radial menu.")] + public List menuButtons = new List(); + + protected int currentHover = -1; + protected int currentPress = -1; + protected Coroutine tweenMenuScaleRoutine; + + /// + /// The HoverButton method is used to set the button hover at a given angle. + /// + /// The angle on the radial menu. + [System.Obsolete("`VRTK_RadialMenu.HoverButton(float)` has been replaced with `VRTK_RadialMenu.HoverButton(TouchAngleDeflection)`. This method will be removed in a future version of VRTK.")] + public virtual void HoverButton(float angle) + { + HoverButton(new TouchAngleDeflection(angle, 1)); + } + + /// + /// The HoverButton method is used to set the button hover at a given angle and deflection. + /// + /// The angle and deflection on the radial menu. + public virtual void HoverButton(TouchAngleDeflection givenTouchAngleDeflection) + { + InteractButton(givenTouchAngleDeflection, ButtonEvent.hoverOn); + } + + /// + /// The ClickButton method is used to set the button click at a given angle. + /// + /// The angle on the radial menu. + [System.Obsolete("`VRTK_RadialMenu.ClickButton(float)` has been replaced with `VRTK_RadialMenu.ClickButton(TouchAngleDeflection)`. This method will be removed in a future version of VRTK.")] + public virtual void ClickButton(float angle) + { + ClickButton(new TouchAngleDeflection(angle, 1)); + } + + /// + /// The ClickButton method is used to set the button click at a given angle and deflection. + /// + /// The angle and deflection on the radial menu. + public virtual void ClickButton(TouchAngleDeflection givenTouchAngleDeflection) + { + InteractButton(givenTouchAngleDeflection, ButtonEvent.click); + } + + /// + /// The UnClickButton method is used to set the button unclick at a given angle. + /// + /// The angle on the radial menu. + [System.Obsolete("`VRTK_RadialMenu.UnClickButton(float)` has been replaced with `VRTK_RadialMenu.UnClickButton(TouchAngleDeflection)`. This method will be removed in a future version of VRTK.")] + public virtual void UnClickButton(float angle) + { + UnClickButton(new TouchAngleDeflection(angle, 1)); + } + + /// + /// The UnClickButton method is used to set the button unclick at a given angle and deflection. + /// + /// The angle and deflection on the radial menu. + public virtual void UnClickButton(TouchAngleDeflection givenTouchAngleDeflection) + { + InteractButton(givenTouchAngleDeflection, ButtonEvent.unclick); + } + + /// + /// The ToggleMenu method is used to show or hide the radial menu. + /// + public virtual void ToggleMenu() + { + if (isShown) + { + HideMenu(true); + } + else + { + ShowMenu(); + } + } + + /// + /// The StopTouching method is used to stop touching the menu. + /// + public virtual void StopTouching() + { + if (currentHover != -1) + { + PointerEventData pointer = new PointerEventData(EventSystem.current); + ExecuteEvents.Execute(menuButtons[currentHover], pointer, ExecuteEvents.pointerExitHandler); + buttons[currentHover].OnHoverExit.Invoke(); + currentHover = -1; + } + } + + /// + /// The ShowMenu method is used to show the menu. + /// + public virtual void ShowMenu() + { + if (!isShown) + { + isShown = true; + InitTweenMenuScale(isShown); + } + } + + /// + /// The GetButton method is used to get a button from the menu. + /// + /// The id of the button to retrieve. + /// The found radial menu button. + public virtual RadialMenuButton GetButton(int id) + { + if (id < buttons.Count) + { + return buttons[id]; + } + return null; + } + + /// + /// The HideMenu method is used to hide the menu. + /// + /// If true then the menu is always hidden. + public virtual void HideMenu(bool force) + { + if (isShown && (hideOnRelease || force)) + { + isShown = false; + InitTweenMenuScale(isShown); + } + } + + /// + /// The RegenerateButtons method creates all the button arcs and populates them with desired icons. + /// + public void RegenerateButtons() + { + RemoveAllButtons(); + for (int i = 0; i < buttons.Count; i++) + { + // Initial placement/instantiation + GameObject newButton = Instantiate(buttonPrefab); + newButton.transform.SetParent(transform); + newButton.transform.localScale = Vector3.one; + newButton.GetComponent().offsetMax = Vector2.zero; + newButton.GetComponent().offsetMin = Vector2.zero; + + //Setup button arc + UICircle circle = newButton.GetComponent(); + if (buttonThickness == 1f) + { + circle.fill = true; + } + else + { + circle.thickness = (int)(buttonThickness * (GetComponent().rect.width / 2f)); + } + int fillPerc = (int)(100f / buttons.Count); + circle.fillPercent = fillPerc; + circle.color = buttonColor; + + //Final placement/rotation + float angle = ((360f / buttons.Count) * i) + offsetRotation; + newButton.transform.localEulerAngles = new Vector3(0, 0, angle); + newButton.layer = 4; //UI Layer + newButton.transform.localPosition = Vector3.zero; + if (circle.fillPercent < 55) + { + float angleRad = (angle * Mathf.PI) / 180f; + Vector2 angleVector = new Vector2(-Mathf.Cos(angleRad), -Mathf.Sin(angleRad)); + newButton.transform.localPosition += (Vector3)angleVector * offsetDistance; + } + + //Place and populate Button Icon + GameObject buttonIcon = newButton.GetComponentInChildren().gameObject; + if (buttons[i].ButtonIcon == null) + { + buttonIcon.SetActive(false); + } + else + { + buttonIcon.GetComponent().sprite = buttons[i].ButtonIcon; + buttonIcon.transform.localPosition = new Vector2(-1 * ((newButton.GetComponent().rect.width / 2f) - (circle.thickness / 2f)), 0); + //Min icon size from thickness and arc + float scale1 = Mathf.Abs(circle.thickness); + float absButtonIconXPos = Mathf.Abs(buttonIcon.transform.localPosition.x); + float bAngle = (359f * circle.fillPercent * 0.01f * Mathf.PI) / 180f; + float scale2 = (absButtonIconXPos * 2f * Mathf.Sin(bAngle / 2f)); + if (circle.fillPercent > 24) //Scale calc doesn't work for > 90 degrees + { + scale2 = float.MaxValue; + } + + float iconScale = Mathf.Min(scale1, scale2) - iconMargin; + buttonIcon.GetComponent().sizeDelta = new Vector2(iconScale, iconScale); + //Rotate icons all vertically if desired + if (!rotateIcons) + { + buttonIcon.transform.eulerAngles = GetComponentInParent().transform.eulerAngles; + } + } + VRTK_SharedMethods.AddListValue(menuButtons, newButton, true); + } + } + + /// + /// The AddButton method is used to add a new button to the menu. + /// + /// The button to add. + public void AddButton(RadialMenuButton newButton) + { + VRTK_SharedMethods.AddListValue(buttons, newButton, true); + RegenerateButtons(); + } + + protected virtual void Awake() + { + if (Application.isPlaying) + { + if (!isShown) + { + transform.localScale = Vector3.zero; + } + if (generateOnAwake) + { + RegenerateButtons(); + } + } + } + + protected virtual void Update() + { + //Keep track of pressed button and constantly invoke Hold event + if (currentPress != -1) + { + buttons[currentPress].OnHold.Invoke(); + } + } + + //Turns and Angle and Event type into a button action + protected virtual void InteractButton(TouchAngleDeflection givenTouchAngleDeflection, ButtonEvent evt) //Can't pass ExecuteEvents as parameter? Unity gives error + { + //Get button ID from angle + float buttonAngle = 360f / buttons.Count; //Each button is an arc with this angle + givenTouchAngleDeflection.angle = VRTK_SharedMethods.Mod((givenTouchAngleDeflection.angle + -offsetRotation), 360f); //Offset the touch coordinate with our offset + + int buttonID = (int)VRTK_SharedMethods.Mod(((givenTouchAngleDeflection.angle + (buttonAngle / 2f)) / buttonAngle), buttons.Count); //Convert angle into ButtonID (This is the magic) + PointerEventData pointer = new PointerEventData(EventSystem.current); //Create a new EventSystem (UI) Event + + if (givenTouchAngleDeflection.deflection <= deadZone) + { + //No button selected. Use -1 to represent this + buttonID = -1; + } + + //If we changed buttons while moving, un-hover and un-click the last button we were on + if (currentHover != buttonID && currentHover != -1) + { + ExecuteEvents.Execute(menuButtons[currentHover], pointer, ExecuteEvents.pointerUpHandler); + ExecuteEvents.Execute(menuButtons[currentHover], pointer, ExecuteEvents.pointerExitHandler); + buttons[currentHover].OnHoverExit.Invoke(); + if (executeOnUnclick && currentPress != -1 && buttonID != -1) + { + ExecuteEvents.Execute(menuButtons[buttonID], pointer, ExecuteEvents.pointerDownHandler); + AttempHapticPulse(baseHapticStrength * 1.666f); + } + } + if (evt == ButtonEvent.click) //Click button if click, and keep track of current press (executes button action) + { + if (buttonID != -1) + { + ExecuteEvents.Execute(menuButtons[buttonID], pointer, ExecuteEvents.pointerDownHandler); + } + currentPress = buttonID; + if (!executeOnUnclick && buttonID != -1) + { + buttons[buttonID].OnClick.Invoke(); + AttempHapticPulse(baseHapticStrength * 2.5f); + } + } + else if (evt == ButtonEvent.unclick) //Clear press id to stop invoking OnHold method (hide menu) + { + if (buttonID != -1) + { + ExecuteEvents.Execute(menuButtons[buttonID], pointer, ExecuteEvents.pointerUpHandler); + } + currentPress = -1; + if (executeOnUnclick && buttonID != -1) + { + AttempHapticPulse(baseHapticStrength * 2.5f); + buttons[buttonID].OnClick.Invoke(); + } + } + else if (evt == ButtonEvent.hoverOn && currentHover != buttonID && buttonID != -1) // Show hover UI event (darken button etc). Show menu + { + ExecuteEvents.Execute(menuButtons[buttonID], pointer, ExecuteEvents.pointerEnterHandler); + buttons[buttonID].OnHoverEnter.Invoke(); + AttempHapticPulse(baseHapticStrength); + } + currentHover = buttonID; //Set current hover ID, need this to un-hover if selected button changes + } + + + protected virtual void InitTweenMenuScale(bool isShown) + { + if (tweenMenuScaleRoutine != null) + { + StopCoroutine(tweenMenuScaleRoutine); + } + tweenMenuScaleRoutine = StartCoroutine(TweenMenuScale(isShown)); + } + + //Simple tweening for menu, scales linearly from 0 to 1 and 1 to 0 + protected virtual IEnumerator TweenMenuScale(bool show) + { + float targetScale = 0f; + Vector3 Dir = -1 * Vector3.one; + if (show) + { + targetScale = 1; + Dir = Vector3.one; + } + int i = 0; //Sanity check for infinite loops + while (i < 250 && ((show && transform.localScale.x < targetScale) || (!show && transform.localScale.x > targetScale))) + { + transform.localScale += Dir * Time.deltaTime * 4f; //Tweening function - currently 0.25 second linear + yield return true; + i++; + } + transform.localScale = Dir * targetScale; + } + + protected virtual void AttempHapticPulse(float strength) + { + if (strength > 0f && FireHapticPulse != null) + { + FireHapticPulse(strength); + } + } + + protected virtual void RemoveAllButtons() + { + if (menuButtons != null) + { + for (int i = 0; i < menuButtons.Count; i++) + { + DestroyImmediate(menuButtons[i]); + } + menuButtons.Clear(); + } + } + } +} \ No newline at end of file diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs.meta new file mode 100644 index 0000000..bb88807 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eaf1c68ccf50a478cbcb3f252e4be182 +timeCreated: 1492441030 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs new file mode 100644 index 0000000..f0e9174 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs @@ -0,0 +1,136 @@ +namespace VRTK +{ + using UnityEngine; + + [RequireComponent(typeof(VRTK_RadialMenu))] + public class VRTK_RadialMenuController : MonoBehaviour + { + [Tooltip("The controller to listen to the controller events on.")] + public VRTK_ControllerEvents events; + + protected VRTK_RadialMenu menu; + protected TouchAngleDeflection currentTad; //Keep track of angle and deflection for when we click + protected bool touchpadTouched; + + protected virtual void Awake() + { + menu = GetComponent(); + + Initialize(); + } + + protected virtual void Initialize() + { + if (events == null) + { + events = GetComponentInParent(); + } + } + + protected virtual void OnEnable() + { + if (events == null) + { + VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "RadialMenuController", "VRTK_ControllerEvents", "events", "the parent")); + return; + } + else + { + events.TouchpadPressed += new ControllerInteractionEventHandler(DoTouchpadClicked); + events.TouchpadReleased += new ControllerInteractionEventHandler(DoTouchpadUnclicked); + events.TouchpadTouchStart += new ControllerInteractionEventHandler(DoTouchpadTouched); + events.TouchpadTouchEnd += new ControllerInteractionEventHandler(DoTouchpadUntouched); + events.TouchpadAxisChanged += new ControllerInteractionEventHandler(DoTouchpadAxisChanged); + + menu.FireHapticPulse += new HapticPulseEventHandler(AttemptHapticPulse); + } + } + + protected virtual void OnDisable() + { + events.TouchpadPressed -= new ControllerInteractionEventHandler(DoTouchpadClicked); + events.TouchpadReleased -= new ControllerInteractionEventHandler(DoTouchpadUnclicked); + events.TouchpadTouchStart -= new ControllerInteractionEventHandler(DoTouchpadTouched); + events.TouchpadTouchEnd -= new ControllerInteractionEventHandler(DoTouchpadUntouched); + events.TouchpadAxisChanged -= new ControllerInteractionEventHandler(DoTouchpadAxisChanged); + + menu.FireHapticPulse -= new HapticPulseEventHandler(AttemptHapticPulse); + } + + protected virtual void DoClickButton(object sender = null) // The optional argument reduces the need for middleman functions in subclasses whose events likely pass object sender + { + menu.ClickButton(currentTad); + } + + protected virtual void DoUnClickButton(object sender = null) + { + menu.UnClickButton(currentTad); + } + + protected virtual void DoShowMenu(TouchAngleDeflection initialTad, object sender = null) + { + menu.ShowMenu(); + DoChangeAngle(initialTad); // Needed to register initial touch position before the touchpad axis actually changes + } + + protected virtual void DoHideMenu(bool force, object sender = null) + { + menu.StopTouching(); + menu.HideMenu(force); + } + + protected virtual void DoChangeAngle(TouchAngleDeflection givenTouchAngleDeflection, object sender = null) + { + currentTad = givenTouchAngleDeflection; + + menu.HoverButton(currentTad); + } + + protected virtual void AttemptHapticPulse(float strength) + { + if (events) + { + VRTK_ControllerHaptics.TriggerHapticPulse(VRTK_ControllerReference.GetControllerReference(events.gameObject), strength); + } + } + + protected virtual void DoTouchpadClicked(object sender, ControllerInteractionEventArgs e) + { + DoClickButton(); + } + + protected virtual void DoTouchpadUnclicked(object sender, ControllerInteractionEventArgs e) + { + DoUnClickButton(); + } + + protected virtual void DoTouchpadTouched(object sender, ControllerInteractionEventArgs e) + { + touchpadTouched = true; + DoShowMenu(CalculateAngle(e)); + } + + protected virtual void DoTouchpadUntouched(object sender, ControllerInteractionEventArgs e) + { + touchpadTouched = false; + DoHideMenu(false); + } + + //Touchpad finger moved position + protected virtual void DoTouchpadAxisChanged(object sender, ControllerInteractionEventArgs e) + { + if (touchpadTouched) + { + DoChangeAngle(CalculateAngle(e)); + } + } + + protected virtual TouchAngleDeflection CalculateAngle(ControllerInteractionEventArgs e) + { + TouchAngleDeflection touchAngleDeflection = new TouchAngleDeflection(); + touchAngleDeflection.angle = 360 - e.touchpadAngle; + touchAngleDeflection.deflection = e.touchpadAxis.magnitude; + return touchAngleDeflection; + } + } +} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs.meta b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs.meta new file mode 100644 index 0000000..7fd6237 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0dcac3928cb2f4d70a4ea75b4c2ae285 +timeCreated: 1492441043 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 27d721ae718e0424a8bdcfb6f4708f3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher.meta b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher.meta new file mode 100644 index 0000000..5a2c5b1 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7efdcfd81e439574fb985fd7fac2585a +folderAsset: yes +timeCreated: 1507204821 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab new file mode 100644 index 0000000..02ae669 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab @@ -0,0 +1,1436 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012696903278} + m_IsPrefabParent: 1 +--- !u!1 &1000010011952744 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010358937380} + - component: {fileID: 222000013374409508} + - component: {fileID: 114000010622063904} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010438334858 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010031187690} + - component: {fileID: 222000011511994886} + - component: {fileID: 114000013248800288} + - component: {fileID: 114000011034703444} + m_Layer: 5 + m_Name: SelectionPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010541637152 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010901609716} + - component: {fileID: 222000010753333324} + - component: {fileID: 114000011167197898} + m_Layer: 5 + m_Name: Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010736090628 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010535295132} + - component: {fileID: 222000011426416066} + - component: {fileID: 114000011236565578} + - component: {fileID: 114000012116500690} + - component: {fileID: 114000011821778238} + - component: {fileID: 114000010234673076} + m_Layer: 5 + m_Name: ChooseButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010749110486 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012326194302} + - component: {fileID: 222000010873136986} + - component: {fileID: 114000013749382802} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011080639736 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012576896984} + - component: {fileID: 20000013338868638} + - component: {fileID: 124000011415618170} + - component: {fileID: 92000011320176878} + - component: {fileID: 81000012766586276} + m_Layer: 5 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000011333187360 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012623161658} + - component: {fileID: 222000010404840936} + - component: {fileID: 114000011959739478} + - component: {fileID: 114000012393839466} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011510196860 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012747905524} + - component: {fileID: 222000013415965866} + - component: {fileID: 114000013752538710} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011660833422 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014004937398} + - component: {fileID: 114000012722475654} + - component: {fileID: 114000013760325250} + m_Layer: 5 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000011720636746 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012484682510} + - component: {fileID: 222000011581380168} + - component: {fileID: 114000012300653702} + - component: {fileID: 114000011425340332} + m_Layer: 5 + m_Name: StatusPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011744242050 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012504011746} + - component: {fileID: 222000014075910912} + - component: {fileID: 114000010521095034} + - component: {fileID: 114000011101533536} + - component: {fileID: 114000012750106880} + - component: {fileID: 114000010769078368} + m_Layer: 5 + m_Name: SwitchButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012262870128 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000012859001416} + - component: {fileID: 222000012121516204} + - component: {fileID: 114000013156206732} + m_Layer: 5 + m_Name: CurrentText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012696903278 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013127654674} + - component: {fileID: 223000012118441392} + - component: {fileID: 114000011614130756} + - component: {fileID: 114000011461642442} + - component: {fileID: 114000010769450900} + m_Layer: 5 + m_Name: SDKSetupSwitcher + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012916834440 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010722234208} + - component: {fileID: 222000011538085612} + - component: {fileID: 114000013974119414} + - component: {fileID: 114000013813917210} + - component: {fileID: 114000011787426032} + - component: {fileID: 114000010563726824} + m_Layer: 5 + m_Name: CancelButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013208101350 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011219526448} + - component: {fileID: 222000012188933520} + - component: {fileID: 114000012484424854} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000012576896984 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011080639736} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000013127654674} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014004937398 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011660833422} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000013127654674} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20000013338868638 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011080639736} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!81 &81000012766586276 +AudioListener: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011080639736} + m_Enabled: 1 +--- !u!92 &92000011320176878 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011080639736} + m_Enabled: 1 +--- !u!114 &114000010234673076 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010736090628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 +--- !u!114 &114000010521095034 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011744242050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000010563726824 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012916834440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 +--- !u!114 &114000010622063904 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010011952744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Cancel +--- !u!114 &114000010769078368 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011744242050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 +--- !u!114 &114000010769450900 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012696903278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bbef415ca4404081ab7abdd88f0a7f2e, type: 3} + m_Name: + m_EditorClassIdentifier: + fallbackCamera: {fileID: 20000013338868638} + eventSystem: {fileID: 114000012722475654} + currentText: {fileID: 114000013156206732} + statusPanel: {fileID: 224000012484682510} + selectionPanel: {fileID: 224000010031187690} + switchButton: {fileID: 114000011101533536} + cancelButton: {fileID: 114000013813917210} + chooseButton: {fileID: 114000012116500690} + playareaSync: 1 +--- !u!114 &114000011034703444 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010438334858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 +--- !u!114 &114000011101533536 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011744242050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114000010521095034} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114000011167197898 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010541637152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Select an SDK Setup +--- !u!114 &114000011236565578 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010736090628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000011425340332 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011720636746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 +--- !u!114 &114000011461642442 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012696903278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114000011614130756 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012696903278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114000011787426032 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012916834440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 3 + m_Bottom: 3 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114000011821778238 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010736090628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 3 + m_Bottom: 3 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114000011959739478 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011333187360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000012116500690 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010736090628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114000011236565578} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114000012300653702 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011720636746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 3 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114000012393839466 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011333187360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 1 + m_Spacing: 3 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114000012484424854 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013208101350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 10 + m_Top: 10 + m_Bottom: 0 + m_ChildAlignment: 2 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114000012722475654 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011660833422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!114 &114000012750106880 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011744242050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 3 + m_Bottom: 3 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114000013156206732 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012262870128} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Sample SDK Setup +--- !u!114 &114000013248800288 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010438334858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 3 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114000013749382802 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010749110486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Switch SDK Setup +--- !u!114 &114000013752538710 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011510196860} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Sample SDK Setup +--- !u!114 &114000013760325250 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011660833422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &114000013813917210 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012916834440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_HighlightedColor: {r: 0.74509805, g: 0.74509805, b: 0.74509805, a: 1} + m_PressedColor: {r: 0.5686275, g: 0.5686275, b: 0.5686275, a: 1} + m_DisabledColor: {r: 0.5686275, g: 0.5686275, b: 0.5686275, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114000013974119414} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114000013974119414 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012916834440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!124 &124000011415618170 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011080639736} + m_Enabled: 1 +--- !u!222 &222000010404840936 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011333187360} +--- !u!222 &222000010753333324 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010541637152} +--- !u!222 &222000010873136986 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010749110486} +--- !u!222 &222000011426416066 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010736090628} +--- !u!222 &222000011511994886 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010438334858} +--- !u!222 &222000011538085612 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012916834440} +--- !u!222 &222000011581380168 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011720636746} +--- !u!222 &222000012121516204 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012262870128} +--- !u!222 &222000012188933520 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013208101350} +--- !u!222 &222000013374409508 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010011952744} +--- !u!222 &222000013415965866 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011510196860} +--- !u!222 &222000014075910912 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011744242050} +--- !u!223 &223000012118441392 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012696903278} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224000010031187690 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010438334858} + 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: 224000010901609716} + - {fileID: 224000010722234208} + - {fileID: 224000010535295132} + m_Father: {fileID: 224000012623161658} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010358937380 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010011952744} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000010722234208} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010535295132 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010736090628} + 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: 224000012747905524} + m_Father: {fileID: 224000010031187690} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010722234208 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012916834440} + 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: 224000010358937380} + m_Father: {fileID: 224000010031187690} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010901609716 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010541637152} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000010031187690} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011219526448 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013208101350} + 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: 224000012623161658} + m_Father: {fileID: 224000013127654674} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012326194302 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010749110486} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012504011746} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012484682510 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011720636746} + 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: 224000012859001416} + - {fileID: 224000012504011746} + m_Father: {fileID: 224000012623161658} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012504011746 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011744242050} + 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: 224000012326194302} + m_Father: {fileID: 224000012484682510} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012623161658 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011333187360} + 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: 224000012484682510} + - {fileID: 224000010031187690} + m_Father: {fileID: 224000011219526448} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012747905524 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011510196860} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000010535295132} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000012859001416 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012262870128} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000012484682510} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013127654674 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012696903278} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000012576896984} + - {fileID: 4000014004937398} + - {fileID: 224000011219526448} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab.meta b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab.meta new file mode 100644 index 0000000..16dd864 --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d46cf6b1ad9d84a48ae7548a2a6b41b3 +timeCreated: 1490469362 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/VRTK_SDKSetupSwitcher.cs b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/VRTK_SDKSetupSwitcher.cs new file mode 100644 index 0000000..4dfd68a --- /dev/null +++ b/Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/VRTK_SDKSetupSwitcher.cs @@ -0,0 +1,188 @@ +// SDK Setup Switcher|Prefabs|0010 +namespace VRTK +{ + using UnityEngine; + using UnityEngine.EventSystems; + using UnityEngine.UI; + using System; + using System.Collections.Generic; + using System.Linq; + + /// + /// Provides a GUI overlay to allow switching the loaded VRTK_SDKSetup of the the current VRTK_SDKManager. + /// + /// + /// **Prefab Usage:** + /// * Place the `VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher` prefab into the scene hierarchy. + /// + public class VRTK_SDKSetupSwitcher : MonoBehaviour + { + [Header("Fallback Objects")] + + [SerializeField] + protected Camera fallbackCamera; + [SerializeField] + protected EventSystem eventSystem; + + [Header("Object References")] + + [SerializeField] + protected Text currentText; + [SerializeField] + protected RectTransform statusPanel; + [SerializeField] + protected RectTransform selectionPanel; + + [SerializeField] + protected Button switchButton; + [SerializeField] + protected Button cancelButton; + [SerializeField] + protected Button chooseButton; + [SerializeField] + protected bool playareaSync = true; + + protected enum ViewingState + { + Status, + Selection + } + + protected readonly List chooseButtonGameObjects = new List(); + protected Transform currentPlayarea; + + protected virtual void Awake() + { + fallbackCamera.gameObject.SetActive(false); + eventSystem.gameObject.SetActive(false); + chooseButton.gameObject.SetActive(false); + } + + protected virtual void OnEnable() + { + VRTK_SDKManager.SubscribeLoadedSetupChanged(OnLoadedSetupChanged); + + switchButton.onClick.AddListener(OnSwitchButtonClick); + cancelButton.onClick.AddListener(OnCancelButtonClick); + + Show(ViewingState.Status); + } + + protected virtual void OnDisable() + { + VRTK_SDKManager.UnsubscribeLoadedSetupChanged(OnLoadedSetupChanged); + + switchButton.onClick.RemoveListener(OnSwitchButtonClick); + cancelButton.onClick.RemoveListener(OnCancelButtonClick); + + Show(ViewingState.Status); + } + + protected virtual void OnLoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e) + { + Show(ViewingState.Status); + if (playareaSync && currentPlayarea != null) + { + Transform newPlayarea = VRTK_DeviceFinder.PlayAreaTransform(); + newPlayarea.transform.position = currentPlayarea.transform.position; + newPlayarea.transform.rotation = currentPlayarea.transform.rotation; + VRTK_SharedMethods.SetGlobalScale(newPlayarea, currentPlayarea.transform.lossyScale); + } + currentPlayarea = VRTK_DeviceFinder.PlayAreaTransform(); + } + + protected virtual void OnSwitchButtonClick() + { + Show(ViewingState.Selection); + } + + protected virtual void OnCancelButtonClick() + { + Show(ViewingState.Status); + } + + protected virtual void Show(ViewingState viewingState) + { + switch (viewingState) + { + case ViewingState.Status: + RemoveCreatedChooseButtons(); + UpdateCurrentText(); + selectionPanel.gameObject.SetActive(false); + statusPanel.gameObject.SetActive(true); + + break; + case ViewingState.Selection: + AddSelectionButtons(); + selectionPanel.gameObject.SetActive(true); + statusPanel.gameObject.SetActive(false); + + break; + default: + VRTK_Logger.Fatal(new ArgumentOutOfRangeException("viewingState", viewingState, null)); + return; + } + + bool isAnyOtherCameraUsed = VRTK_SDKManager.GetAllSDKSetups().Any(setup => setup != null && setup.gameObject.activeSelf) + || VRTK_DeviceFinder.HeadsetCamera() != null; + fallbackCamera.gameObject.SetActive(!isAnyOtherCameraUsed); + eventSystem.gameObject.SetActive(EventSystem.current == null || EventSystem.current == eventSystem); + } + + protected virtual void UpdateCurrentText() + { + VRTK_SDKSetup loadedSetup = VRTK_SDKManager.GetLoadedSDKSetup(); + currentText.text = (loadedSetup == null ? "None" : loadedSetup.name); + } + + protected virtual void AddSelectionButtons() + { + if (VRTK_SDKManager.GetLoadedSDKSetup() != null) + { + GameObject chooseNoneButton = Instantiate(chooseButton.gameObject, chooseButton.transform.parent); + chooseNoneButton.GetComponentInChildren().text = "None"; + chooseNoneButton.name = "ChooseNoneButton"; + chooseNoneButton.SetActive(true); + + chooseNoneButton.GetComponent