From 11a02a7b6216c1641eece100d2e62cdb182cb04e Mon Sep 17 00:00:00 2001 From: Dan Duggan Date: Fri, 31 May 2019 11:06:33 -0400 Subject: [PATCH] Copied over VSDK files to GitHub repo --- .editorconfig | 8 + Assets/VIRTUOSO.meta | 10 + Assets/VIRTUOSO/Config.meta | 8 + Assets/VIRTUOSO/Config/actions.json | 194 + Assets/VIRTUOSO/Config/actions.json.meta | 7 + .../Config/binding_holographic_hmd.json | 27 + .../Config/binding_holographic_hmd.json.meta | 7 + Assets/VIRTUOSO/Config/binding_rift.json | 27 + Assets/VIRTUOSO/Config/binding_rift.json.meta | 7 + Assets/VIRTUOSO/Config/binding_vive.json | 27 + Assets/VIRTUOSO/Config/binding_vive.json.meta | 7 + Assets/VIRTUOSO/Config/binding_vive_pro.json | 27 + .../Config/binding_vive_pro.json.meta | 7 + .../Config/binding_vive_tracker_camera.json | 23 + .../binding_vive_tracker_camera.json.meta | 7 + .../bindings_holographic_controller.json | 306 + .../bindings_holographic_controller.json.meta | 7 + Assets/VIRTUOSO/Config/bindings_knuckles.json | 469 + .../Config/bindings_knuckles.json.meta | 7 + .../Config/bindings_oculus_touch.json | 421 + .../Config/bindings_oculus_touch.json.meta | 7 + .../Config/bindings_vive_controller.json | 419 + .../Config/bindings_vive_controller.json.meta | 7 + Assets/VIRTUOSO/Examples.meta | 10 + .../Examples/Haptic Example Scene.unity | 15780 ++++++++++++++++ .../Examples/Haptic Example Scene.unity.meta | 9 + .../VIRTUOSO/Examples/Scripted Objects.meta | 10 + .../Examples/Scripted Objects/Gestures.meta | 10 + .../Scripted Objects/Gestures/Grab.asset | 18 + .../Scripted Objects/Gestures/Grab.asset.meta | 10 + .../Scripted Objects/Gestures/Pinch.asset | 18 + .../Gestures/Pinch.asset.meta | 10 + Assets/VIRTUOSO/Materials.meta | 10 + .../HapticPatternHitLocation_Active.mat | 76 + .../HapticPatternHitLocation_Active.mat.meta | 10 + .../HapticPatternHitLocation_Inactive.mat | 76 + ...HapticPatternHitLocation_Inactive.mat.meta | 10 + .../HapticPatternHitVisualization.mat | 76 + .../HapticPatternHitVisualization.mat.meta | 10 + .../Materials/HapticPatternLineRenderer.mat | 107 + .../HapticPatternLineRenderer.mat.meta | 10 + Assets/VIRTUOSO/Materials/UnlitWhite.mat | 76 + Assets/VIRTUOSO/Materials/UnlitWhite.mat.meta | 10 + Assets/VIRTUOSO/Prefabs.meta | 10 + Assets/VIRTUOSO/Prefabs/HapticSDK.meta | 10 + .../Haptic Visualization Body.prefab | 955 + .../Haptic Visualization Body.prefab.meta | 10 + .../Prefabs/HapticSDK/Hit Location.prefab | 115 + .../HapticSDK/Hit Location.prefab.meta | 10 + .../VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab | 660 + .../Prefabs/SteamVR (Pre 2.0).prefab.meta | 10 + .../VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab | 285 + .../Prefabs/[VRTK_SDKManager].prefab.meta | 8 + Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab | 321 + .../Prefabs/[VRTK_Scripts].prefab.meta | 10 + Assets/VIRTUOSO/Resources.meta | 10 + .../VIRTUOSO/Resources/BodyCoordinates.meta | 10 + .../Resources/BodyCoordinates/ChestBack.asset | 95 + .../BodyCoordinates/ChestBack.asset.meta | 10 + .../BodyCoordinates/ChestFront.asset | 95 + .../BodyCoordinates/ChestFront.asset.meta | 10 + .../BodyCoordinates/Finger_LeftIndex.asset | 19 + .../Finger_LeftIndex.asset.meta | 10 + .../BodyCoordinates/Finger_LeftMiddle.asset | 19 + .../Finger_LeftMiddle.asset.meta | 10 + .../BodyCoordinates/Finger_LeftPinky.asset | 19 + .../Finger_LeftPinky.asset.meta | 10 + .../BodyCoordinates/Finger_LeftRing.asset | 19 + .../Finger_LeftRing.asset.meta | 10 + .../BodyCoordinates/Finger_LeftThumb.asset | 19 + .../Finger_LeftThumb.asset.meta | 10 + .../BodyCoordinates/Finger_RightIndex.asset | 19 + .../Finger_RightIndex.asset.meta | 10 + .../BodyCoordinates/Finger_RightMiddle.asset | 19 + .../Finger_RightMiddle.asset.meta | 10 + .../BodyCoordinates/Finger_RightPinky.asset | 19 + .../Finger_RightPinky.asset.meta | 10 + .../BodyCoordinates/Finger_RightRing.asset | 19 + .../Finger_RightRing.asset.meta | 10 + .../BodyCoordinates/Finger_RightThumb.asset | 19 + .../Finger_RightThumb.asset.meta | 10 + .../Resources/BodyCoordinates/Head.asset | 39 + .../Resources/BodyCoordinates/Head.asset.meta | 10 + .../Resources/BodyCoordinates/LeftFoot.asset | 19 + .../BodyCoordinates/LeftFoot.asset.meta | 10 + .../BodyCoordinates/LeftForearm.asset | 31 + .../BodyCoordinates/LeftForearm.asset.meta | 10 + .../Resources/BodyCoordinates/LeftHand.asset | 19 + .../BodyCoordinates/LeftHand.asset.meta | 10 + .../Resources/BodyCoordinates/LeftLeg.asset | 19 + .../BodyCoordinates/LeftLeg.asset.meta | 10 + .../Resources/BodyCoordinates/RightFoot.asset | 19 + .../BodyCoordinates/RightFoot.asset.meta | 10 + .../BodyCoordinates/RightForearm.asset | 31 + .../BodyCoordinates/RightForearm.asset.meta | 10 + .../Resources/BodyCoordinates/RightHand.asset | 19 + .../BodyCoordinates/RightHand.asset.meta | 10 + .../Resources/BodyCoordinates/RightLeg.asset | 19 + .../BodyCoordinates/RightLeg.asset.meta | 10 + Assets/VIRTUOSO/Resources/Curves.meta | 10 + .../Resources/Curves/DownAndAroundCurve.asset | 68 + .../Curves/DownAndAroundCurve.asset.meta | 10 + .../Resources/Curves/DownToLeftCurve.asset | 68 + .../Curves/DownToLeftCurve.asset.meta | 10 + .../Resources/Curves/DownToRightCurve.asset | 68 + .../Curves/DownToRightCurve.asset.meta | 10 + .../Resources/Curves/RampDown180Curve.asset | 68 + .../Curves/RampDown180Curve.asset.meta | 10 + .../Resources/Curves/RampDownCurve.asset | 68 + .../Resources/Curves/RampDownCurve.asset.meta | 10 + .../Resources/Curves/RampDownUpCurve.asset | 86 + .../Curves/RampDownUpCurve.asset.meta | 10 + Assets/VIRTUOSO/Resources/DeviceMappings.meta | 10 + .../BHapticsBacktVestMapping.asset | 35 + .../BHapticsBacktVestMapping.asset.meta | 10 + .../DeviceMappings/BHapticsFaceMapping.asset | 21 + .../BHapticsFaceMapping.asset.meta | 10 + .../BHapticsFrontVestMapping.asset | 35 + .../BHapticsFrontVestMapping.asset.meta | 10 + .../BHapticsLeftWristMapping.asset | 19 + .../BHapticsLeftWristMapping.asset.meta | 10 + .../BHapticsRightWristMapping.asset | 19 + .../BHapticsRightWristMapping.asset.meta | 10 + Assets/VIRTUOSO/Resources/Editor.meta | 10 + .../Resources/Editor/HapticSettings.asset | 18 + .../Editor/HapticSettings.asset.meta | 10 + Assets/VIRTUOSO/Resources/Patterns.meta | 10 + .../Resources/Patterns/AnotherTest.asset | 24 + .../Resources/Patterns/AnotherTest.asset.meta | 10 + .../Resources/Patterns/AroundPattern.asset | 22 + .../Patterns/AroundPattern.asset.meta | 10 + .../Resources/Patterns/CrossPattern.asset | 23 + .../Patterns/CrossPattern.asset.meta | 10 + .../Patterns/RampDown180Pattern.asset | 22 + .../Patterns/RampDown180Pattern.asset.meta | 10 + .../Resources/Patterns/RampDownPattern.asset | 22 + .../Patterns/RampDownPattern.asset.meta | 10 + .../Patterns/RampDownUpPattern.asset | 22 + .../Patterns/RampDownUpPattern.asset.meta | 10 + Assets/VIRTUOSO/Scriptable Objects.meta | 10 + .../Line Renderer Data.meta | 10 + .../HapticPatternWindowLineRenderer.asset | 23 + ...HapticPatternWindowLineRenderer.asset.meta | 10 + Assets/VIRTUOSO/Scripts.meta | 10 + Assets/VIRTUOSO/Scripts/Attributes.meta | 10 + .../HideMethodFromInspectorAttribute.cs | 17 + .../HideMethodFromInspectorAttribute.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Editor.meta | 10 + Assets/VIRTUOSO/Scripts/Editor/Editors.meta | 10 + .../Editor/Editors/AdvancedGestureEditor.cs | 176 + .../Editors/AdvancedGestureEditor.cs.meta | 13 + .../Editor/Editors/GenericReactionEditor.cs | 97 + .../Editors/GenericReactionEditor.cs.meta | 13 + .../Editor/Editors/GestureReactionEditor.cs | 25 + .../Editors/GestureReactionEditor.cs.meta | 13 + .../Editor/Editors/HapticManagerEditor.cs | 209 + .../Editors/HapticManagerEditor.cs.meta | 13 + .../Scripts/Editor/Editors/ReactorEditor.cs | 243 + .../Editor/Editors/ReactorEditor.cs.meta | 13 + .../Editors/TrackedObjectFollowerEditor.cs | 69 + .../TrackedObjectFollowerEditor.cs.meta | 13 + .../Editor/Editors/TrackedObjectIDEditor.cs | 168 + .../Editors/TrackedObjectIDEditor.cs.meta | 13 + .../Scripts/Editor/PropertyDrawers.meta | 10 + .../TimelineEventSelectionDrawer.cs | 81 + .../TimelineEventSelectionDrawer.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Editor/Windows.meta | 10 + .../Windows/ConfigureHapticCharacter.cs | 129 + .../Windows/ConfigureHapticCharacter.cs.meta | 13 + .../Editor/Windows/HapticSettingsWindow.cs | 86 + .../Windows/HapticSettingsWindow.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Events.meta | 10 + Assets/VIRTUOSO/Scripts/Events/ArgSender.meta | 10 + .../ArgSender/ControllerEventArgSender.cs | 62 + .../ControllerEventArgSender.cs.meta | 13 + .../Events/ArgSender/EventArgSender.cs | 18 + .../Events/ArgSender/EventArgSender.cs.meta | 13 + .../Events/ArgSender/SnapEventArgSender.cs | 37 + .../ArgSender/SnapEventArgSender.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Events/EventArgs.meta | 10 + .../EventArgs/ControllerReactionEventArgs.cs | 15 + .../ControllerReactionEventArgs.cs.meta | 13 + .../EventArgs/InteractionAreaEventArgs.cs | 19 + .../InteractionAreaEventArgs.cs.meta | 13 + .../Events/EventArgs/SnapReactionEventArgs.cs | 17 + .../EventArgs/SnapReactionEventArgs.cs.meta | 13 + .../VIRTUOSO/Scripts/Events/TimelineEvent.cs | 179 + .../Scripts/Events/TimelineEvent.cs.meta | 13 + .../Scripts/Events/TimelineEventSelection.cs | 19 + .../Events/TimelineEventSelection.cs.meta | 13 + .../VIRTUOSO/Scripts/Events/VirtuosoEvent.cs | 15 + .../Scripts/Events/VirtuosoEvent.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Gestures.meta | 10 + .../Scripts/Gestures/AdvancedGesture.cs | 547 + .../Scripts/Gestures/AdvancedGesture.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs | 119 + .../VIRTUOSO/Scripts/Gestures/Gesture.cs.meta | 13 + .../Gestures/GestureControllerEvent.cs | 209 + .../Gestures/GestureControllerEvent.cs.meta | 13 + .../Scripts/Gestures/GestureInteraction.cs | 183 + .../Gestures/GestureInteraction.cs.meta | 13 + Assets/VIRTUOSO/Scripts/HapticSDK.meta | 10 + .../Scripts/HapticSDK/BodyCoordinate.cs | 450 + .../Scripts/HapticSDK/BodyCoordinate.cs.meta | 13 + .../Scripts/HapticSDK/BodyCoordinateHit.cs | 42 + .../HapticSDK/BodyCoordinateHit.cs.meta | 13 + .../Scripts/HapticSDK/BodyCoordinateSpace.cs | 68 + .../HapticSDK/BodyCoordinateSpace.cs.meta | 13 + .../Scripts/HapticSDK/Haptic Devices.meta | 10 + .../Haptic Devices/BHapticsDevice.cs | 119 + .../Haptic Devices/BHapticsDevice.cs.meta | 13 + .../HapticSDK/Haptic Devices/HapticDevice.cs | 426 + .../Haptic Devices/HapticDevice.cs.meta | 13 + .../HapticSDK/Haptic Devices/ManusVRDevice.cs | 71 + .../Haptic Devices/ManusVRDevice.cs.meta | 13 + .../HapticSDK/Haptic Devices/OculusDevice.cs | 84 + .../Haptic Devices/OculusDevice.cs.meta | 11 + .../Haptic Devices/SDK_BHapticsDefines.cs | 32 + .../SDK_BHapticsDefines.cs.meta | 13 + .../Haptic Devices/SenseGloveDevice.cs | 153 + .../Haptic Devices/SenseGloveDevice.cs.meta | 13 + .../HapticSDK/Haptic Devices/ViveDevice.cs | 95 + .../Haptic Devices/ViveDevice.cs.meta | 13 + .../VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs | 55 + .../Scripts/HapticSDK/HapticEnums.cs.meta | 13 + .../Scripts/HapticSDK/HapticManager.cs | 211 + .../Scripts/HapticSDK/HapticManager.cs.meta | 13 + .../HapticSDK/HapticPatternCollisionHolder.cs | 27 + .../HapticPatternCollisionHolder.cs.meta | 13 + .../HapticSDK/HapticSystemAttribute.cs | 116 + .../HapticSDK/HapticSystemAttribute.cs.meta | 13 + .../Scripts/HapticSDK/ScriptableObjects.meta | 10 + .../ScriptableBodyCoordinate.cs | 80 + .../ScriptableBodyCoordinate.cs.meta | 13 + .../ScriptableDeviceMapping.cs | 43 + .../ScriptableDeviceMapping.cs.meta | 13 + .../ScriptableHapticCurve.cs | 204 + .../ScriptableHapticCurve.cs.meta | 13 + .../ScriptableHapticPattern.cs | 278 + .../ScriptableHapticPattern.cs.meta | 13 + .../ScriptableHapticSettings.cs | 83 + .../ScriptableHapticSettings.cs.meta | 13 + .../HapticSDK/UI and Visualization.meta | 10 + .../UI and Visualization/BodyHitListener.cs | 133 + .../BodyHitListener.cs.meta | 13 + .../UI and Visualization/BodyHitUI.cs | 219 + .../UI and Visualization/BodyHitUI.cs.meta | 13 + .../CreateHapticPattern.cs | 30 + .../CreateHapticPattern.cs.meta | 13 + .../HapticPatternWindow.cs | 593 + .../HapticPatternWindow.cs.meta | 22 + .../HapticSceneViewGUI.cs | 237 + .../HapticSceneViewGUI.cs.meta | 13 + .../UI and Visualization/HapticVisualizer.cs | 77 + .../HapticVisualizer.cs.meta | 17 + .../UI and Visualization/HapticsUI.cs | 104 + .../UI and Visualization/HapticsUI.cs.meta | 13 + Assets/VIRTUOSO/Scripts/InteractionAreas.meta | 10 + .../ChannelInteractionArea.cs | 216 + .../ChannelInteractionArea.cs.meta | 13 + .../InteractionAreas/EngulfInteractionArea.cs | 73 + .../EngulfInteractionArea.cs.meta | 13 + .../EnterExitInteractionArea.cs | 80 + .../EnterExitInteractionArea.cs.meta | 13 + .../InteractionAreas/InteractionArea.cs | 307 + .../InteractionAreas/InteractionArea.cs.meta | 13 + .../InteractionArea_UnityEvents.cs | 77 + .../InteractionArea_UnityEvents.cs.meta | 13 + .../InteractionAreas/MultiInteractionArea.cs | 112 + .../MultiInteractionArea.cs.meta | 13 + .../InteractionAreas/TimeInteractionArea.cs | 74 + .../TimeInteractionArea.cs.meta | 13 + .../InteractionAreas/TorqueInteractionArea.cs | 175 + .../TorqueInteractionArea.cs.meta | 13 + .../InteractionAreas/VolumeInteractionArea.cs | 69 + .../VolumeInteractionArea.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Interfaces.meta | 10 + .../VIRTUOSO/Scripts/Interfaces/IReaction.cs | 14 + .../Scripts/Interfaces/IReaction.cs.meta | 13 + .../Scripts/Interfaces/IVolumeFiller.cs | 17 + .../Scripts/Interfaces/IVolumeFiller.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Reactions.meta | 10 + .../Scripts/Reactions/ColorChangeReaction.cs | 41 + .../Reactions/ColorChangeReaction.cs.meta | 13 + .../Reactions/ControllerAppearanceReaction.cs | 93 + .../ControllerAppearanceReaction.cs.meta | 13 + .../Scripts/Reactions/ForceReaction.cs | 54 + .../Scripts/Reactions/ForceReaction.cs.meta | 13 + .../Scripts/Reactions/GenericReaction.cs | 27 + .../Scripts/Reactions/GenericReaction.cs.meta | 13 + .../Scripts/Reactions/HapticReaction.cs | 51 + .../Scripts/Reactions/HapticReaction.cs.meta | 13 + .../Scripts/Reactions/LinearMotionReaction.cs | 82 + .../Reactions/LinearMotionReaction.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs | 149 + .../Scripts/Reactions/Reactor.cs.meta | 13 + .../Scripts/Reactions/ReactorEditorInfo.cs | 30 + .../Reactions/ReactorEditorInfo.cs.meta | 13 + .../Scripts/Reactions/SnapReaction.cs | 257 + .../Scripts/Reactions/SnapReaction.cs.meta | 13 + .../Scripts/Reactions/UnityEventReaction.cs | 31 + .../Reactions/UnityEventReaction.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Utilities.meta | 10 + .../VIRTUOSO/Scripts/Utilities/Constants.cs | 27 + .../Scripts/Utilities/Constants.cs.meta | 13 + .../Scripts/Utilities/EventUtility.cs | 178 + .../Scripts/Utilities/EventUtility.cs.meta | 13 + .../Utilities/ScriptableLineRenderer.cs | 27 + .../Utilities/ScriptableLineRenderer.cs.meta | 13 + .../Utilities/ScriptableObjectUtility.cs | 100 + .../Utilities/ScriptableObjectUtility.cs.meta | 13 + .../Utilities/TrackedObjectFollower.cs | 76 + .../Utilities/TrackedObjectFollower.cs.meta | 13 + .../Scripts/Utilities/TrackedObjectID.cs | 102 + .../Scripts/Utilities/TrackedObjectID.cs.meta | 13 + Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs | 51 + .../Scripts/Utilities/VirtMath.cs.meta | 13 + Assets/VIRTUOSO/Shaders.meta | 10 + .../Shaders/LineRendererOverlay.shader | 33 + .../Shaders/LineRendererOverlay.shader.meta | 10 + Assets/VIRTUOSO/VRTK.meta | 9 + Assets/VIRTUOSO/VRTK/Internal.meta | 9 + Assets/VIRTUOSO/VRTK/Internal/Materials.meta | 9 + .../VRTK/Internal/Materials/Resources.meta | 9 + .../AdaptiveQualityDebugVisualization.mat | 127 + ...AdaptiveQualityDebugVisualization.mat.meta | 8 + .../Materials/Resources/DirectionArrows.mat | 76 + .../Resources/DirectionArrows.mat.meta | 9 + .../Materials/Resources/OutlineBasic.mat | 133 + .../Materials/Resources/OutlineBasic.mat.meta | 8 + .../Resources/SnapDropZoneEditorObject.mat | 136 + .../SnapDropZoneEditorObject.mat.meta | 8 + .../Materials/Resources/TooltipLine.mat | 138 + .../Materials/Resources/TooltipLine.mat.meta | 8 + .../Materials/Resources/TunnelOverlay.mat | 33 + .../Resources/TunnelOverlay.mat.meta | 9 + .../Internal/Materials/Resources/UIText.mat | 162 + .../Materials/Resources/UIText.mat.meta | 8 + .../Materials/Resources/WorldPointer.mat | 136 + .../Materials/Resources/WorldPointer.mat.meta | 8 + Assets/VIRTUOSO/VRTK/Internal/Textures.meta | 9 + .../VRTK/Internal/Textures/Crosshair.png | Bin 0 -> 210 bytes .../VRTK/Internal/Textures/Crosshair.png.meta | 76 + .../Internal/Textures/DirectionArrows.png | Bin 0 -> 5017 bytes .../Textures/DirectionArrows.png.meta | 68 + Assets/VIRTUOSO/VRTK/Prefabs.meta | 9 + Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands.meta | 9 + .../VRTK/Prefabs/AvatarHands/BasicHands.meta | 9 + .../AvatarHands/BasicHands/Models.meta | 9 + .../BasicHands/Models/Avatar Masks.meta | 9 + .../Models/Avatar Masks/Hand_Idle.mask | 80 + .../Models/Avatar Masks/Hand_Idle.mask.meta | 8 + .../Models/Avatar Masks/Hand_Index.mask | 80 + .../Models/Avatar Masks/Hand_Index.mask.meta | 8 + .../Models/Avatar Masks/Hand_Middle.mask | 80 + .../Models/Avatar Masks/Hand_Middle.mask.meta | 8 + .../Models/Avatar Masks/Hand_Pinky.mask | 80 + .../Models/Avatar Masks/Hand_Pinky.mask.meta | 8 + .../Models/Avatar Masks/Hand_Ring.mask | 80 + .../Models/Avatar Masks/Hand_Ring.mask.meta | 8 + .../Models/Avatar Masks/Hand_Thumb.mask | 80 + .../Models/Avatar Masks/Hand_Thumb.mask.meta | 8 + .../BasicHands/Models/Materials.meta | 9 + .../BasicHands/Models/Materials/Textures.meta | 9 + .../Textures/VRTK_BasicHand_Texture.png | Bin 0 -> 547062 bytes .../Textures/VRTK_BasicHand_Texture.png.meta | 68 + .../Materials/VRTK_BasicHand_Material.mat | 75 + .../VRTK_BasicHand_Material.mat.meta | 9 + .../BasicHands/Models/VRTK_BasicHand.fbx | Bin 0 -> 405580 bytes .../BasicHands/Models/VRTK_BasicHand.fbx.meta | 926 + ...K_BasicHand_AnimationController.controller | 371 + ...icHand_AnimationController.controller.meta | 8 + .../BasicHands/VRTK_BasicHand.prefab | 1685 ++ .../BasicHands/VRTK_BasicHand.prefab.meta | 8 + .../AvatarHands/VRTK_AvatarHandController.cs | 792 + .../VRTK_AvatarHandController.cs.meta | 12 + .../VRTK/Prefabs/ConsoleViewerCanvas.meta | 9 + .../ConsoleViewerCanvas.prefab | 1613 ++ .../ConsoleViewerCanvas.prefab.meta | 8 + .../ConsoleViewerCanvas/VRTK_ConsoleViewer.cs | 119 + .../VRTK_ConsoleViewer.cs.meta | 12 + .../Prefabs/ControllerRigidbodyActivator.meta | 9 + .../ControllerRigidbodyActivator.prefab | 83 + .../ControllerRigidbodyActivator.prefab.meta | 8 + .../VRTK_ControllerRigidbodyActivator.cs | 116 + .../VRTK_ControllerRigidbodyActivator.cs.meta | 12 + .../VRTK/Prefabs/ControllerTooltips.meta | 9 + .../ControllerTooltips.prefab | 3771 ++++ .../ControllerTooltips.prefab.meta | 8 + .../VRTK_ControllerTooltips.cs | 464 + .../VRTK_ControllerTooltips.cs.meta | 12 + .../VIRTUOSO/VRTK/Prefabs/DesktopCamera.meta | 9 + .../DesktopCamera/DesktopCamera.prefab | 407 + .../DesktopCamera/DesktopCamera.prefab.meta | 8 + .../DesktopCamera/VRTK_DesktopCamera.cs | 145 + .../DesktopCamera/VRTK_DesktopCamera.cs.meta | 12 + .../VRTK/Prefabs/DestinationPoint.meta | 9 + .../DestinationPoint/DestinationPoint.prefab | 361 + .../DestinationPoint.prefab.meta | 8 + .../DestinationPoint/VRTK_DestinationPoint.cs | 459 + .../VRTK_DestinationPoint.cs.meta | 12 + .../VRTK/Prefabs/FramesPerSecondCanvas.meta | 9 + .../FramesPerSecondCanvas.prefab | 200 + .../FramesPerSecondCanvas.prefab.meta | 8 + .../VRTK_FramesPerSecondViewer.cs | 118 + .../VRTK_FramesPerSecondViewer.cs.meta | 12 + .../VIRTUOSO/VRTK/Prefabs/ObjectTooltip.meta | 9 + .../ObjectTooltip/ObjectTooltip.prefab | 508 + .../ObjectTooltip/ObjectTooltip.prefab.meta | 8 + .../ObjectTooltip/VRTK_ObjectTooltip.cs | 190 + .../ObjectTooltip/VRTK_ObjectTooltip.cs.meta | 12 + Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu.meta | 9 + .../VRTK/Prefabs/PanelMenu/PanelMenu.prefab | 714 + .../Prefabs/PanelMenu/PanelMenu.prefab.meta | 8 + .../PanelMenu/VRTK_PanelMenuController.cs | 504 + .../VRTK_PanelMenuController.cs.meta | 12 + .../PanelMenu/VRTK_PanelMenuItemController.cs | 198 + .../VRTK_PanelMenuItemController.cs.meta | 12 + .../Prefabs/PointerDirectionIndicator.meta | 9 + .../PointerDirectionIndicator.prefab | 385 + .../PointerDirectionIndicator.prefab.meta | 8 + .../VRTK_PointerDirectionIndicator.cs | 170 + .../VRTK_PointerDirectionIndicator.cs.meta | 12 + Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu.meta | 9 + .../VRTK/Prefabs/RadialMenu/RadialMenu.prefab | 283 + .../Prefabs/RadialMenu/RadialMenu.prefab.meta | 8 + .../Prefabs/RadialMenu/RadialMenuButton.meta | 9 + .../RadialMenu/RadialMenuButton/Arc.prefab | 194 + .../RadialMenuButton/Arc.prefab.meta | 8 + .../RadialMenuButton/RadialButtonIcon.cs | 9 + .../RadialMenuButton/RadialButtonIcon.cs.meta | 12 + .../RadialMenu/RadialMenuButton/UICircle.cs | 110 + .../RadialMenuButton/UICircle.cs.meta | 12 + .../VRTK_IndependentRadialMenuController.cs | 375 + ...TK_IndependentRadialMenuController.cs.meta | 12 + .../Prefabs/RadialMenu/VRTK_RadialMenu.cs | 449 + .../RadialMenu/VRTK_RadialMenu.cs.meta | 12 + .../RadialMenu/VRTK_RadialMenuController.cs | 136 + .../VRTK_RadialMenuController.cs.meta | 12 + .../VRTK/Prefabs/SDKSetupSwitcher.meta | 9 + .../SDKSetupSwitcher/SDKSetupSwitcher.prefab | 1436 ++ .../SDKSetupSwitcher.prefab.meta | 8 + .../SDKSetupSwitcher/VRTK_SDKSetupSwitcher.cs | 188 + .../VRTK_SDKSetupSwitcher.cs.meta | 12 + Assets/VIRTUOSO/VRTK/Source.meta | 9 + Assets/VIRTUOSO/VRTK/Source/Editor.meta | 9 + .../VRTK/Source/Editor/Attributes.meta | 9 + .../Editor/Attributes/MinMaxRangeDrawer.cs | 80 + .../Attributes/MinMaxRangeDrawer.cs.meta | 12 + .../Attributes/ObsoleteInspectorDrawer.cs | 17 + .../ObsoleteInspectorDrawer.cs.meta | 12 + .../SerializedPropertyExtensions.cs | 186 + .../SerializedPropertyExtensions.cs.meta | 12 + .../VRTK/Source/Editor/DataTypes.meta | 9 + .../Source/Editor/DataTypes/Limits2DDrawer.cs | 35 + .../Editor/DataTypes/Limits2DDrawer.cs.meta | 12 + .../Editor/DataTypes/Vector3StateDrawer.cs | 41 + .../DataTypes/Vector3StateDrawer.cs.meta | 12 + Assets/VIRTUOSO/VRTK/Source/Editor/Icons.meta | 9 + .../Editor/Icons/vrtk_script_internal.png | Bin 0 -> 25638 bytes .../Icons/vrtk_script_internal.png.meta | 76 + .../Editor/Icons/vrtk_script_obsolete.png | Bin 0 -> 25850 bytes .../Icons/vrtk_script_obsolete.png.meta | 76 + .../Editor/Icons/vrtk_script_prefab.png | Bin 0 -> 21487 bytes .../Editor/Icons/vrtk_script_prefab.png.meta | 76 + .../Editor/Icons/vrtk_script_usable.png | Bin 0 -> 20821 bytes .../Editor/Icons/vrtk_script_usable.png.meta | 76 + .../Editor/VRTK_AdaptiveQualityEditor.cs | 118 + .../Editor/VRTK_AdaptiveQualityEditor.cs.meta | 12 + .../Source/Editor/VRTK_EditorUtilities.cs | 77 + .../Editor/VRTK_EditorUtilities.cs.meta | 12 + .../Editor/VRTK_InteractHapticsEditor.cs | 122 + .../Editor/VRTK_InteractHapticsEditor.cs.meta | 12 + .../Source/Editor/VRTK_NavMeshDataEditor.cs | 45 + .../Editor/VRTK_NavMeshDataEditor.cs.meta | 12 + .../VRTK/Source/Editor/VRTK_ObjectSetup.cs | 213 + .../Source/Editor/VRTK_ObjectSetup.cs.meta | 12 + .../Source/Editor/VRTK_PolicyListEditor.cs | 50 + .../Editor/VRTK_PolicyListEditor.cs.meta | 12 + .../Source/Editor/VRTK_RadialMenuEditor.cs | 20 + .../Editor/VRTK_RadialMenuEditor.cs.meta | 12 + .../Source/Editor/VRTK_SDKManagerEditor.cs | 448 + .../Editor/VRTK_SDKManagerEditor.cs.meta | 12 + .../VRTK/Source/Editor/VRTK_SDKSetupEditor.cs | 513 + .../Source/Editor/VRTK_SDKSetupEditor.cs.meta | 12 + .../Source/Editor/VRTK_SupportInfoWindow.cs | 182 + .../Editor/VRTK_SupportInfoWindow.cs.meta | 12 + Assets/VIRTUOSO/VRTK/Source/SDK.meta | 9 + Assets/VIRTUOSO/VRTK/Source/SDK/Base.meta | 9 + .../VIRTUOSO/VRTK/Source/SDK/Base/SDK_Base.cs | 50 + .../VRTK/Source/SDK/Base/SDK_Base.cs.meta | 12 + .../Source/SDK/Base/SDK_BaseBoundaries.cs | 68 + .../SDK/Base/SDK_BaseBoundaries.cs.meta | 12 + .../Source/SDK/Base/SDK_BaseController.cs | 656 + .../SDK/Base/SDK_BaseController.cs.meta | 12 + .../Source/SDK/Base/SDK_BaseGestureLibrary.cs | 63 + .../SDK/Base/SDK_BaseGestureLibrary.cs.meta | 13 + .../VRTK/Source/SDK/Base/SDK_BaseHand.cs | 145 + .../VRTK/Source/SDK/Base/SDK_BaseHand.cs.meta | 13 + .../VRTK/Source/SDK/Base/SDK_BaseHeadset.cs | 191 + .../Source/SDK/Base/SDK_BaseHeadset.cs.meta | 12 + .../VRTK/Source/SDK/Base/SDK_BaseSystem.cs | 30 + .../Source/SDK/Base/SDK_BaseSystem.cs.meta | 12 + .../VRTK/Source/SDK/Base/SDK_BaseTracker.cs | 85 + .../Source/SDK/Base/SDK_BaseTracker.cs.meta | 13 + .../SDK/Base/SDK_DescriptionAttribute.cs | 147 + .../SDK/Base/SDK_DescriptionAttribute.cs.meta | 12 + ...ScriptingDefineSymbolPredicateAttribute.cs | 118 + ...tingDefineSymbolPredicateAttribute.cs.meta | 12 + Assets/VIRTUOSO/VRTK/Source/SDK/Daydream.meta | 9 + .../VRTK/Source/SDK/Daydream/ABOUT.md | 194 + .../VRTK/Source/SDK/Daydream/ABOUT.md.meta | 8 + .../VRTK/Source/SDK/Daydream/DaydreamReach.cs | 87 + .../Source/SDK/Daydream/DaydreamReach.cs.meta | 12 + .../VRTK/Source/SDK/Daydream/README.md | 21 + .../VRTK/Source/SDK/Daydream/README.md.meta | 8 + .../SDK/Daydream/SDK_DaydreamBoundaries.cs | 89 + .../Daydream/SDK_DaydreamBoundaries.cs.meta | 12 + .../SDK/Daydream/SDK_DaydreamController.cs | 424 + .../Daydream/SDK_DaydreamController.cs.meta | 12 + .../SDK/Daydream/SDK_DaydreamDefines.cs | 20 + .../SDK/Daydream/SDK_DaydreamDefines.cs.meta | 12 + .../SDK/Daydream/SDK_DaydreamHeadset.cs | 136 + .../SDK/Daydream/SDK_DaydreamHeadset.cs.meta | 12 + .../Source/SDK/Daydream/SDK_DaydreamSystem.cs | 43 + .../SDK/Daydream/SDK_DaydreamSystem.cs.meta | 12 + .../SDK/Daydream/SDK_DaydreamTracker.cs | 108 + .../SDK/Daydream/SDK_DaydreamTracker.cs.meta | 13 + Assets/VIRTUOSO/VRTK/Source/SDK/Fallback.meta | 9 + .../VRTK/Source/SDK/Fallback/Resources.meta | 9 + .../Resources/ControllerColliders.meta | 9 + .../ControllerColliders/Fallback.prefab | 91 + .../ControllerColliders/Fallback.prefab.meta | 8 + .../SDK/Fallback/SDK_FallbackBoundaries.cs | 75 + .../Fallback/SDK_FallbackBoundaries.cs.meta | 12 + .../SDK/Fallback/SDK_FallbackController.cs | 325 + .../Fallback/SDK_FallbackController.cs.meta | 12 + .../Source/SDK/Fallback/SDK_FallbackHand.cs | 54 + .../SDK/Fallback/SDK_FallbackHand.cs.meta | 13 + .../SDK/Fallback/SDK_FallbackHeadset.cs | 105 + .../SDK/Fallback/SDK_FallbackHeadset.cs.meta | 12 + .../Source/SDK/Fallback/SDK_FallbackSystem.cs | 39 + .../SDK/Fallback/SDK_FallbackSystem.cs.meta | 12 + .../SDK/Fallback/SDK_FallbackTracker.cs | 106 + .../SDK/Fallback/SDK_FallbackTracker.cs.meta | 13 + .../VIRTUOSO/VRTK/Source/SDK/HyperealVR.meta | 9 + .../VRTK/Source/SDK/HyperealVR/README.md | 24 + .../VRTK/Source/SDK/HyperealVR/README.md.meta | 8 + .../VRTK/Source/SDK/HyperealVR/Resources.meta | 9 + .../Resources/ControllerColliders.meta | 9 + .../ControllerColliders/HyperealSens.prefab | 125 + .../HyperealSens.prefab.meta | 9 + .../HyperealVR/SDK_HyperealVRBoundaries.cs | 111 + .../SDK_HyperealVRBoundaries.cs.meta | 12 + .../HyperealVR/SDK_HyperealVRController.cs | 614 + .../SDK_HyperealVRController.cs.meta | 12 + .../SDK/HyperealVR/SDK_HyperealVRDefines.cs | 26 + .../HyperealVR/SDK_HyperealVRDefines.cs.meta | 12 + .../SDK/HyperealVR/SDK_HyperealVRHeadset.cs | 131 + .../HyperealVR/SDK_HyperealVRHeadset.cs.meta | 12 + .../SDK/HyperealVR/SDK_HyperealVRSystem.cs | 48 + .../HyperealVR/SDK_HyperealVRSystem.cs.meta | 12 + .../VIRTUOSO/VRTK/Source/SDK/LeapMotion.meta | 10 + .../VRTK/Source/SDK/LeapMotion/Readme.md | 9 + .../VRTK/Source/SDK/LeapMotion/Readme.md.meta | 9 + .../SDK/LeapMotion/SDK_LeapMotionDefines.cs | 39 + .../LeapMotion/SDK_LeapMotionDefines.cs.meta | 13 + .../SDK_LeapMotionGestureLibrary.cs | 260 + .../SDK_LeapMotionGestureLibrary.cs.meta | 13 + .../SDK/LeapMotion/SDK_LeapMotionHand.cs | 126 + .../SDK/LeapMotion/SDK_LeapMotionHand.cs.meta | 13 + Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR.meta | 10 + .../VRTK/Source/SDK/ManusVR/Readme.md | 13 + .../VRTK/Source/SDK/ManusVR/Readme.md.meta | 9 + .../Source/SDK/ManusVR/SDK_ManusVRDefines.cs | 28 + .../SDK/ManusVR/SDK_ManusVRDefines.cs.meta | 13 + .../SDK/ManusVR/SDK_ManusVRGestureLibrary.cs | 206 + .../ManusVR/SDK_ManusVRGestureLibrary.cs.meta | 13 + .../Source/SDK/ManusVR/SDK_ManusVRHand.cs | 115 + .../SDK/ManusVR/SDK_ManusVRHand.cs.meta | 13 + Assets/VIRTUOSO/VRTK/Source/SDK/NoHands.meta | 10 + .../VRTK/Source/SDK/NoHands/Readme.md | 1 + .../VRTK/Source/SDK/NoHands/Readme.md.meta | 9 + .../VRTK/Source/SDK/NoHands/SDK_NoHand.cs | 57 + .../Source/SDK/NoHands/SDK_NoHand.cs.meta | 13 + .../Source/SDK/NoHands/SDK_NoHandDefines.cs | 31 + .../SDK/NoHands/SDK_NoHandDefines.cs.meta | 13 + Assets/VIRTUOSO/VRTK/Source/SDK/Oculus.meta | 9 + .../VIRTUOSO/VRTK/Source/SDK/Oculus/README.md | 7 + .../VRTK/Source/SDK/Oculus/README.md.meta | 8 + .../VRTK/Source/SDK/Oculus/Resources.meta | 9 + .../Oculus/Resources/ControllerColliders.meta | 9 + .../OculusTouch_Left.prefab | 168 + .../OculusTouch_Left.prefab.meta | 8 + .../OculusTouch_Right.prefab | 168 + .../OculusTouch_Right.prefab.meta | 8 + .../Source/SDK/Oculus/SDK_OculusBoundaries.cs | 138 + .../SDK/Oculus/SDK_OculusBoundaries.cs.meta | 12 + .../Source/SDK/Oculus/SDK_OculusController.cs | 938 + .../SDK/Oculus/SDK_OculusController.cs.meta | 12 + .../Source/SDK/Oculus/SDK_OculusDefines.cs | 66 + .../SDK/Oculus/SDK_OculusDefines.cs.meta | 12 + .../Source/SDK/Oculus/SDK_OculusHeadset.cs | 168 + .../SDK/Oculus/SDK_OculusHeadset.cs.meta | 12 + .../Source/SDK/Oculus/SDK_OculusSystem.cs | 45 + .../SDK/Oculus/SDK_OculusSystem.cs.meta | 12 + .../Source/SDK/Oculus/SDK_OculusTracker.cs | 111 + .../SDK/Oculus/SDK_OculusTracker.cs.meta | 13 + .../VIRTUOSO/VRTK/Source/SDK/SenseGlove.meta | 10 + .../VRTK/Source/SDK/SenseGlove/Readme.md | 9 + .../VRTK/Source/SDK/SenseGlove/Readme.md.meta | 9 + .../SDK/SenseGlove/SDK_SenseGloveDefines.cs | 32 + .../SenseGlove/SDK_SenseGloveDefines.cs.meta | 13 + .../SDK_SenseGloveGestureLibrary.cs | 145 + .../SDK_SenseGloveGestureLibrary.cs.meta | 13 + .../SDK/SenseGlove/SDK_SenseGloveHand.cs | 130 + .../SDK/SenseGlove/SDK_SenseGloveHand.cs.meta | 13 + .../VIRTUOSO/VRTK/Source/SDK/Simulator.meta | 9 + .../VRTK/Source/SDK/Simulator/README.md | 11 + .../VRTK/Source/SDK/Simulator/README.md.meta | 8 + .../VRTK/Source/SDK/Simulator/Resources.meta | 9 + .../Resources/ControllerColliders.meta | 9 + .../ControllerColliders/Simulator.prefab | 54 + .../ControllerColliders/Simulator.prefab.meta | 8 + .../Source/SDK/Simulator/SDK_ControllerSim.cs | 39 + .../SDK/Simulator/SDK_ControllerSim.cs.meta | 12 + .../SDK/Simulator/SDK_InputSimulator.cs | 601 + .../SDK/Simulator/SDK_InputSimulator.cs.meta | 12 + .../Source/SDK/Simulator/SDK_SimBoundaries.cs | 97 + .../SDK/Simulator/SDK_SimBoundaries.cs.meta | 12 + .../Source/SDK/Simulator/SDK_SimController.cs | 624 + .../SDK/Simulator/SDK_SimController.cs.meta | 12 + .../Source/SDK/Simulator/SDK_SimHeadset.cs | 137 + .../SDK/Simulator/SDK_SimHeadset.cs.meta | 12 + .../Source/SDK/Simulator/SDK_SimSystem.cs | 37 + .../SDK/Simulator/SDK_SimSystem.cs.meta | 12 + .../Source/SDK/Simulator/SDK_SimTracker.cs | 124 + .../SDK/Simulator/SDK_SimTracker.cs.meta | 13 + .../Source/SDK/Simulator/SDK_TrackerSim.cs | 77 + .../SDK/Simulator/SDK_TrackerSim.cs.meta | 13 + .../Simulator/[VRSimulator_CameraRig].prefab | 1449 ++ .../[VRSimulator_CameraRig].prefab.meta | 8 + Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR.meta | 9 + .../VRTK/Source/SDK/SteamVR/README.md | 12 + .../VRTK/Source/SDK/SteamVR/README.md.meta | 8 + .../VRTK/Source/SDK/SteamVR/Resources.meta | 9 + .../Resources/ControllerColliders.meta | 9 + .../ControllerColliders/HTCVive.prefab | 210 + .../ControllerColliders/HTCVive.prefab.meta | 8 + .../SteamVROculusTouch_Left.prefab | 168 + .../SteamVROculusTouch_Left.prefab.meta | 8 + .../SteamVROculusTouch_Right.prefab | 168 + .../SteamVROculusTouch_Right.prefab.meta | 8 + .../SteamVRWindowsMRController_Left.prefab | 167 + ...teamVRWindowsMRController_Left.prefab.meta | 10 + .../SteamVRWindowsMRController_Right.prefab | 167 + ...eamVRWindowsMRController_Right.prefab.meta | 10 + .../ValveKnuckles_Left.prefab | 168 + .../ValveKnuckles_Left.prefab.meta | 8 + .../ValveKnuckles_Right.prefab | 168 + .../ValveKnuckles_Right.prefab.meta | 8 + .../SDK/SteamVR/SDK_SteamVRBoundaries.cs | 159 + .../SDK/SteamVR/SDK_SteamVRBoundaries.cs.meta | 12 + .../SDK/SteamVR/SDK_SteamVRController.cs | 1121 ++ .../SDK/SteamVR/SDK_SteamVRController.cs.meta | 12 + .../Source/SDK/SteamVR/SDK_SteamVRDefines.cs | 121 + .../SDK/SteamVR/SDK_SteamVRDefines.cs.meta | 12 + .../Source/SDK/SteamVR/SDK_SteamVRHeadset.cs | 215 + .../SDK/SteamVR/SDK_SteamVRHeadset.cs.meta | 12 + .../Source/SDK/SteamVR/SDK_SteamVRSystem.cs | 51 + .../SDK/SteamVR/SDK_SteamVRSystem.cs.meta | 12 + .../Source/SDK/SteamVR/SDK_SteamVRTracker.cs | 291 + .../SDK/SteamVR/SDK_SteamVRTracker.cs.meta | 13 + Assets/VIRTUOSO/VRTK/Source/SDK/Unity.meta | 9 + .../VIRTUOSO/VRTK/Source/SDK/Unity/README.md | 11 + .../VRTK/Source/SDK/Unity/README.md.meta | 8 + .../Source/SDK/Unity/SDK_UnityBoundaries.cs | 87 + .../SDK/Unity/SDK_UnityBoundaries.cs.meta | 12 + .../Source/SDK/Unity/SDK_UnityCameraRig.cs | 29 + .../SDK/Unity/SDK_UnityCameraRig.cs.meta | 12 + .../Source/SDK/Unity/SDK_UnityController.cs | 844 + .../SDK/Unity/SDK_UnityController.cs.meta | 12 + .../SDK/Unity/SDK_UnityControllerTracker.cs | 64 + .../Unity/SDK_UnityControllerTracker.cs.meta | 12 + .../VRTK/Source/SDK/Unity/SDK_UnityHeadset.cs | 134 + .../Source/SDK/Unity/SDK_UnityHeadset.cs.meta | 12 + .../SDK/Unity/SDK_UnityHeadsetTracker.cs | 15 + .../SDK/Unity/SDK_UnityHeadsetTracker.cs.meta | 12 + .../VRTK/Source/SDK/Unity/SDK_UnitySystem.cs | 41 + .../Source/SDK/Unity/SDK_UnitySystem.cs.meta | 12 + .../SDK/Unity/[UnityBase_CameraRig].prefab | 435 + .../Unity/[UnityBase_CameraRig].prefab.meta | 8 + .../VRTK/Source/SDK/VRTK_SDK_Bridge.cs | 415 + .../VRTK/Source/SDK/VRTK_SDK_Bridge.cs.meta | 12 + .../VIRTUOSO/VRTK/Source/SDK/WindowsMR.meta | 10 + .../VRTK/Source/SDK/WindowsMR/README.md | 14 + .../VRTK/Source/SDK/WindowsMR/README.md.meta | 9 + .../VRTK/Source/SDK/WindowsMR/Resources.meta | 10 + .../Resources/InteractionSourceExtensions.cs | 128 + .../InteractionSourceExtensions.cs.meta | 13 + .../WindowsMR/Resources/WindowsApiChecker.cs | 45 + .../Resources/WindowsApiChecker.cs.meta | 13 + .../WindowsMR/Resources/WindowsMR_Camera.cs | 100 + .../Resources/WindowsMR_Camera.cs.meta | 13 + .../Resources/WindowsMR_ControllerManager.cs | 8 + .../WindowsMR_ControllerManager.cs.meta | 13 + .../Resources/WindowsMR_TrackedObject.cs | 515 + .../Resources/WindowsMR_TrackedObject.cs.meta | 13 + .../SDK/WindowsMR/SDK_WindowsMRBoundaries.cs | 147 + .../WindowsMR/SDK_WindowsMRBoundaries.cs.meta | 13 + .../SDK/WindowsMR/SDK_WindowsMRController.cs | 636 + .../WindowsMR/SDK_WindowsMRController.cs.meta | 13 + .../SDK/WindowsMR/SDK_WindowsMRDefines.cs | 34 + .../WindowsMR/SDK_WindowsMRDefines.cs.meta | 13 + .../SDK/WindowsMR/SDK_WindowsMRHeadset.cs | 164 + .../WindowsMR/SDK_WindowsMRHeadset.cs.meta | 13 + .../SDK/WindowsMR/SDK_WindowsMRSystem.cs | 46 + .../SDK/WindowsMR/SDK_WindowsMRSystem.cs.meta | 13 + .../WindowsMR/[WindowsMR_CameraRig].prefab | 349 + .../[WindowsMR_CameraRig].prefab.meta | 10 + Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse.meta | 9 + .../VRTK/Source/SDK/Ximmerse/README.md | 12 + .../VRTK/Source/SDK/Ximmerse/README.md.meta | 8 + .../VRTK/Source/SDK/Ximmerse/Resources.meta | 9 + .../Resources/ControllerColliders.meta | 9 + .../XimmerseCobra02.prefab | 84 + .../XimmerseCobra02.prefab.meta | 8 + .../SDK/Ximmerse/SDK_XimmerseBoundaries.cs | 103 + .../Ximmerse/SDK_XimmerseBoundaries.cs.meta | 12 + .../SDK/Ximmerse/SDK_XimmerseController.cs | 679 + .../Ximmerse/SDK_XimmerseController.cs.meta | 12 + .../SDK/Ximmerse/SDK_XimmerseDefines.cs | 21 + .../SDK/Ximmerse/SDK_XimmerseDefines.cs.meta | 12 + .../SDK/Ximmerse/SDK_XimmerseHeadset.cs | 156 + .../SDK/Ximmerse/SDK_XimmerseHeadset.cs.meta | 12 + .../Source/SDK/Ximmerse/SDK_XimmerseSystem.cs | 44 + .../SDK/Ximmerse/SDK_XimmerseSystem.cs.meta | 12 + Assets/VIRTUOSO/VRTK/Source/Scripts.meta | 9 + .../VRTK/Source/Scripts/Interactions.meta | 9 + .../Scripts/Interactions/Highlighters.meta | 9 + .../Highlighters/VRTK_BaseHighlighter.cs | 102 + .../Highlighters/VRTK_BaseHighlighter.cs.meta | 12 + .../VRTK_MaterialColorSwapHighlighter.cs | 208 + .../VRTK_MaterialColorSwapHighlighter.cs.meta | 11 + ...terialPropertyBlockColorSwapHighlighter.cs | 153 + ...lPropertyBlockColorSwapHighlighter.cs.meta | 11 + .../VRTK_OutlineObjectCopyHighlighter.cs | 293 + .../VRTK_OutlineObjectCopyHighlighter.cs.meta | 11 + .../Scripts/Interactions/Interactables.meta | 9 + .../Interactables/Controllables.meta | 9 + .../Controllables/Artificial.meta | 9 + .../Artificial/VRTK_ArtificialPusher.cs | 302 + .../Artificial/VRTK_ArtificialPusher.cs.meta | 11 + .../Artificial/VRTK_ArtificialRotator.cs | 488 + .../Artificial/VRTK_ArtificialRotator.cs.meta | 11 + .../Artificial/VRTK_ArtificialSlider.cs | 429 + .../Artificial/VRTK_ArtificialSlider.cs.meta | 11 + .../Interactables/Controllables/Physics.meta | 9 + .../Physics/VRTK_BasePhysicsControllable.cs | 137 + .../VRTK_BasePhysicsControllable.cs.meta | 12 + .../Physics/VRTK_PhysicsPusher.cs | 289 + .../Physics/VRTK_PhysicsPusher.cs.meta | 11 + .../Physics/VRTK_PhysicsRotator.cs | 550 + .../Physics/VRTK_PhysicsRotator.cs.meta | 11 + .../Physics/VRTK_PhysicsSlider.cs | 502 + .../Physics/VRTK_PhysicsSlider.cs.meta | 11 + .../Controllables/VRTK_BaseControllable.cs | 358 + .../VRTK_BaseControllable.cs.meta | 12 + .../Interactables/GrabAttachMechanics.meta | 9 + .../VRTK_BaseGrabAttach.cs | 306 + .../VRTK_BaseGrabAttach.cs.meta | 12 + .../VRTK_BaseJointGrabAttach.cs | 132 + .../VRTK_BaseJointGrabAttach.cs.meta | 12 + .../VRTK_ChildOfControllerGrabAttach.cs | 80 + .../VRTK_ChildOfControllerGrabAttach.cs.meta | 11 + .../VRTK_ClimbableGrabAttach.cs | 35 + .../VRTK_ClimbableGrabAttach.cs.meta | 11 + .../VRTK_ControlAnimationGrabAttach.cs | 289 + .../VRTK_ControlAnimationGrabAttach.cs.meta | 11 + .../VRTK_CustomJointGrabAttach.cs | 71 + .../VRTK_CustomJointGrabAttach.cs.meta | 11 + .../VRTK_FixedJointGrabAttach.cs | 33 + .../VRTK_FixedJointGrabAttach.cs.meta | 11 + .../VRTK_MoveTransformGrabAttach.cs | 610 + .../VRTK_MoveTransformGrabAttach.cs.meta | 11 + .../VRTK_RotateTransformGrabAttach.cs | 538 + .../VRTK_RotateTransformGrabAttach.cs.meta | 11 + .../VRTK_RotatorTrackGrabAttach.cs | 49 + .../VRTK_RotatorTrackGrabAttach.cs.meta | 11 + .../VRTK_SpringJointGrabAttach.cs | 40 + .../VRTK_SpringJointGrabAttach.cs.meta | 11 + .../VRTK_TrackObjectGrabAttach.cs | 141 + .../VRTK_TrackObjectGrabAttach.cs.meta | 11 + .../SecondaryControllerGrabActions.meta | 9 + .../VRTK_AxisScaleGrabAction.cs | 139 + .../VRTK_AxisScaleGrabAction.cs.meta | 11 + .../VRTK_BaseGrabAction.cs | 102 + .../VRTK_BaseGrabAction.cs.meta | 12 + .../VRTK_ControlDirectionGrabAction.cs | 192 + .../VRTK_ControlDirectionGrabAction.cs.meta | 11 + .../VRTK_SwapControllerGrabAction.cs | 27 + .../VRTK_SwapControllerGrabAction.cs.meta | 11 + .../VRTK_IgnoreInteractTouchColliders.cs | 124 + .../VRTK_IgnoreInteractTouchColliders.cs.meta | 11 + .../VRTK_InteractControllerAppearance.cs | 298 + .../VRTK_InteractControllerAppearance.cs.meta | 12 + .../Interactables/VRTK_InteractHaptics.cs | 380 + .../VRTK_InteractHaptics.cs.meta | 11 + .../VRTK_InteractObjectAppearance.cs | 525 + .../VRTK_InteractObjectAppearance.cs.meta | 11 + .../VRTK_InteractObjectHighlighter.cs | 356 + .../VRTK_InteractObjectHighlighter.cs.meta | 11 + .../VRTK_InteractableListener.cs | 45 + .../VRTK_InteractableListener.cs.meta | 12 + .../Interactables/VRTK_InteractableObject.cs | 1519 ++ .../VRTK_InteractableObject.cs.meta | 11 + .../VRTK_ObjectTouchAutoInteract.cs | 194 + .../VRTK_ObjectTouchAutoInteract.cs.meta | 11 + .../Scripts/Interactions/Interactors.meta | 9 + .../Interactors/VRTK_ControllerEvents.cs | 2627 +++ .../Interactors/VRTK_ControllerEvents.cs.meta | 11 + .../Interactors/VRTK_ControllerHighlighter.cs | 531 + .../VRTK_ControllerHighlighter.cs.meta | 11 + .../VRTK_ControllerTrackedCollider.cs | 233 + .../VRTK_ControllerTrackedCollider.cs.meta | 11 + .../Interactors/VRTK_InteractGrab.cs | 627 + .../Interactors/VRTK_InteractGrab.cs.meta | 11 + .../Interactors/VRTK_InteractNearTouch.cs | 254 + .../VRTK_InteractNearTouch.cs.meta | 11 + .../Interactors/VRTK_InteractTouch.cs | 538 + .../Interactors/VRTK_InteractTouch.cs.meta | 11 + .../Interactors/VRTK_InteractUse.cs | 416 + .../Interactors/VRTK_InteractUse.cs.meta | 11 + .../Interactors/VRTK_ObjectAutoGrab.cs | 186 + .../Interactors/VRTK_ObjectAutoGrab.cs.meta | 11 + .../Interactions/VRTK_ControllerHaptics.cs | 169 + .../VRTK_ControllerHaptics.cs.meta | 12 + .../Interactions/VRTK_ObjectAppearance.cs | 322 + .../VRTK_ObjectAppearance.cs.meta | 12 + .../VRTK/Source/Scripts/Internal.meta | 9 + .../Source/Scripts/Internal/Attributes.meta | 9 + .../Attributes/MinMaxRangeAttribute.cs | 16 + .../Attributes/MinMaxRangeAttribute.cs.meta | 12 + .../Attributes/ObsoleteInspectorAttribute.cs | 7 + .../ObsoleteInspectorAttribute.cs.meta | 12 + .../Source/Scripts/Internal/DataTypes.meta | 9 + .../Scripts/Internal/DataTypes/Limits2D.cs | 41 + .../Internal/DataTypes/Limits2D.cs.meta | 12 + .../Internal/DataTypes/Vector3State.cs | 33 + .../Internal/DataTypes/Vector3State.cs.meta | 12 + .../VRTK/Source/Scripts/Internal/Shaders.meta | 9 + .../AdaptiveQualityDebugVisualization.shader | 85 + ...ptiveQualityDebugVisualization.shader.meta | 9 + .../Shaders/TransparentFresnelBehind.shader | 72 + .../TransparentFresnelBehind.shader.meta | 9 + .../Scripts/Internal/Shaders/UIOverlay.shader | 102 + .../Internal/Shaders/UIOverlay.shader.meta | 9 + .../Shaders/Unlit_TransparentColor.shader | 30 + .../Unlit_TransparentColor.shader.meta | 9 + .../Internal/Shaders/VRTK_OutlineBasic.shader | 104 + .../Shaders/VRTK_OutlineBasic.shader.meta | 9 + .../Internal/Shaders/VRTK_TunnelEffect.shader | 75 + .../Shaders/VRTK_TunnelEffect.shader.meta | 9 + .../Scripts/Internal/VRTK_CollisionTracker.cs | 110 + .../Internal/VRTK_CollisionTracker.cs.meta | 12 + .../Internal/VRTK_ControllerReference.cs | 208 + .../Internal/VRTK_ControllerReference.cs.meta | 12 + .../Scripts/Internal/VRTK_CurveGenerator.cs | 424 + .../Internal/VRTK_CurveGenerator.cs.meta | 12 + .../Source/Scripts/Internal/VRTK_Defines.cs | 85 + .../Scripts/Internal/VRTK_Defines.cs.meta | 12 + .../Scripts/Internal/VRTK_EventSystem.cs | 103 + .../Scripts/Internal/VRTK_EventSystem.cs.meta | 12 + .../Source/Scripts/Internal/VRTK_Logger.cs | 190 + .../Scripts/Internal/VRTK_Logger.cs.meta | 12 + .../Scripts/Internal/VRTK_ObjectCache.cs | 11 + .../Scripts/Internal/VRTK_ObjectCache.cs.meta | 12 + .../Scripts/Internal/VRTK_PlayerObject.cs | 84 + .../Internal/VRTK_PlayerObject.cs.meta | 12 + .../Internal/VRTK_SDKControllerReady.cs | 114 + .../Internal/VRTK_SDKControllerReady.cs.meta | 12 + .../Scripts/Internal/VRTK_ScreenFade.cs | 74 + .../Scripts/Internal/VRTK_ScreenFade.cs.meta | 12 + .../Internal/VRTK_TrackedController.cs | 261 + .../Internal/VRTK_TrackedController.cs.meta | 12 + .../Scripts/Internal/VRTK_TrackedHeadset.cs | 17 + .../Internal/VRTK_TrackedHeadset.cs.meta | 12 + .../Scripts/Internal/VRTK_TrackedObject.cs | 117 + .../Internal/VRTK_TrackedObject.cs.meta | 13 + .../Scripts/Internal/VRTK_TunnelEffect.cs | 19 + .../Internal/VRTK_TunnelEffect.cs.meta | 12 + .../Internal/VRTK_UIGraphicRaycaster.cs | 164 + .../Internal/VRTK_UIGraphicRaycaster.cs.meta | 12 + .../Scripts/Internal/VRTK_VRInputModule.cs | 344 + .../Internal/VRTK_VRInputModule.cs.meta | 12 + .../VRTK/Source/Scripts/Locomotion.meta | 9 + .../Locomotion/ObjectControlActions.meta | 9 + .../VRTK_BaseObjectControlAction.cs | 227 + .../VRTK_BaseObjectControlAction.cs.meta | 12 + .../VRTK_RotateObjectControlAction.cs | 51 + .../VRTK_RotateObjectControlAction.cs.meta | 11 + .../VRTK_SlideObjectControlAction.cs | 117 + .../VRTK_SlideObjectControlAction.cs.meta | 11 + .../VRTK_SnapRotateObjectControlAction.cs | 71 + ...VRTK_SnapRotateObjectControlAction.cs.meta | 11 + .../VRTK_WarpObjectControlAction.cs | 103 + .../VRTK_WarpObjectControlAction.cs.meta | 11 + .../Scripts/Locomotion/VRTK_BasicTeleport.cs | 438 + .../Locomotion/VRTK_BasicTeleport.cs.meta | 11 + .../Scripts/Locomotion/VRTK_ButtonControl.cs | 163 + .../Locomotion/VRTK_ButtonControl.cs.meta | 11 + .../Scripts/Locomotion/VRTK_DashTeleport.cs | 203 + .../Locomotion/VRTK_DashTeleport.cs.meta | 11 + .../Scripts/Locomotion/VRTK_DragWorld.cs | 439 + .../Scripts/Locomotion/VRTK_DragWorld.cs.meta | 11 + .../Locomotion/VRTK_HeightAdjustTeleport.cs | 98 + .../VRTK_HeightAdjustTeleport.cs.meta | 11 + .../Scripts/Locomotion/VRTK_MoveInPlace.cs | 535 + .../Locomotion/VRTK_MoveInPlace.cs.meta | 11 + .../Scripts/Locomotion/VRTK_ObjectControl.cs | 259 + .../Locomotion/VRTK_ObjectControl.cs.meta | 12 + .../Scripts/Locomotion/VRTK_PlayerClimb.cs | 349 + .../Locomotion/VRTK_PlayerClimb.cs.meta | 11 + .../Scripts/Locomotion/VRTK_SlingshotJump.cs | 327 + .../Locomotion/VRTK_SlingshotJump.cs.meta | 11 + .../Scripts/Locomotion/VRTK_StepMultiplier.cs | 191 + .../Locomotion/VRTK_StepMultiplier.cs.meta | 11 + ...RTK_TeleportDisableOnControllerObscured.cs | 85 + ...eleportDisableOnControllerObscured.cs.meta | 11 + .../VRTK_TeleportDisableOnHeadsetCollision.cs | 86 + ..._TeleportDisableOnHeadsetCollision.cs.meta | 11 + .../Locomotion/VRTK_TouchpadControl.cs | 164 + .../Locomotion/VRTK_TouchpadControl.cs.meta | 11 + .../Scripts/Locomotion/VRTK_TunnelOverlay.cs | 208 + .../Locomotion/VRTK_TunnelOverlay.cs.meta | 11 + .../VRTK/Source/Scripts/Pointers.meta | 9 + .../Scripts/Pointers/PointerRenderers.meta | 9 + .../VRTK_BasePointerRenderer.cs | 681 + .../VRTK_BasePointerRenderer.cs.meta | 12 + .../VRTK_BezierPointerRenderer.cs | 397 + .../VRTK_BezierPointerRenderer.cs.meta | 11 + .../VRTK_StraightPointerRenderer.cs | 263 + .../VRTK_StraightPointerRenderer.cs.meta | 11 + .../Pointers/VRTK_DestinationMarker.cs | 178 + .../Pointers/VRTK_DestinationMarker.cs.meta | 12 + .../Scripts/Pointers/VRTK_PlayAreaCursor.cs | 540 + .../Pointers/VRTK_PlayAreaCursor.cs.meta | 11 + .../Source/Scripts/Pointers/VRTK_Pointer.cs | 755 + .../Scripts/Pointers/VRTK_Pointer.cs.meta | 11 + .../VRTK/Source/Scripts/Presence.meta | 9 + .../Scripts/Presence/VRTK_BodyPhysics.cs | 1428 ++ .../Scripts/Presence/VRTK_BodyPhysics.cs.meta | 11 + .../Scripts/Presence/VRTK_HeadsetCollision.cs | 281 + .../Presence/VRTK_HeadsetCollision.cs.meta | 11 + .../Presence/VRTK_HeadsetCollisionFade.cs | 98 + .../VRTK_HeadsetCollisionFade.cs.meta | 11 + .../Presence/VRTK_HeadsetControllerAware.cs | 267 + .../VRTK_HeadsetControllerAware.cs.meta | 11 + .../Scripts/Presence/VRTK_HeadsetFade.cs | 178 + .../Scripts/Presence/VRTK_HeadsetFade.cs.meta | 11 + .../Scripts/Presence/VRTK_HipTracking.cs | 73 + .../Scripts/Presence/VRTK_HipTracking.cs.meta | 11 + .../Scripts/Presence/VRTK_PositionRewind.cs | 331 + .../Presence/VRTK_PositionRewind.cs.meta | 11 + Assets/VIRTUOSO/VRTK/Source/Scripts/UI.meta | 9 + .../VRTK/Source/Scripts/UI/VRTK_UICanvas.cs | 249 + .../Source/Scripts/UI/VRTK_UICanvas.cs.meta | 11 + .../Source/Scripts/UI/VRTK_UIDraggableItem.cs | 209 + .../Scripts/UI/VRTK_UIDraggableItem.cs.meta | 11 + .../VRTK/Source/Scripts/UI/VRTK_UIDropZone.cs | 46 + .../Source/Scripts/UI/VRTK_UIDropZone.cs.meta | 11 + .../VRTK/Source/Scripts/UI/VRTK_UIPointer.cs | 566 + .../Source/Scripts/UI/VRTK_UIPointer.cs.meta | 11 + .../VRTK/Source/Scripts/Utilities.meta | 9 + .../Utilities/ControllerModelSettings.meta | 9 + .../VRTK_ControllerElementHighlighters.cs | 31 + ...VRTK_ControllerElementHighlighters.cs.meta | 12 + .../VRTK_ControllerModelElementPaths.cs | 30 + .../VRTK_ControllerModelElementPaths.cs.meta | 12 + .../Scripts/Utilities/ObjectFollow.meta | 9 + .../ObjectFollow/VRTK_ObjectFollow.cs | 170 + .../ObjectFollow/VRTK_ObjectFollow.cs.meta | 12 + .../ObjectFollow/VRTK_RigidbodyFollow.cs | 186 + .../ObjectFollow/VRTK_RigidbodyFollow.cs.meta | 11 + .../ObjectFollow/VRTK_TransformFollow.cs | 190 + .../ObjectFollow/VRTK_TransformFollow.cs.meta | 11 + .../VRTK/Source/Scripts/Utilities/SDK.meta | 3 + .../Scripts/Utilities/SDK/VRTK_SDKInfo.cs | 214 + .../Utilities/SDK/VRTK_SDKInfo.cs.meta | 12 + .../Scripts/Utilities/SDK/VRTK_SDKManager.cs | 1220 ++ .../Utilities/SDK/VRTK_SDKManager.cs.meta | 11 + .../Scripts/Utilities/SDK/VRTK_SDKSetup.cs | 733 + .../Utilities/SDK/VRTK_SDKSetup.cs.meta | 11 + .../Source/Scripts/Utilities/UnityEvents.meta | 9 + .../VRTK_BaseControllable_UnityEvents.cs | 71 + .../VRTK_BaseControllable_UnityEvents.cs.meta | 11 + .../VRTK_BasicTeleport_UnityEvents.cs | 38 + .../VRTK_BasicTeleport_UnityEvents.cs.meta | 11 + .../VRTK_BodyPhysics_UnityEvents.cs | 114 + .../VRTK_BodyPhysics_UnityEvents.cs.meta | 11 + ..._ControlAnimationGrabAttach_UnityEvents.cs | 47 + ...rolAnimationGrabAttach_UnityEvents.cs.meta | 11 + .../VRTK_ControllerEvents_UnityEvents.cs | 422 + .../VRTK_ControllerEvents_UnityEvents.cs.meta | 11 + ...ontrollerRigidbodyActivator_UnityEvents.cs | 38 + ...llerRigidbodyActivator_UnityEvents.cs.meta | 11 + .../VRTK_ControllerTooltips_UnityEvents.cs | 38 + ...RTK_ControllerTooltips_UnityEvents.cs.meta | 11 + .../VRTK_DashTeleport_UnityEvents.cs | 38 + .../VRTK_DashTeleport_UnityEvents.cs.meta | 11 + .../VRTK_DestinationMarker_UnityEvents.cs | 54 + ...VRTK_DestinationMarker_UnityEvents.cs.meta | 11 + .../VRTK_DestinationPoint_UnityEvents.cs | 62 + .../VRTK_DestinationPoint_UnityEvents.cs.meta | 11 + .../VRTK_HeadsetCollision_UnityEvents.cs | 38 + .../VRTK_HeadsetCollision_UnityEvents.cs.meta | 11 + ...VRTK_HeadsetControllerAware_UnityEvents.cs | 57 + ...HeadsetControllerAware_UnityEvents.cs.meta | 11 + .../VRTK_HeadsetFade_UnityEvents.cs | 57 + .../VRTK_HeadsetFade_UnityEvents.cs.meta | 11 + ...nteractControllerAppearance_UnityEvents.cs | 89 + ...ctControllerAppearance_UnityEvents.cs.meta | 12 + .../VRTK_InteractGrab_UnityEvents.cs | 70 + .../VRTK_InteractGrab_UnityEvents.cs.meta | 11 + .../VRTK_InteractHaptics_UnityEvents.cs | 54 + .../VRTK_InteractHaptics_UnityEvents.cs.meta | 11 + .../VRTK_InteractNearTouch_UnityEvents.cs | 38 + ...VRTK_InteractNearTouch_UnityEvents.cs.meta | 11 + ...TK_InteractObjectAppearance_UnityEvents.cs | 54 + ...teractObjectAppearance_UnityEvents.cs.meta | 11 + ...K_InteractObjectHighlighter_UnityEvents.cs | 38 + ...eractObjectHighlighter_UnityEvents.cs.meta | 11 + .../VRTK_InteractTouch_UnityEvents.cs | 70 + .../VRTK_InteractTouch_UnityEvents.cs.meta | 11 + .../VRTK_InteractUse_UnityEvents.cs | 70 + .../VRTK_InteractUse_UnityEvents.cs.meta | 11 + .../VRTK_InteractableObject_UnityEvents.cs | 114 + ...RTK_InteractableObject_UnityEvents.cs.meta | 11 + ...RTK_MoveTransformGrabAttach_UnityEvents.cs | 127 + ...oveTransformGrabAttach_UnityEvents.cs.meta | 11 + .../VRTK_ObjectAutoGrab_UnityEvents.cs | 30 + .../VRTK_ObjectAutoGrab_UnityEvents.cs.meta | 11 + .../VRTK_ObjectControl_UnityEvents.cs | 38 + .../VRTK_ObjectControl_UnityEvents.cs.meta | 11 + .../VRTK_ObjectTooltip_UnityEvents.cs | 38 + .../VRTK_ObjectTooltip_UnityEvents.cs.meta | 11 + .../VRTK_PlayAreaCursor_UnityEvents.cs | 38 + .../VRTK_PlayAreaCursor_UnityEvents.cs.meta | 11 + .../VRTK_PlayerClimb_UnityEvents.cs | 38 + .../VRTK_PlayerClimb_UnityEvents.cs.meta | 11 + ...K_PointerDirectionIndicator_UnityEvents.cs | 30 + ...nterDirectionIndicator_UnityEvents.cs.meta | 11 + .../UnityEvents/VRTK_Pointer_UnityEvents.cs | 65 + .../VRTK_Pointer_UnityEvents.cs.meta | 11 + .../VRTK_PositionRewind_UnityEvents.cs | 30 + .../VRTK_PositionRewind_UnityEvents.cs.meta | 11 + ...K_RotateTransformGrabAttach_UnityEvents.cs | 63 + ...ateTransformGrabAttach_UnityEvents.cs.meta | 11 + .../VRTK_SDKManager_UnityEvents.cs | 28 + .../VRTK_SDKManager_UnityEvents.cs.meta | 11 + .../UnityEvents/VRTK_SDKSetup_UnityEvents.cs | 36 + .../VRTK_SDKSetup_UnityEvents.cs.meta | 11 + .../VRTK_SlingshotJump_UnityEvents.cs | 30 + .../VRTK_SlingshotJump_UnityEvents.cs.meta | 11 + .../VRTK_UIDraggableItem_UnityEvents.cs | 38 + .../VRTK_UIDraggableItem_UnityEvents.cs.meta | 11 + .../UnityEvents/VRTK_UIPointer_UnityEvents.cs | 94 + .../VRTK_UIPointer_UnityEvents.cs.meta | 11 + .../Utilities/UnityEvents/VRTK_UnityEvents.cs | 36 + .../UnityEvents/VRTK_UnityEvents.cs.meta | 12 + .../Scripts/Utilities/VRTK_AdaptiveQuality.cs | 906 + .../Utilities/VRTK_AdaptiveQuality.cs.meta | 11 + .../Scripts/Utilities/VRTK_CustomRaycast.cs | 170 + .../Utilities/VRTK_CustomRaycast.cs.meta | 11 + .../Scripts/Utilities/VRTK_DeviceFinder.cs | 545 + .../Utilities/VRTK_DeviceFinder.cs.meta | 12 + .../Scripts/Utilities/VRTK_NavMeshData.cs | 17 + .../Utilities/VRTK_NavMeshData.cs.meta | 11 + .../Scripts/Utilities/VRTK_PolicyList.cs | 210 + .../Scripts/Utilities/VRTK_PolicyList.cs.meta | 11 + .../Utilities/VRTK_SDKInputOverride.cs | 435 + .../Utilities/VRTK_SDKInputOverride.cs.meta | 11 + .../Scripts/Utilities/VRTK_SDKObjectAlias.cs | 75 + .../Utilities/VRTK_SDKObjectAlias.cs.meta | 11 + .../Scripts/Utilities/VRTK_SDKObjectState.cs | 146 + .../Utilities/VRTK_SDKObjectState.cs.meta | 11 + .../Utilities/VRTK_SDKTransformModify.cs | 121 + .../Utilities/VRTK_SDKTransformModify.cs.meta | 11 + .../Scripts/Utilities/VRTK_SharedMethods.cs | 838 + .../Utilities/VRTK_SharedMethods.cs.meta | 12 + .../Utilities/VRTK_VelocityEstimator.cs | 175 + .../Utilities/VRTK_VelocityEstimator.cs.meta | 11 + LICENSE => LICENSE.md | 4 +- ProjectSettings/AudioManager.asset | 15 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 29 + ProjectSettings/EditorBuildSettings.asset | 28 + ProjectSettings/EditorSettings.asset | 15 + ProjectSettings/GraphicsSettings.asset | 63 + ProjectSettings/InputManager.asset | 23 + ProjectSettings/NavMeshAreas.asset | 71 + ProjectSettings/NetworkManager.asset | 8 + ProjectSettings/Physics2DSettings.asset | 25 + ProjectSettings/ProjectSettings.asset | 753 + ProjectSettings/QualitySettings.asset | 185 + ProjectSettings/TagManager.asset | 55 + ProjectSettings/TimeManager.asset | 8 + ProjectSettings/UnityConnectSettings.asset | 29 + THIRD_PARTY_NOTICES.md | 50 + actions.json | 194 + binding_holographic_hmd.json | 27 + binding_rift.json | 27 + binding_vive.json | 27 + binding_vive_pro.json | 27 + binding_vive_tracker_camera.json | 23 + bindings_holographic_controller.json | 306 + bindings_knuckles.json | 469 + bindings_oculus_touch.json | 421 + bindings_vive_controller.json | 419 + 1119 files changed, 120294 insertions(+), 2 deletions(-) create mode 100644 .editorconfig create mode 100644 Assets/VIRTUOSO.meta create mode 100644 Assets/VIRTUOSO/Config.meta create mode 100644 Assets/VIRTUOSO/Config/actions.json create mode 100644 Assets/VIRTUOSO/Config/actions.json.meta create mode 100644 Assets/VIRTUOSO/Config/binding_holographic_hmd.json create mode 100644 Assets/VIRTUOSO/Config/binding_holographic_hmd.json.meta create mode 100644 Assets/VIRTUOSO/Config/binding_rift.json create mode 100644 Assets/VIRTUOSO/Config/binding_rift.json.meta create mode 100644 Assets/VIRTUOSO/Config/binding_vive.json create mode 100644 Assets/VIRTUOSO/Config/binding_vive.json.meta create mode 100644 Assets/VIRTUOSO/Config/binding_vive_pro.json create mode 100644 Assets/VIRTUOSO/Config/binding_vive_pro.json.meta create mode 100644 Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json create mode 100644 Assets/VIRTUOSO/Config/binding_vive_tracker_camera.json.meta create mode 100644 Assets/VIRTUOSO/Config/bindings_holographic_controller.json create mode 100644 Assets/VIRTUOSO/Config/bindings_holographic_controller.json.meta create mode 100644 Assets/VIRTUOSO/Config/bindings_knuckles.json create mode 100644 Assets/VIRTUOSO/Config/bindings_knuckles.json.meta create mode 100644 Assets/VIRTUOSO/Config/bindings_oculus_touch.json create mode 100644 Assets/VIRTUOSO/Config/bindings_oculus_touch.json.meta create mode 100644 Assets/VIRTUOSO/Config/bindings_vive_controller.json create mode 100644 Assets/VIRTUOSO/Config/bindings_vive_controller.json.meta create mode 100644 Assets/VIRTUOSO/Examples.meta create mode 100644 Assets/VIRTUOSO/Examples/Haptic Example Scene.unity create mode 100644 Assets/VIRTUOSO/Examples/Haptic Example Scene.unity.meta create mode 100644 Assets/VIRTUOSO/Examples/Scripted Objects.meta create mode 100644 Assets/VIRTUOSO/Examples/Scripted Objects/Gestures.meta create mode 100644 Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset create mode 100644 Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Grab.asset.meta create mode 100644 Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset create mode 100644 Assets/VIRTUOSO/Examples/Scripted Objects/Gestures/Pinch.asset.meta create mode 100644 Assets/VIRTUOSO/Materials.meta create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Active.mat.meta create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternHitLocation_Inactive.mat.meta create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternHitVisualization.mat.meta create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat create mode 100644 Assets/VIRTUOSO/Materials/HapticPatternLineRenderer.mat.meta create mode 100644 Assets/VIRTUOSO/Materials/UnlitWhite.mat create mode 100644 Assets/VIRTUOSO/Materials/UnlitWhite.mat.meta create mode 100644 Assets/VIRTUOSO/Prefabs.meta create mode 100644 Assets/VIRTUOSO/Prefabs/HapticSDK.meta create mode 100644 Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab create mode 100644 Assets/VIRTUOSO/Prefabs/HapticSDK/Haptic Visualization Body.prefab.meta create mode 100644 Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab create mode 100644 Assets/VIRTUOSO/Prefabs/HapticSDK/Hit Location.prefab.meta create mode 100644 Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab create mode 100644 Assets/VIRTUOSO/Prefabs/SteamVR (Pre 2.0).prefab.meta create mode 100644 Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab create mode 100644 Assets/VIRTUOSO/Prefabs/[VRTK_SDKManager].prefab.meta create mode 100644 Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab create mode 100644 Assets/VIRTUOSO/Prefabs/[VRTK_Scripts].prefab.meta create mode 100644 Assets/VIRTUOSO/Resources.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/ChestBack.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/ChestFront.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftIndex.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftMiddle.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftPinky.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftRing.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_LeftThumb.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightIndex.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightMiddle.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightPinky.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightRing.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Finger_RightThumb.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/Head.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftFoot.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftForearm.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftHand.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/LeftLeg.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightFoot.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightForearm.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightHand.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset create mode 100644 Assets/VIRTUOSO/Resources/BodyCoordinates/RightLeg.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Curves.meta create mode 100644 Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset create mode 100644 Assets/VIRTUOSO/Resources/Curves/DownAndAroundCurve.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset create mode 100644 Assets/VIRTUOSO/Resources/Curves/DownToLeftCurve.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset create mode 100644 Assets/VIRTUOSO/Resources/Curves/DownToRightCurve.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset create mode 100644 Assets/VIRTUOSO/Resources/Curves/RampDown180Curve.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset create mode 100644 Assets/VIRTUOSO/Resources/Curves/RampDownCurve.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset create mode 100644 Assets/VIRTUOSO/Resources/Curves/RampDownUpCurve.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings.meta create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsBacktVestMapping.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFaceMapping.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsFrontVestMapping.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsLeftWristMapping.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset create mode 100644 Assets/VIRTUOSO/Resources/DeviceMappings/BHapticsRightWristMapping.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Editor.meta create mode 100644 Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset create mode 100644 Assets/VIRTUOSO/Resources/Editor/HapticSettings.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Patterns.meta create mode 100644 Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset create mode 100644 Assets/VIRTUOSO/Resources/Patterns/AnotherTest.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset create mode 100644 Assets/VIRTUOSO/Resources/Patterns/AroundPattern.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset create mode 100644 Assets/VIRTUOSO/Resources/Patterns/CrossPattern.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset create mode 100644 Assets/VIRTUOSO/Resources/Patterns/RampDown180Pattern.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset create mode 100644 Assets/VIRTUOSO/Resources/Patterns/RampDownPattern.asset.meta create mode 100644 Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset create mode 100644 Assets/VIRTUOSO/Resources/Patterns/RampDownUpPattern.asset.meta create mode 100644 Assets/VIRTUOSO/Scriptable Objects.meta create mode 100644 Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data.meta create mode 100644 Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset create mode 100644 Assets/VIRTUOSO/Scriptable Objects/Line Renderer Data/HapticPatternWindowLineRenderer.asset.meta create mode 100644 Assets/VIRTUOSO/Scripts.meta create mode 100644 Assets/VIRTUOSO/Scripts/Attributes.meta create mode 100644 Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs create mode 100644 Assets/VIRTUOSO/Scripts/Attributes/HideMethodFromInspectorAttribute.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/AdvancedGestureEditor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/GenericReactionEditor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/GestureReactionEditor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/HapticManagerEditor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/ReactorEditor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectFollowerEditor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Editors/TrackedObjectIDEditor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/PropertyDrawers/TimelineEventSelectionDrawer.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Windows.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Windows/ConfigureHapticCharacter.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs create mode 100644 Assets/VIRTUOSO/Scripts/Editor/Windows/HapticSettingsWindow.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/ArgSender.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/ArgSender/ControllerEventArgSender.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/ArgSender/EventArgSender.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/ArgSender/SnapEventArgSender.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/EventArgs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/EventArgs/ControllerReactionEventArgs.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/EventArgs/InteractionAreaEventArgs.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/EventArgs/SnapReactionEventArgs.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/TimelineEvent.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/TimelineEventSelection.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs create mode 100644 Assets/VIRTUOSO/Scripts/Events/VirtuosoEvent.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Gestures.meta create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/AdvancedGesture.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/Gesture.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/GestureControllerEvent.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Gestures/GestureInteraction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinate.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateHit.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/BodyCoordinateSpace.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/BHapticsDevice.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/HapticDevice.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ManusVRDevice.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/OculusDevice.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SDK_BHapticsDefines.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/SenseGloveDevice.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/Haptic Devices/ViveDevice.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticEnums.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticManager.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticPatternCollisionHolder.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/HapticSystemAttribute.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableBodyCoordinate.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableDeviceMapping.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticCurve.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticPattern.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/ScriptableObjects/ScriptableHapticSettings.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitListener.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/BodyHitUI.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/CreateHapticPattern.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticPatternWindow.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticSceneViewGUI.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticVisualizer.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs create mode 100644 Assets/VIRTUOSO/Scripts/HapticSDK/UI and Visualization/HapticsUI.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/ChannelInteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/EngulfInteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/EnterExitInteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/InteractionArea_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/MultiInteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/TimeInteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/TorqueInteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs create mode 100644 Assets/VIRTUOSO/Scripts/InteractionAreas/VolumeInteractionArea.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Interfaces.meta create mode 100644 Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Interfaces/IReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs create mode 100644 Assets/VIRTUOSO/Scripts/Interfaces/IVolumeFiller.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ColorChangeReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ControllerAppearanceReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ForceReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/GenericReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/HapticReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/LinearMotionReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/Reactor.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/ReactorEditorInfo.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/SnapReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs create mode 100644 Assets/VIRTUOSO/Scripts/Reactions/UnityEventReaction.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/Constants.cs create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/Constants.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/EventUtility.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/ScriptableLineRenderer.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/ScriptableObjectUtility.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectFollower.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/TrackedObjectID.cs.meta create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs create mode 100644 Assets/VIRTUOSO/Scripts/Utilities/VirtMath.cs.meta create mode 100644 Assets/VIRTUOSO/Shaders.meta create mode 100644 Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader create mode 100644 Assets/VIRTUOSO/Shaders/LineRendererOverlay.shader.meta create mode 100644 Assets/VIRTUOSO/VRTK.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/AdaptiveQualityDebugVisualization.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/DirectionArrows.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/OutlineBasic.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/SnapDropZoneEditorObject.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TooltipLine.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/TunnelOverlay.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/UIText.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Materials/Resources/WorldPointer.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Textures.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Textures/Crosshair.png.meta create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png create mode 100644 Assets/VIRTUOSO/VRTK/Internal/Textures/DirectionArrows.png.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Idle.mask.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Index.mask.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Middle.mask.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Pinky.mask.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Ring.mask.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Avatar Masks/Hand_Thumb.mask.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/Textures/VRTK_BasicHand_Texture.png.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/Materials/VRTK_BasicHand_Material.mat.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand.fbx.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/Models/VRTK_BasicHand_AnimationController.controller.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/BasicHands/VRTK_BasicHand.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/AvatarHands/VRTK_AvatarHandController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/ConsoleViewerCanvas.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ConsoleViewerCanvas/VRTK_ConsoleViewer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/ControllerRigidbodyActivator.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerRigidbodyActivator/VRTK_ControllerRigidbodyActivator.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/ControllerTooltips.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ControllerTooltips/VRTK_ControllerTooltips.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/DesktopCamera.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DesktopCamera/VRTK_DesktopCamera.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/DestinationPoint.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/DestinationPoint/VRTK_DestinationPoint.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/FramesPerSecondCanvas.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/FramesPerSecondCanvas/VRTK_FramesPerSecondViewer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/ObjectTooltip.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/ObjectTooltip/VRTK_ObjectTooltip.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/PanelMenu.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/PointerDirectionIndicator.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/PointerDirectionIndicator/VRTK_PointerDirectionIndicator.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenu.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/Arc.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/RadialButtonIcon.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/RadialMenuButton/UICircle.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_IndependentRadialMenuController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenu.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/RadialMenu/VRTK_RadialMenuController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/SDKSetupSwitcher.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/VRTK_SDKSetupSwitcher.cs create mode 100644 Assets/VIRTUOSO/VRTK/Prefabs/SDKSetupSwitcher/VRTK_SDKSetupSwitcher.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Attributes.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Attributes/MinMaxRangeDrawer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Attributes/MinMaxRangeDrawer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Attributes/ObsoleteInspectorDrawer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Attributes/ObsoleteInspectorDrawer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Attributes/SerializedPropertyExtensions.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Attributes/SerializedPropertyExtensions.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/DataTypes.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/DataTypes/Limits2DDrawer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/DataTypes/Limits2DDrawer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/DataTypes/Vector3StateDrawer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/DataTypes/Vector3StateDrawer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_internal.png create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_internal.png.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_obsolete.png create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_obsolete.png.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_prefab.png create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_prefab.png.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_usable.png create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/Icons/vrtk_script_usable.png.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_AdaptiveQualityEditor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_AdaptiveQualityEditor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_EditorUtilities.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_EditorUtilities.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_InteractHapticsEditor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_InteractHapticsEditor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_NavMeshDataEditor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_NavMeshDataEditor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_ObjectSetup.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_ObjectSetup.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_PolicyListEditor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_PolicyListEditor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_RadialMenuEditor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_RadialMenuEditor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_SDKManagerEditor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_SDKManagerEditor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_SDKSetupEditor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_SDKSetupEditor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_SupportInfoWindow.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Editor/VRTK_SupportInfoWindow.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_Base.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_Base.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseGestureLibrary.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseGestureLibrary.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseHand.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseHand.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_BaseTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_DescriptionAttribute.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_DescriptionAttribute.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_ScriptingDefineSymbolPredicateAttribute.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Base/SDK_ScriptingDefineSymbolPredicateAttribute.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/ABOUT.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/ABOUT.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/DaydreamReach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/DaydreamReach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Daydream/SDK_DaydreamTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/Resources/ControllerColliders.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/Resources/ControllerColliders/Fallback.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/Resources/ControllerColliders/Fallback.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackHand.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackHand.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Fallback/SDK_FallbackTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/Resources/ControllerColliders.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/Resources/ControllerColliders/HyperealSens.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/Resources/ControllerColliders/HyperealSens.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/HyperealVR/SDK_HyperealVRSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/Readme.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/Readme.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/SDK_LeapMotionDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/SDK_LeapMotionDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/SDK_LeapMotionGestureLibrary.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/SDK_LeapMotionGestureLibrary.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/SDK_LeapMotionHand.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/LeapMotion/SDK_LeapMotionHand.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/Readme.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/Readme.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/SDK_ManusVRDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/SDK_ManusVRDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/SDK_ManusVRGestureLibrary.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/SDK_ManusVRGestureLibrary.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/SDK_ManusVRHand.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/ManusVR/SDK_ManusVRHand.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/NoHands.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/NoHands/Readme.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/NoHands/Readme.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/NoHands/SDK_NoHand.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/NoHands/SDK_NoHand.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/NoHands/SDK_NoHandDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/NoHands/SDK_NoHandDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/Resources/ControllerColliders.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/Resources/ControllerColliders/OculusTouch_Left.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/Resources/ControllerColliders/OculusTouch_Left.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/Resources/ControllerColliders/OculusTouch_Right.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/Resources/ControllerColliders/OculusTouch_Right.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Oculus/SDK_OculusTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/Readme.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/Readme.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/SDK_SenseGloveDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/SDK_SenseGloveDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/SDK_SenseGloveGestureLibrary.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/SDK_SenseGloveGestureLibrary.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/SDK_SenseGloveHand.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SenseGlove/SDK_SenseGloveHand.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/Resources/ControllerColliders.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/Resources/ControllerColliders/Simulator.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/Resources/ControllerColliders/Simulator.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_ControllerSim.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_ControllerSim.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_InputSimulator.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_InputSimulator.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_SimTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_TrackerSim.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/SDK_TrackerSim.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/[VRSimulator_CameraRig].prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Simulator/[VRSimulator_CameraRig].prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/HTCVive.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/HTCVive.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVROculusTouch_Left.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVROculusTouch_Left.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVROculusTouch_Right.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVROculusTouch_Right.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVRWindowsMRController_Left.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVRWindowsMRController_Left.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVRWindowsMRController_Right.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/SteamVRWindowsMRController_Right.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/ValveKnuckles_Left.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/ValveKnuckles_Left.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/ValveKnuckles_Right.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/Resources/ControllerColliders/ValveKnuckles_Right.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/SteamVR/SDK_SteamVRTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityCameraRig.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityCameraRig.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityControllerTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityControllerTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityHeadsetTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnityHeadsetTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnitySystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/SDK_UnitySystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/[UnityBase_CameraRig].prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Unity/[UnityBase_CameraRig].prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/VRTK_SDK_Bridge.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/VRTK_SDK_Bridge.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/InteractionSourceExtensions.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/InteractionSourceExtensions.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsApiChecker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsApiChecker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsMR_Camera.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsMR_Camera.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsMR_ControllerManager.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsMR_ControllerManager.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsMR_TrackedObject.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/Resources/WindowsMR_TrackedObject.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/SDK_WindowsMRSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/[WindowsMR_CameraRig].prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/WindowsMR/[WindowsMR_CameraRig].prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/README.md create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/README.md.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/Resources.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/Resources/ControllerColliders.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/Resources/ControllerColliders/XimmerseCobra02.prefab create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/Resources/ControllerColliders/XimmerseCobra02.prefab.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseBoundaries.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseBoundaries.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseDefines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseDefines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/SDK/Ximmerse/SDK_XimmerseSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_BaseHighlighter.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_BaseHighlighter.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_MaterialColorSwapHighlighter.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_MaterialColorSwapHighlighter.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_MaterialPropertyBlockColorSwapHighlighter.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_MaterialPropertyBlockColorSwapHighlighter.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_OutlineObjectCopyHighlighter.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Highlighters/VRTK_OutlineObjectCopyHighlighter.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Artificial.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Artificial/VRTK_ArtificialPusher.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Artificial/VRTK_ArtificialPusher.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Artificial/VRTK_ArtificialRotator.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Artificial/VRTK_ArtificialRotator.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Artificial/VRTK_ArtificialSlider.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Artificial/VRTK_ArtificialSlider.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_BasePhysicsControllable.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_BasePhysicsControllable.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_PhysicsPusher.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_PhysicsPusher.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_PhysicsRotator.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_PhysicsRotator.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_PhysicsSlider.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/Physics/VRTK_PhysicsSlider.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/VRTK_BaseControllable.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/Controllables/VRTK_BaseControllable.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_BaseGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_BaseGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_BaseJointGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_BaseJointGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_ChildOfControllerGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_ChildOfControllerGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_ClimbableGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_ClimbableGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_ControlAnimationGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_ControlAnimationGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_CustomJointGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_CustomJointGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_FixedJointGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_FixedJointGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_MoveTransformGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_MoveTransformGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_RotateTransformGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_RotateTransformGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_RotatorTrackGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_RotatorTrackGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_SpringJointGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_SpringJointGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_TrackObjectGrabAttach.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/GrabAttachMechanics/VRTK_TrackObjectGrabAttach.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_AxisScaleGrabAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_AxisScaleGrabAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_BaseGrabAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_BaseGrabAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_ControlDirectionGrabAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_ControlDirectionGrabAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_SwapControllerGrabAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/SecondaryControllerGrabActions/VRTK_SwapControllerGrabAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_IgnoreInteractTouchColliders.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_IgnoreInteractTouchColliders.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractControllerAppearance.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractControllerAppearance.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractHaptics.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractHaptics.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractObjectAppearance.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractObjectAppearance.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractObjectHighlighter.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractObjectHighlighter.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractableListener.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractableListener.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractableObject.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_InteractableObject.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_ObjectTouchAutoInteract.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactables/VRTK_ObjectTouchAutoInteract.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ControllerEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ControllerEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ControllerHighlighter.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ControllerHighlighter.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ControllerTrackedCollider.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ControllerTrackedCollider.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractGrab.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractGrab.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractNearTouch.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractNearTouch.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractTouch.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractTouch.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractUse.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_InteractUse.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ObjectAutoGrab.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/Interactors/VRTK_ObjectAutoGrab.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/VRTK_ControllerHaptics.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/VRTK_ControllerHaptics.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/VRTK_ObjectAppearance.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Interactions/VRTK_ObjectAppearance.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Attributes.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Attributes/MinMaxRangeAttribute.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Attributes/MinMaxRangeAttribute.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Attributes/ObsoleteInspectorAttribute.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Attributes/ObsoleteInspectorAttribute.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/DataTypes.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/DataTypes/Limits2D.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/DataTypes/Limits2D.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/DataTypes/Vector3State.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/DataTypes/Vector3State.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/AdaptiveQualityDebugVisualization.shader create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/AdaptiveQualityDebugVisualization.shader.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/TransparentFresnelBehind.shader create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/TransparentFresnelBehind.shader.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/UIOverlay.shader create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/UIOverlay.shader.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/Unlit_TransparentColor.shader create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/Unlit_TransparentColor.shader.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/VRTK_OutlineBasic.shader create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/VRTK_OutlineBasic.shader.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/VRTK_TunnelEffect.shader create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/Shaders/VRTK_TunnelEffect.shader.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_CollisionTracker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_CollisionTracker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_ControllerReference.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_ControllerReference.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_CurveGenerator.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_CurveGenerator.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_Defines.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_Defines.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_EventSystem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_EventSystem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_Logger.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_Logger.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_ObjectCache.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_ObjectCache.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_PlayerObject.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_PlayerObject.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_SDKControllerReady.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_SDKControllerReady.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_ScreenFade.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_ScreenFade.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TrackedController.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TrackedController.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TrackedHeadset.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TrackedHeadset.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TrackedObject.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TrackedObject.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TunnelEffect.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_TunnelEffect.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_UIGraphicRaycaster.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_UIGraphicRaycaster.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_VRInputModule.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Internal/VRTK_VRInputModule.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_BaseObjectControlAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_BaseObjectControlAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_RotateObjectControlAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_RotateObjectControlAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_SlideObjectControlAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_SlideObjectControlAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_SnapRotateObjectControlAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_SnapRotateObjectControlAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_WarpObjectControlAction.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/ObjectControlActions/VRTK_WarpObjectControlAction.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_BasicTeleport.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_BasicTeleport.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_ButtonControl.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_ButtonControl.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_DashTeleport.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_DashTeleport.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_DragWorld.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_DragWorld.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_HeightAdjustTeleport.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_HeightAdjustTeleport.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_MoveInPlace.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_MoveInPlace.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_ObjectControl.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_ObjectControl.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_PlayerClimb.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_PlayerClimb.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_SlingshotJump.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_SlingshotJump.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_StepMultiplier.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_StepMultiplier.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TeleportDisableOnControllerObscured.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TeleportDisableOnControllerObscured.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TeleportDisableOnHeadsetCollision.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TeleportDisableOnHeadsetCollision.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TouchpadControl.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TouchpadControl.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TunnelOverlay.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Locomotion/VRTK_TunnelOverlay.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/PointerRenderers.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/PointerRenderers/VRTK_BasePointerRenderer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/PointerRenderers/VRTK_BasePointerRenderer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/PointerRenderers/VRTK_BezierPointerRenderer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/PointerRenderers/VRTK_BezierPointerRenderer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/PointerRenderers/VRTK_StraightPointerRenderer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/PointerRenderers/VRTK_StraightPointerRenderer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/VRTK_DestinationMarker.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/VRTK_DestinationMarker.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/VRTK_PlayAreaCursor.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/VRTK_PlayAreaCursor.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/VRTK_Pointer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Pointers/VRTK_Pointer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_BodyPhysics.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_BodyPhysics.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetCollision.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetCollision.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetCollisionFade.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetCollisionFade.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetControllerAware.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetControllerAware.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetFade.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HeadsetFade.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HipTracking.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_HipTracking.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_PositionRewind.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Presence/VRTK_PositionRewind.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UICanvas.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UICanvas.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UIDraggableItem.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UIDraggableItem.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UIDropZone.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UIDropZone.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UIPointer.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/UI/VRTK_UIPointer.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ControllerModelSettings.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ControllerModelSettings/VRTK_ControllerElementHighlighters.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ControllerModelSettings/VRTK_ControllerElementHighlighters.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ControllerModelSettings/VRTK_ControllerModelElementPaths.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ControllerModelSettings/VRTK_ControllerModelElementPaths.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ObjectFollow.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ObjectFollow/VRTK_ObjectFollow.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ObjectFollow/VRTK_ObjectFollow.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ObjectFollow/VRTK_RigidbodyFollow.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ObjectFollow/VRTK_RigidbodyFollow.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ObjectFollow/VRTK_TransformFollow.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/ObjectFollow/VRTK_TransformFollow.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/SDK.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/SDK/VRTK_SDKInfo.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/SDK/VRTK_SDKInfo.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/SDK/VRTK_SDKManager.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/SDK/VRTK_SDKManager.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/SDK/VRTK_SDKSetup.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/SDK/VRTK_SDKSetup.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_BaseControllable_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_BaseControllable_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_BasicTeleport_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_BasicTeleport_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_BodyPhysics_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_BodyPhysics_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControlAnimationGrabAttach_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControlAnimationGrabAttach_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControllerEvents_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControllerEvents_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControllerRigidbodyActivator_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControllerRigidbodyActivator_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControllerTooltips_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ControllerTooltips_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_DashTeleport_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_DashTeleport_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_DestinationMarker_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_DestinationMarker_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_DestinationPoint_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_DestinationPoint_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_HeadsetCollision_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_HeadsetCollision_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_HeadsetControllerAware_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_HeadsetControllerAware_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_HeadsetFade_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_HeadsetFade_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractControllerAppearance_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractControllerAppearance_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractGrab_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractGrab_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractHaptics_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractHaptics_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractNearTouch_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractNearTouch_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractObjectAppearance_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractObjectAppearance_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractObjectHighlighter_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractObjectHighlighter_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractTouch_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractTouch_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractUse_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractUse_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractableObject_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_InteractableObject_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_MoveTransformGrabAttach_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_MoveTransformGrabAttach_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ObjectAutoGrab_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ObjectAutoGrab_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ObjectControl_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ObjectControl_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ObjectTooltip_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_ObjectTooltip_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PlayAreaCursor_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PlayAreaCursor_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PlayerClimb_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PlayerClimb_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PointerDirectionIndicator_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PointerDirectionIndicator_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_Pointer_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_Pointer_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PositionRewind_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_PositionRewind_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_RotateTransformGrabAttach_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_RotateTransformGrabAttach_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_SDKManager_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_SDKManager_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_SDKSetup_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_SDKSetup_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_SlingshotJump_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_SlingshotJump_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_UIDraggableItem_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_UIDraggableItem_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_UIPointer_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_UIPointer_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_UnityEvents.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/UnityEvents/VRTK_UnityEvents.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_AdaptiveQuality.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_AdaptiveQuality.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_CustomRaycast.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_CustomRaycast.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_DeviceFinder.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_DeviceFinder.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_NavMeshData.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_NavMeshData.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_PolicyList.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_PolicyList.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKInputOverride.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKInputOverride.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKObjectAlias.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKObjectAlias.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKObjectState.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKObjectState.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKTransformModify.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SDKTransformModify.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SharedMethods.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_SharedMethods.cs.meta create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_VelocityEstimator.cs create mode 100644 Assets/VIRTUOSO/VRTK/Source/Scripts/Utilities/VRTK_VelocityEstimator.cs.meta rename LICENSE => LICENSE.md (94%) create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/NetworkManager.asset create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 THIRD_PARTY_NOTICES.md create mode 100644 actions.json create mode 100644 binding_holographic_hmd.json create mode 100644 binding_rift.json create mode 100644 binding_vive.json create mode 100644 binding_vive_pro.json create mode 100644 binding_vive_tracker_camera.json create mode 100644 bindings_holographic_controller.json create mode 100644 bindings_knuckles.json create mode 100644 bindings_oculus_touch.json create mode 100644 bindings_vive_controller.json 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 0000000000000000000000000000000000000000..3d5ff3146821096e8c2c97cc1c5ff7da964ac80b GIT binary patch literal 210 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�z|2j2cCmKE5BU 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

NMue9aC;4TKKfqAM%k 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 z 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

Yjb&)OF!ZCjk!jBd5N-q*`3zfY+aEsY5T{T z%KvI?`#JbuGrJ+0*+kdDSWHUg1J@5PeLxKEV~%c;M9fjs^G{fJ_wiH)pNt(rDEE8C zPd%Mb>yl7OS4RA#&L0{`%mT|WZD*HmBG||kNkEv?6_6)V6;`3xjd44dgPs2Js&gLn zUixdhSQnsbRUG$EFR*;a#^ZmRxUSyF<%|a&bo9|4s5hPCs9H1|8yDT5a28M&~2xMctbYO}^V zNuxetjlquXEx`w3mjZp(g-66u$v;BzQ`=E9>>Pnd^Gz3^uMM|4p)FZxpD<59QJd%? zdG=V^QbpQj^2|=FiwRi+bc;7x(WKf@>SS5MpcKE&%{^K8tJhV|j_pV@)a8k=%!GD+ z{L^)42B7TMvrDEUhIuY^9a#_Ty)vp_miW{)Iq78VM*frX<8GdBE)4=<2YUl73eqt>5nD$%$NgdaWs zs*X)>m$Vfn3s4(=laGX^?;@)CQMp(w%sn>T{rDWS>p9IM%>^%Gch;PKtF7lX?CgF0 zK3du9`STc{N>sK32{P&ze)CYovU_%KXJ#V#I?*8-W;Sx2XO_M_rT-?I{aCnsnFk^E zhz+Z(O(~~cgrj&z-EfuT{`DVBKQ{2gy8u&@3Phi*wc~scstdsPG2#u_76~i%V-%;_ ztj3{l1(gKs>+IooR|FN6`{UEJ{eaN3j2x1PN52ki8hWPR&{rH-!`T*{De_WM=d_ADLF3@2b`ga@z6zPcJ$`MQPs`l$+g(T z5|+y>L0Cbz$-`#>NHQ2WuD?hw=95b8a+*=X^{GzC>aZ(k&G8;`vRscnTbU;EclOS1O6t1kne|xV~s8^>LaTO2EM;Z8>m{v;v$n)yA zU5jVCoe)-Sq0bXk8m_-%AG_AWTga8vq#W;sFZK`>1m5h&nVL3e&1AUv9v3f ziLbCIX;e5>-%q#HSEAV?)VSrFcG=bK@5}!RwH2VIbNjGB>RzmALmL%fT1m95K>w=+ zWS;vr+D%*OeADPOaE$VMM2y*j)KjY7cd^IXA&!nmJ_Xx=g336qO6 zM*d1wT9LOhdlpit2k4Dqsk$F;D)F9Z&XI<%Q-+fE-Ur&&Hlr=p1}rtetrU~)>P-Y5{0t6JT!!_W*vPWYC5XIq+8VW95bj z0Hgh=@%xyejPU36gay3((7>B}j(@pH?Osdoa%S-1K!o`t;D#4MeVu;Dkjz=)4hn}F z35x_jLbfp+U)Pz4{iI^CBjeEUgoHNskaNV3WXql4J+ z9+k;UJ0gC2QXC;&7iyNsDO;@Q3QnDLOXzd<4f#VII})Gw^d7Qos`Tr?!#sDJ3ODHU zu_*uOI1)%&L3^?6s#&QX9`#9swIkc*NFpJh0w2`(F`d18$DG7#GWgG*&mx+4wA`q| zo>QxfPZ#y7?!P)ymh39HkO@G}yDxT?9L24sWpP$^S5J*royL8+e}05!QEqpl7Xqqm zO8LIDcyf*85oO~dZ#28G>4`^!j(Z!4 zt4?zKZ=}DOJ4o~PA@KIfB>w+l#MG#ik=>&adp{uJ?nZh@H7uam?;CE7Vk|L!w1~ zQh^Xe`%&|FcwOS+&Loq?d{7JKpP#iG@_(2v zJi~ZU$Z7T{up&X4hu}AQ2&3Ckw@MChe_TlRG+nxLU}aQG`+fERn_fGi#)(^!cs#j4 zdOTd~w+pfKP~}U}5)E~pXRT~9+2P;faj8;kXzo?gk)i1IdX@+jeR_wuzg6xPOFocm zG?sK#a4m!=bc#H8rEZ!eVWjQlipV(pPPQ*K@seoGxHEJau3pH4sg6Sj)|uVLA#X6-xPSs!jW0^_2_{$}N-?c@XJ zO(xxrM9lVC%ZE%vOrCC@`z%K*bI;I)sS0Kv&*Z_Miww(}yaxx}v1={^F0A!o;j4y0 z!Qs9j&aCTIUaRzngII~K=1@i%w{c}=CYOpIOK9G7I59i3iNt&>S#O@Wc?Nu5)G-Fn zPOtqNfREXsQO5P7#?1Gy<+X)a45Zp|{I#GG+3=FN+X5Lsd2H31cWjt~fu}SE?SZpi zvPz;qB=x-69yC*A=?ys3S_^fV351TVBjf8n739H{8Oc3ON!=oj4CGs?(C6h;Y12ba zg{DuV#a6++v{H?Y#xiAPwt_N!MXCp~9WAX@2jHK|P;%NYG&%PN!ast;y_Z;eVK%hG zzCH}OFBUx8W|9+wev!RZ-C{IKT_315T-B~xQnAUzznRoTsrR+E_?s)PwY+mR)tN9*2`l3Y(9PQinL=#GVhkc17;%D7jU1Zmsbz; z5G3=$lKDDij#k$F^-E5%+rYoAj76kuqeI$OrBr2c)W!{g_NArS={LR3Hd;Ak)^~a( zc$W4etUJ2wzy<$zuR_jbLyTO2!9n9`D$5euf>F^P!qHY-+y`AsEy;R%MV!L>uLhJq zgUoViVn0Lc*sm-2e1m8>o{BWIKg6T{6PxyRXbNg+I}`1kUh-H-oA_; zOS9~Y`2RexV*~hep;6a3KPrSdBMp%vD+>0tkw{DWm z;}e0JKS?QiBoWSIwz^6$=y^=iwUKE5!R&zdQxOgaSwqJztu%}oHv1u`&#`K4p3%6q zw)VNGe@CD_!r1y>dOHLWbnjqZFdLQ=L90sP3EkvbT^`0Pg#EcLSMa9BG?icb09KrO zq9R_pT-IrIfLBCB}1=fhV@3&eB6t#JsLIhYwJ{uBL1Go%dwsNVLB6U zB}Y4tyt`d@NwOCn@b};2=D)8)Y25A0G%sTVDP~HV$1`vOZ+}6$F%k+i3%-E$~co9n!%AnNaHf!`j5vo79x6{DE-=zh( zuh})B_I2=zs`?MX4=d^pkW+LSw3&ISfuRq$M#yHJjcxFH?@oLOWp%@L?llUu)A4r# zY22=p-uz8|Cot&nGbOsFXb=N0l1kQ+pewuibb9 zJL+RgtkTvUrLCB3F)LW(&vOG@~#GI5l2`OZtpdQMx$px3XerB+XzLx09UR-u==dvggdjj zM$g}{oFj4pG6jFUW^6jpUafuF;pF)B3fBJFB5kw1P}hb%_|X$@$^K?yc?6A(z^I89 zZpPdx+Y84PaoRW81`E4*sDc2P1aN}8XJP4)q!ns@a*wuj{jM}8e6j`)&87?i5Gu)| zP~BeIM&dn=^`;0Sd|e#XTqAC=9kAj*otCzB%y-{#6Yk&STgq3#E=c8At#Jg$?>=x@ z6V=Og!SC@}VqPLaTEi9aCW<1!g6gm2(x=WjSct>r?1})9Si(I$NkPYrVBIY~V85@c z%@+x<;VwjEV)n4+>U$HZynf$UXIdeLo^mkC{vHzl3M0~De zO@&k9w8YMS5#j7bBQ5 ze{zXb>#>FQwo8lnb#R3jeF^2JL9)L;)S_qel|K_8RpIKH+H)Z?X zs23&P3oTZErO$)6-Q`A)xG-~EswNoOIoq)6xDoJgf1%f2U_2rwf22@uH;K|5!d7~; zc(?Q;=FEz|UDMyqkIlDlPHadpD)0F*`rUC;W_039OHv_uA2v<$^J82`d9*^g(B%g2 zonh0+tRzmQay3hh-?V5SpB+XhSZe8Ep~C!^Wf`V_&AWpq-mXT?bq={tenZ!Jxe;9Q z+97GfkLKmgP%>8A&XQfycYTjnjnP)_<;fOk%L>&b79ce<%x?~Vj|i&S zC)TAAkOK`p_}t;-u_lM-KAd}hYWm9GX}=XmurdkhFt6r?9O-hu{tCpZgAEm*t)*D;DMee48kD zi7kDW7?qQ%K&w8vsI4!FAnvfG_6mcK^8SOR-GLL3S1YA8HBMV3-MC`@ir<(N9TK@+2E;(^?s6vCKU1*h( zYXtU)9%ptN)|#@&Qto#Sn`+*nn7xcjoKr_#Ms`DmeE<3>Ria4$a2~ZoQ<(a33g9}C zi+UaT-)6-^G*gNF*3tNo=i+A44SBDhfm@87&Zw?Q09g#?p9Ws zEoLfcn=K|yPD&}FGNqP^wvmY}X`-P(3W6Z;Jv8(FeSZJ=;2!UN-E+>p=kZZQ{Hp=zefPD)uQ1nh zPiDW}LjNo2AlHHI8K2m6vS0n|BM;I)v3xTJA*oeG>D=ea2U$G`N7x36p*%KKrsvf3 zsM=}&l<}pg&Vqxa&sW!Xg}1&rP2{!}FH*nwUh}$h8t82v_lEbxqfs%{raSoii=C){$K|bl^(-j# zFShwhcCnk&V^Gt}asJ)=#%LkSH~M%bx9%7pb*Jo`AlIZg>7!ZGbfLQrJ4{{M7*P3o zao<{x;!Ty_6w`pB6PM?owz>s+^u-%A*+EwjzLN#+XLJr<{_gY#=JPx7@(@3t_Um|U za^i$eeMmp{;+b!yLBYuI7x}VN2y|;UdTz;K+Y>pmkF8OoS9j9e$G#)QxsoT#$bvbY znP0<{7bUR**t~S!K$4k;Q^5P-Hd4&8odh~m#WpVx2U8=a>&S&nEY+|knQNR6E>z#9mx-opi z;gyOK+^?&}wa@vSed9ApJDk6B_JQo#UXQxC>4AOk(kilN&ZUge!tU^%HU?H?Mpix`WX$exAT z(Ne#u4bdsX!^5cN4y_Bk7$+3r@Y?~8$Sc%O^PQXnho5{}?SS6=b@~_C^+dzIVCGaj z`MGOCP~@A%i!6|(lS$uSj*A9@>Az@yMYzE~Y^anbeqvqwG-{9f7X9kuhmVZgSN~EP zRMj3kbF1uO0|JU|gP7N-d?dj)(XUO?v3pjl?kM6085M;4?nAY`+si4g;&q+7QJZU? z5xM^0tE2l}mvKltR3;k_@0aUQ#J}&HA3i?%;(_XxY<}V2Z!6d6I#NEK6CmPx-Q%3B zM|QvGNm!Q^UKV!&{S`FbO#2$BJ$)nJy{k}J*!O$l?wC{GcSXKIt_`WFYc!jQiodO3 z%0A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

fcU>))^16Fclev~? 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

9Me9E&I=7(jf+!zV0W5qOK3$oYp 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∈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 literal 0 HcmV?d00001 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