diff --git a/Assets/HoloToolkit-Examples/Input/Readme.meta b/Assets/HoloToolkit-Examples/Input/Readme.meta new file mode 100644 index 00000000000..add31d4eeed --- /dev/null +++ b/Assets/HoloToolkit-Examples/Input/Readme.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7c5bf737f134b55489a2bd58421b5351 +folderAsset: yes +timeCreated: 1523040171 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md b/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md new file mode 100644 index 00000000000..b7669ee859a --- /dev/null +++ b/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md @@ -0,0 +1,44 @@ +# Two Hand Manipulation & normal mode Bounding Box +![Two Hand Manipulation](/External/ReadMeImages/MRTK_TwoHandManipulation.jpg) +This example shows how you can make any object interactable with [TwoHandManipulatable script](/Assets/HoloToolkit/Input/Scripts/Utilities/Interactions/TwoHandManipulatable.cs). This script allows for an object to be movable, scalable, and rotatable with one or two hands. You may also configure the script on only enable certain manipulations. The script works with both HoloLens' gesture input and immersive headset's motion controller input. + +**Demo Video**: https://gfycat.com/ColossalEnlightenedAntipodesgreenparakeet + +The example also includes Bounding Box for the normal mode. In normal mode, Bounding Box gives the visual boundary of the object when you interact with the object. You can find this behavior in the cliff house. (Grab and move, rotate, scale with two motion controllers) + +![Bounding Box Normal Mode](/External/ReadMeImages/MRTK_BoundingBoxNormalMode.jpg) + + +### Known issues ### +- Adjust mode Bounding Box and App Bar will be added through different Pull Request. +- In the immersive headset, current input system only shows single pointer cursor. While holding an object with the first controller, pointing and seleting the object with the second controller will activate the manipulation behavior. Multi-pointer cursor visualization will be updated through different Pull Request. + + +### Unity Scene ### +[TwoHandManipulationTest.unity](/Assets/HoloToolkit-Examples/Input/Scenes/TwoHandManipulationTest.unity) +![TwoHandManipulation Scene](/External/ReadMeImages/MRTK_TwoHandManipulationScene.jpg) + +In the Hierarchy panel, you can find multiple objects that have TwoHandManipulatable script under SceneContent. Notice how each example object has a collider on it. The collider defines the 'hittable area' for the manipulatable--grabbing any collidable that is on the script's GameObject or any descendant will activate the script. + +### TwoHandManipulatable Script ### +![TwoHandManipulation Script](/External/ReadMeImages/MRTK_TwoHandManipulationScript.jpg) + +Simply assign TwoHandManipulatable script to any GameObject to make it manipulatable. +The script has several configurable options: +- **HostTransform**: Use this to specify the transform that the scripts manipulates. By default it is the GameObject that this script is on. +- **Bounding Box Prefab**: To visualize the object bounding box, drop the [BoundingBoxBasic.prefab](/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxBasic.prefab) here. This is optional. + +- **Manipulation Mode**: Specify the enabled manipulations. + +- **Constraint On Rotation**: If rotation is enabled, only rotate on these axes. + +- **One Handed Movement**: Specify whether you can use just one hand to move the object. + + + +### Bounding Box normal mode visualization ### +![BoundingBox Basic Prefab](/External/ReadMeImages/MRTK_BoundingBoxBasicPrefab.jpg) + + +**TwoHandManipulatable** script uses optional [**BoundingBoxBasic prefab**](/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxBasic.prefab) to visualize the borders on manipulation interaction. It shows/hides BoundingBoxBasic in **OnManipulationStarted** and **OnManipulationEnded** event. **TwoHandManipulatable** script can work without BoundingBox visualization. Simply don't assign the BoundingBoxBasic prefab in the Inspector panel. + diff --git a/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md.meta b/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md.meta new file mode 100644 index 00000000000..47ca51029bc --- /dev/null +++ b/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8356c8249bd11f241bd992ba90f69055 +timeCreated: 1518811406 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md b/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md new file mode 100644 index 00000000000..73d623ebf70 --- /dev/null +++ b/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md @@ -0,0 +1,76 @@ +# Bounding Box & App Bar +![Bounding Box](/External/ReadMeImages/MRTK_AppBar_BoundingBox.jpg) +This example scene demonstrates how to make objects manipulatable using [BoundingBoxRig](/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs) script. The bounding box is a standard interface for manipulating object in Windows Mixed Reality. Using gizmo on the corners and edges, you can scale or rotate the object. +App Bar provides the button for entering/exiting 'Adjust' mode to enable/disable Bounding Box. For more information please see ['App Bar and Bounding Box'](https://developer.microsoft.com/en-us/windows/mixed-reality/app_bar_and_bounding_box) on Windows Dev Center. + +## Interaction behavior ## +There are two modes in the Bounding Box: Normal mode and Adjust mode. +### Normal mode ### +- Bounding Box is not visible. +- App Bar shows 'Adjust' button + +### Adjust mode ### +- Bounding Box and gizmo is visible +- App Bar shows 'Done' button + +### Demo video ### +https://gfycat.com/TameQuaintGnu + +When you select one of the gizmo, it is highlighted and other gizmos becomes invisible. This visual feedback helps the user to understand which handle is beining interacted with. + + + + +## Example scene ## +[BoundingBoxExample.unity](/Assets/HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity) + + + + + +## Structure of Bounding Box & App Bar ## +![Bounding Box](/External/ReadMeImages/MRTK_AppBar_BoundingBox_Structure.jpg) +### [BoundingBoxRig script](/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs) ### +This script gets added as a Component to a GameObject. An object with this script as a Component will appear with an AppBar floating in front of it. The BoundingBoxRig script creates a rig of corner and mid-edge handles for scaling and rotating an object. The Adjust button in the AppBar turns on and off the rig. This script cooperates with the TwoHandedManipulation script. + + + +### [BoundingBoxGizmoHandle script](/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs) ### +This script is not used directly. It is already included in the BoundingBoxRig script. It takes care of creating the rotation and scale handles that are used to adjust the Target object. + + + + +### [AppBar](/Assets/HoloToolkit/UX/Scripts/AppBar/AppBar.cs) and [AppBarButton](/Assets/HoloToolkit/UX/Scripts/AppBar/AppBarButton.cs) script ### +AppBar uses [HolographicButton](/Assets/HoloToolkit/UX/Prefabs/Buttons/HolographicButton.prefab) as a template to build a button collection. In default, it includes Show, Hide, Adjust, Done and Remove buttons. Depending on the current mode - Default, Hidden and Manipulation - it controls the visiblity of each button. Based on the number of the buttons, it adjusts the width of the BackgroundBar component. AppBar script has the logic for following user's position in FollowBoundingBox() function. + + +## How to use Bounding Box & App Bar ## +You can enable Bounding Box and App Bar by simply assigning [BoundingBoxRig script](/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs) to any GameObject. **BoundingBoxRig** script contains these items. +- **BoundingBoxBasic prefab** - Visualizes boundary wireframe +- **AppBar prefab** - Constructs App Bar +- **BoundingBoxHandle material** - Default Material for the gizmo +- **BoundingBoxGrabbed material** - Material for the gizmo when it is being interacted + +![BoundingBox Script Setup](/External/ReadMeImages/MRTK_AppBar_BoundingBox_ScriptSetup.jpg) +![BoundingBox Material Setup](/External/ReadMeImages/MRTK_AppBar_BoundingBox_Materials.jpg) + +## Inspector Properties ## +The BoundingBoxRig exposes several properties in the Inspector. 'Flattening' lets you create a BoundingBoxRig that treats the object as if it were flat in one of its dimensions. + +Customization Settings- let you specify custom materials for the Scale cubes and the Rotate spheres. Additionally, you can specify a Material that is used for any selected handle. + +Behavior- These settings effect how the BoundingBoxRig Scales and Rotates the Target object. Rotation Type allows the object to be rotated in either World Coordinates, or Model Coordinates. You can also specify whether rotation occurs by moving the hand or controller, or by rotating a controller. + +## Combining with HandDraggable script ## +Bounding Box with gizmo provides the interface for scaling and rotating object. To make the object movable, you can assign [HandDraggable script](/Assets/HoloToolkit/InputModule/Scripts/Utilities/Interactions/HandDraggable.cs) to the object. With HandDraggable script, you can grab the body of the object and move. You can move object in both normal mode and adjust mode since it does not require the gizmo interface. + +## Combining with TwoHandManipulatable script ## +[TwoHandManipulatable script](/Assets/HoloToolkit/Input/Scripts/Utilities/Interactions/TwoHandManipulatable.cs) allows for an object to be movable, scalable, and rotatable with one or two hands. This script can be combined with BoudningBoxRig script, providing both options for manipulating objects. You can find this interaction behavior in the cliff house. Using two motion controllers and select buttons, you can move/rotate/scale any objects without entering adjust mode. Still you can enter adjust mode by pressing the button on the AppBar and use gizmo to scale/rotate the object. For more detailed information about TwoHandManipulatable script, please refer to the [README file](/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md). + + +## How to add custom buttons to the App Bar ## +You can add additional buttons to the App Bar for other actions. AppBar prefab provides convenient options in the Inspector panel. Find the AppBar prefab in the Project panel and select it. In the Inspector panel, expand **Buttons** section. By modifying the number of **Size** field, you will be able to see the Element populated in the Buttons section. You can specify details such as postion, name and icon texture name. These buttons are using [HolographicButton](/Assets/HoloToolkit/UX/Prefabs/Buttons/HolographicButton.prefab) prefab as a template. HolographicButton is based on [CompoundButton](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButton.cs) script series. For more details about CompoundButton, please refer to the [README file of the InteractableObjectExample](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md). + +![AppBar Custom Button](/External/ReadMeImages/MRTK_AppBar_BoundingBox_CustomButtons.jpg) + diff --git a/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md.meta b/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md.meta new file mode 100644 index 00000000000..bb068c12240 --- /dev/null +++ b/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2a330e5bad3a91044ab9926ac5b05332 +timeCreated: 1519945613 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md b/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md index 3a916f370e5..5c070976f66 100644 --- a/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md +++ b/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md @@ -11,38 +11,38 @@ This is the base of the button component. You will need this script to build any ![Compound Button](/External/ReadMeImages/MRTK_CompoundButton_Inspector.jpg) -### [Compound Button Mesh](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButtonMesh.cs) ### +### [Compound Button Mesh](/Assets/HoloToolkit/UX/Scripts/Buttons/Utilities/CompoundButtonMesh.cs) ### Use this script to use various types of custom mesh. You can use your own 3D models imported from 3D modeling software. Using this script, you can easily change the scale, offset of the mesh or material properties such as color for the different input interaction states. To create an Interactable Object using script, it is recommended to create an empty GameObject as a container and put the 3D mesh model under it as child component. This will prevent unexpected behavior from different scaling or offset values. ![Compound Button](/External/ReadMeImages/MRTK_CompoundButtonMesh_Inspector.jpg) -### [Compound Button Icon](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButtonIcon.cs) ### +### [Compound Button Icon](/Assets/HoloToolkit/UX/Scripts/Buttons/Utilities/CompoundButtonIcon.cs) ### Using this scripts, you can use Texture 2D assets to display icons. To assgin your custom icon texture, expand **DefaultButtonIconProfileTexture**. You will be able to find empty slots for the Texture 2D asset. Once you assign Texture 2D asset, you can select the icon using the drop down on the bottom of the profile section. ![Compound Button](/External/ReadMeImages/MRTK_CompoundButtonIcon_Inspector.jpg) ![Compound Button Icon Texture](/External/ReadMeImages/MRTK_CompoundButtonIconTexture.jpg) -### [Compound Button Text](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButtonText.cs) ### +### [Compound Button Text](/Assets/HoloToolkit/UX/Scripts/Buttons/Utilities/CompoundButtonText.cs) ### This scripts helps you manage a TextMesh component to display text on your button. This script can be used in conjunction with a CompoundButtonSpeech component to automatically link your button to spoken keywords. ![Compound Button](/External/ReadMeImages/MRTK_CompoundButtonText_Inspector.jpg) -### [Compound Button Sound](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButtonSounds.cs) ### +### [Compound Button Sound](/Assets/HoloToolkit/UX/Scripts/Buttons/Utilities/CompoundButtonSounds.cs) ### Use this script to add audio feedback for the different input interaction states. ![Compound Button](/External/ReadMeImages/MRTK_CompoundButtonSound_Inspector.jpg) -### [Compound Button Anim](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButtonAnim.cs) ### +### [Compound Button Anim](/Assets/HoloToolkit/UX/Scripts/Buttons/Utilities/CompoundButtonAnim.cs) ### This is the base of the button component. You will need this script to build any types of Interactable Objects. ![Compound Button](/External/ReadMeImages/MRTK_CompoundButtonAnim_Inspector.jpg) -### [Compound Button Speech](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButtonSpeech.cs) ### +### [Compound Button Speech](/Assets/HoloToolkit/UX/Scripts/Buttons/Utilities/CompoundButtonSpeech.cs) ### Use this script to automatically register keywords for your button in the Speech Manager (This script is experimental and still being tested). ![Compound Button](/External/ReadMeImages/MRTK_CompoundButtonSpeech_Inspector.jpg) -### [Compound Button Toggle](/Assets/HoloToolkit/UX/Scripts/Buttons/CompoundButtonToggle.cs) ### +### [Compound Button Toggle](/Assets/HoloToolkit/UX/Scripts/Buttons/Utilities/CompoundButtonToggle.cs) ### Use this script to add toggle on/off state. ## Receiver ## diff --git a/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md b/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md index c41381e46e5..5d576d6207e 100644 --- a/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md +++ b/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md @@ -6,22 +6,22 @@ Object collection is a script which helps you lay out an array of objects in pre ## Object collection examples ## Periodic Table of the Elements is an example app that demonstrates how Object collection works. It uses Object collection to layout the 3D element boxes in different shapes. -ObjectCollection +ObjectCollection ### 3D Objects ### You can use Object collection to layout imported 3D objects. The example below shows the plane and cylindrical layouts of 3D chair model objects using Object collection. -ObjectCollection +ObjectCollection ### 2D Objects ### You can also use 2D images with Object collection. For example, you can easily display multiple images in grid style using Object collection. -ObjectCollection +ObjectCollection -ObjectCollection +ObjectCollection ## Ways to use Object collection ## You can find the examples in the scene **ObjectCollection_Examples.unity**. In this scene, you can find the **ObjectCollection.cs** script under **Assets/HoloToolkit/UX/Scripts/Collections** @@ -32,8 +32,8 @@ You can find the examples in the scene **ObjectCollection_Examples.unity**. In t 4. You will then see the object(s) laid out in selected Surface Type. -ObjectCollection in Unity +ObjectCollection in Unity -ObjectCollection in Unity +ObjectCollection in Unity -ObjectCollection in Unity +ObjectCollection in Unity diff --git a/Assets/HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity b/Assets/HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity new file mode 100644 index 00000000000..b2de1f232ea --- /dev/null +++ b/Assets/HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity @@ -0,0 +1,2285 @@ +%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: 2100000, guid: 064cf2adabde05941a372e975e563706, type: 2} + 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.50217825, g: 0.5020953, b: 0.5018046, 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: 1 + 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: 0 + 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: 0 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &37407853 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 37407854} + - component: {fileID: 37407855} + m_Layer: 0 + m_Name: MRTK_Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &37407854 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37407853} + m_LocalRotation: {x: -0, y: -0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 1.3, y: -0.016, z: 0.011} + m_LocalScale: {x: 0.03809992, y: 0.05976457, z: 0.0429226} + m_Children: [] + m_Father: {fileID: 1644802406} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!212 &37407855 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 37407853} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: f721996453d888a4db83f0f9f1a4eb7c, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 20, y: 7.48} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 +--- !u!1 &78828848 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1702150885567096, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 78828849} + - component: {fileID: 78828852} + - component: {fileID: 78828851} + - component: {fileID: 78828850} + m_Layer: 0 + m_Name: Rule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &78828849 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4459327869346566, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 78828848} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -512.82007, y: -322.6673, z: 1.3285} + m_LocalScale: {x: 0.5497447, y: 0.0030726464, z: 1} + m_Children: [] + m_Father: {fileID: 785992103} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &78828850 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23475067446539832, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 78828848} + 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!64 &78828851 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 64067504913786168, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 78828848} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &78828852 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33070690472620464, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 78828848} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &82462508 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1857403430107600, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 82462509} + - component: {fileID: 82462510} + m_Layer: 0 + m_Name: MRTK_Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &82462509 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4905320192366726, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 82462508} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -512.9825, y: -322.609, z: 1.3330002} + m_LocalScale: {x: 0.013813125, y: 0.01381305, z: 0.008287894} + m_Children: [] + m_Father: {fileID: 785992103} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!212 &82462510 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 212559292570936782, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 82462508} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 10 + m_Sprite: {fileID: 21300000, guid: f721996453d888a4db83f0f9f1a4eb7c, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 20, y: 7.48} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 +--- !u!1001 &116723879 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1329454425} + m_Modifications: + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.x + value: -0.791 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.y + value: -0.67 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.z + value: 0.5159999 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_Text + value: 'BoundingBoxRig Only + + (Not movable)' + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_FontSize + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 1000013198843976, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_Name + value: GroupTitleText1 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + m_IsPrefabParent: 0 +--- !u!4 &116723880 stripped +Transform: + m_PrefabParentObject: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + m_PrefabInternal: {fileID: 116723879} +--- !u!1 &503309311 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 503309312} + m_Layer: 0 + m_Name: Objects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &503309312 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 503309311} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.281, y: -0.57900006, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1197191673} + - {fileID: 1428215744} + - {fileID: 1222626214} + - {fileID: 1644802406} + m_Father: {fileID: 1329454425} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &556615939 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + m_IsPrefabParent: 0 +--- !u!114 &556615940 stripped +MonoBehaviour: + m_PrefabParentObject: {fileID: 114611684728110934, guid: a611e772ef8ddf64d8106a9cbb70f31c, + type: 2} + m_PrefabInternal: {fileID: 556615939} + m_Script: {fileID: 11500000, guid: 0decd33ba8702954885a62b5bc1a778e, type: 3} +--- !u!1001 &654639567 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1329454425} + m_Modifications: + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.x + value: 0.155 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.y + value: -0.661 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.z + value: 0.5159999 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_Text + value: "BoundingBoxRig \n+ TwoHandManipulatable script\n(Move/Rotate/Scale with + two hands)" + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_FontSize + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 1000013198843976, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_Name + value: GroupTitleText3 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + m_IsPrefabParent: 0 +--- !u!4 &654639568 stripped +Transform: + m_PrefabParentObject: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + m_PrefabInternal: {fileID: 654639567} +--- !u!1 &750206442 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1319326335823192, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 750206443} + - component: {fileID: 750206447} + - component: {fileID: 750206446} + - component: {fileID: 750206445} + - component: {fileID: 750206444} + m_Layer: 0 + m_Name: Backpanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &750206443 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4925815908915770, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 750206442} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.23, y: 0.13322008, z: -0.004582405} + m_LocalScale: {x: 0.013220016, y: 0.71818995, z: 0.61351055} + m_Children: [] + m_Father: {fileID: 1020269081} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &750206444 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 54100405396922970, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 750206442} + serializedVersion: 2 + m_Mass: 100 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 +--- !u!23 &750206445 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23612074761842514, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 750206442} + 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: 61c598ddff7a2cc4ea50c285c361691d, 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!65 &750206446 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 65599234300196070, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 750206442} + 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 &750206447 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33590020163061146, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 750206442} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &768236424 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1329454425} + m_Modifications: + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.x + value: -0.328 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.y + value: -0.666 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.z + value: 0.5159999 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_Text + value: "BoundingBoxRig \n+ HandDraggable script\n(Move with single hand)" + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_FontSize + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 1000013198843976, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_Name + value: GroupTitleText2 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + m_IsPrefabParent: 0 +--- !u!4 &768236425 stripped +Transform: + m_PrefabParentObject: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + m_PrefabInternal: {fileID: 768236424} +--- !u!1 &785992102 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1835462303943884, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 785992103} + - component: {fileID: 785992106} + - component: {fileID: 785992105} + - component: {fileID: 785992104} + - component: {fileID: 785992107} + m_Layer: 0 + m_Name: TextContent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &785992103 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224385282562073920, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 785992102} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.3525823} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1517590048} + - {fileID: 1379348910} + - {fileID: 78828849} + - {fileID: 1722965371} + - {fileID: 1946117763} + - {fileID: 82462509} + - {fileID: 1331017467} + - {fileID: 1249210502} + - {fileID: 2077985935} + m_Father: {fileID: 1020269081} + 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: 512.5886, y: 323.03625} + m_SizeDelta: {x: 1025, y: 648} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &785992104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114803053854114090, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 785992102} + 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 &785992105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114747735679590474, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 785992102} + 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 &785992106 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 223269791768138664, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 785992102} + 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: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &785992107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 785992102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2aebab3047f2113489ca3eb8423228b6, type: 3} + m_Name: + m_EditorClassIdentifier: + Canvas: {fileID: 785992106} +--- !u!1 &1020269080 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1152677137086646, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1020269081} + m_Layer: 0 + m_Name: Panel1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1020269081 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4579641208005124, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1020269080} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.291, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 785992103} + - {fileID: 750206443} + m_Father: {fileID: 1459742327} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1020433839 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1020433841} + - component: {fileID: 1020433840} + 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 &1020433840 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1020433839} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, 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 &1020433841 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1020433839} + 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: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1001 &1197191672 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 503309312} + m_Modifications: + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalPosition.x + value: -0.507 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalPosition.y + value: -0.32399997 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalPosition.z + value: 0.257 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalScale.x + value: 0.14147541 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalScale.y + value: 0.14147541 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_LocalScale.z + value: 0.14147541 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 347544df56dcd64408e75005a6aa0c34, type: 2} + - target: {fileID: 100002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + propertyPath: m_Name + value: Model_Octa + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + m_IsPrefabParent: 0 +--- !u!4 &1197191673 stripped +Transform: + m_PrefabParentObject: {fileID: 400002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + m_PrefabInternal: {fileID: 1197191672} +--- !u!1 &1197191674 stripped +GameObject: + m_PrefabParentObject: {fileID: 100002, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} + m_PrefabInternal: {fileID: 1197191672} +--- !u!114 &1197191675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1197191674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4768146f072b50149a922df192dfb58f, type: 3} + m_Name: + m_EditorClassIdentifier: + flattenedAxis: 0 + scaleHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, type: 2} + rotateHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, + type: 2} + interactingMaterial: {fileID: 2100000, guid: b614a09bc429623478e946d8170b15ae, type: 2} + scaleRate: 4 + maxScale: 2 + rotationType: 0 + handMotionToRotate: 1 + boundingBoxPrefab: {fileID: 114030465538688920, guid: 865a8ded6c47efd4285f04f3aebe99e9, + type: 2} + appBarPrefab: {fileID: 114050950401502068, guid: aa610ada334bff640a535f0d23a9a15c, + type: 2} +--- !u!64 &1197191676 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1197191674} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 4300000, guid: 1e23ec24c22068b4cbf47737c35e277b, type: 3} +--- !u!1001 &1222626213 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 503309312} + m_Modifications: + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalPosition.x + value: 0.437 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalPosition.y + value: -0.33 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalPosition.z + value: 0.2579999 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalScale.x + value: 0.17643769 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalScale.y + value: 0.17643769 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_LocalScale.z + value: 0.17643769 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 522573f9741466f4f9eb698bce4a266a, type: 2} + - target: {fileID: 100002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + propertyPath: m_Name + value: Model_Icosa + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + m_IsPrefabParent: 0 +--- !u!4 &1222626214 stripped +Transform: + m_PrefabParentObject: {fileID: 400002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + m_PrefabInternal: {fileID: 1222626213} +--- !u!1 &1222626215 stripped +GameObject: + m_PrefabParentObject: {fileID: 100002, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} + m_PrefabInternal: {fileID: 1222626213} +--- !u!114 &1222626216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1222626215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4768146f072b50149a922df192dfb58f, type: 3} + m_Name: + m_EditorClassIdentifier: + flattenedAxis: 0 + scaleHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, type: 2} + rotateHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, + type: 2} + interactingMaterial: {fileID: 2100000, guid: b614a09bc429623478e946d8170b15ae, type: 2} + scaleRate: 4 + maxScale: 2 + rotationType: 0 + handMotionToRotate: 1 + boundingBoxPrefab: {fileID: 114030465538688920, guid: 865a8ded6c47efd4285f04f3aebe99e9, + type: 2} + appBarPrefab: {fileID: 114050950401502068, guid: aa610ada334bff640a535f0d23a9a15c, + type: 2} +--- !u!64 &1222626217 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1222626215} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 4300000, guid: 284d5c2c421022e4f9056fb0a21ff91c, type: 3} +--- !u!114 &1222626218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1222626215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6eb034688bcf84b4bb52b3a3310868c3, type: 3} + m_Name: + m_EditorClassIdentifier: + HostTransform: {fileID: 0} + boundingBoxPrefab: {fileID: 114030465538688920, guid: 865a8ded6c47efd4285f04f3aebe99e9, + type: 2} + ManipulationMode: 4 + ConstraintOnRotation: 0 + OneHandMovement: 1 +--- !u!1 &1249210501 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1579474663996116, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1249210502} + - component: {fileID: 1249210504} + - component: {fileID: 1249210503} + m_Layer: 5 + m_Name: Subtitle (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1249210502 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224867391563566598, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1249210501} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.3334941} + m_LocalScale: {x: 0.00049999997, y: 0.00049999997, z: 0.00049999997} + m_Children: [] + m_Father: {fileID: 785992103} + 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: -512.82153, y: -322.93628} + m_SizeDelta: {x: 1107.8, y: 89.1924} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1249210503 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114628746298840300, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1249210501} + 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: 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: 12800000, guid: e3d8348b7d66bae4aa4b1f3ada3ef5fd, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 101 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: App Bar +--- !u!222 &1249210504 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222081016692326802, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1249210501} +--- !u!1 &1329454424 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1329454425} + - component: {fileID: 1329454426} + m_Layer: 0 + m_Name: SceneContent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1329454425 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1329454424} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 2.37} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1459742327} + - {fileID: 116723880} + - {fileID: 768236425} + - {fileID: 654639568} + - {fileID: 1544514364} + - {fileID: 503309312} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1329454426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1329454424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 906323c940a3fad4f8f7e9e4fcd747f4, type: 3} + m_Name: + m_EditorClassIdentifier: + containerObject: {fileID: 0} + alignmentType: 0 + stationarySpaceTypePosition: {x: 0, y: 0, z: 0} + roomScaleSpaceTypePosition: {x: 0, y: 0, z: 0} +--- !u!1 &1331017466 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1579474663996116, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1331017467} + - component: {fileID: 1331017469} + - component: {fileID: 1331017468} + m_Layer: 5 + m_Name: Subtitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1331017467 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224867391563566598, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1331017466} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.3334941} + m_LocalScale: {x: 0.00050000026, y: 0.0005, z: 0.00050000026} + m_Children: [] + m_Father: {fileID: 785992103} + 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: -512.82153, y: -322.7689} + m_SizeDelta: {x: 1107.8, y: 89.1924} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1331017468 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114628746298840300, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1331017466} + 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: 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: 12800000, guid: e3d8348b7d66bae4aa4b1f3ada3ef5fd, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 101 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Bounding Box Rig +--- !u!222 &1331017469 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222081016692326802, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1331017466} +--- !u!1001 &1368213904 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 114742747811649402, guid: 3eddd1c29199313478dd3f912bfab2ab, + type: 2} + propertyPath: Cursor + value: + objectReference: {fileID: 556615940} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &1379348909 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1344339051826214, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1379348910} + - component: {fileID: 1379348912} + - component: {fileID: 1379348911} + m_Layer: 5 + m_Name: Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1379348910 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224856759666131864, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1379348909} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.3334956} + m_LocalScale: {x: 0.00050000026, y: 0.0005, z: 0.00050000026} + m_Children: [] + m_Father: {fileID: 785992103} + 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: -512.8215, y: -322.98813} + m_SizeDelta: {x: 1107.8, y: 1000} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1379348911 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114761561608045154, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1379348909} + 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: 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: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + m_FontSize: 34 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 101 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: ' + + + The bounding box rig is a standard interface for manipulating object. Using the + gizmo on the corners and edges, you can scale or rotate the object. Use ''Adjust'' + button on the App Bar to enable Bounding Box and Rig interface. Several properties + can be adjusted in the Inspector to affect behavior. + + + + + The App Bar provides collection of buttons to enter and exit ''Adjust'' mode. + In normal mode, Bounding Box is not visible. When you enter ''Adjust'' mode, you + can see the Bounding Box with gizmo interface. You can exit adjust mode by pressing + ''Done'' button. App Bar follows user''s position for easier access. Please refer + to the README file for the technical details. + + + + + Design Guideline + + http://aka.ms/mr > Design > App Bar and Bounding Box + + + Two Hand Manipulation + + MixedRealityToolkit-Examples > Input > Scenes > TwoHandManipulationTest' +--- !u!222 &1379348912 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222334294151603570, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1379348909} +--- !u!1 &1423768202 stripped +GameObject: + m_PrefabParentObject: {fileID: 100004, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + m_PrefabInternal: {fileID: 1575359649} +--- !u!64 &1423768206 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1423768202} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 4300000, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} +--- !u!1 &1428215743 stripped +GameObject: + m_PrefabParentObject: {fileID: 100002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + m_PrefabInternal: {fileID: 1575359649} +--- !u!4 &1428215744 stripped +Transform: + m_PrefabParentObject: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + m_PrefabInternal: {fileID: 1575359649} +--- !u!114 &1428215745 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1428215743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4768146f072b50149a922df192dfb58f, type: 3} + m_Name: + m_EditorClassIdentifier: + flattenedAxis: 0 + scaleHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, type: 2} + rotateHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, + type: 2} + interactingMaterial: {fileID: 2100000, guid: b614a09bc429623478e946d8170b15ae, type: 2} + scaleRate: 4 + maxScale: 2 + rotationType: 0 + handMotionToRotate: 1 + boundingBoxPrefab: {fileID: 114030465538688920, guid: 865a8ded6c47efd4285f04f3aebe99e9, + type: 2} + appBarPrefab: {fileID: 114050950401502068, guid: aa610ada334bff640a535f0d23a9a15c, + type: 2} +--- !u!114 &1428215746 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1428215743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d5a0a60fbe897549ad0bfe2039f12b6, type: 3} + m_Name: + m_EditorClassIdentifier: + HostTransform: {fileID: 0} + DistanceScale: 2 + RotationMode: 0 + PositionLerpSpeed: 0.2 + RotationLerpSpeed: 0.2 + IsDraggingEnabled: 1 +--- !u!1 &1459742326 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1037805327611902, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1459742327} + m_Layer: 0 + m_Name: SceneDescriptionPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1459742327 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4038737183939630, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1459742326} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.055, y: -0.157, z: 0.771} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1020269081} + m_Father: {fileID: 1329454425} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1517590047 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1451936078842708, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1517590048} + - component: {fileID: 1517590050} + - component: {fileID: 1517590049} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1517590048 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224339627565595316, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1517590047} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.3334941} + m_LocalScale: {x: 0.0005000003, y: 0.0005000001, z: 0.0005000003} + m_Children: [] + m_Father: {fileID: 785992103} + 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: -512.82153, y: -322.73904} + m_SizeDelta: {x: 1107.8, y: 244.2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1517590049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114257903654940708, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1517590047} + 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: 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: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + m_FontSize: 78 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 101 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Bounding Box Rig and App Bar +--- !u!222 &1517590050 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222382184650279478, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1517590047} +--- !u!1001 &1544514363 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1329454425} + m_Modifications: + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.x + value: 0.658 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.y + value: -0.661 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalPosition.z + value: 0.516 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_Text + value: Flat option + objectReference: {fileID: 0} + - target: {fileID: 102000010767390410, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + propertyPath: m_FontSize + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 1000013198843976, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_Name + value: GroupTitleText4 + objectReference: {fileID: 0} + - target: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: bfdc7f60d7205c84f82a4806a5352d60, type: 2} + m_IsPrefabParent: 0 +--- !u!4 &1544514364 stripped +Transform: + m_PrefabParentObject: {fileID: 4000010330146594, guid: bfdc7f60d7205c84f82a4806a5352d60, + type: 2} + m_PrefabInternal: {fileID: 1544514363} +--- !u!1001 &1575359649 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 503309312} + m_Modifications: + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalPosition.x + value: -0.062 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalPosition.y + value: -0.471 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalPosition.z + value: 0.251 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalScale.x + value: 0.121364735 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalScale.y + value: 0.12136473 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalScale.z + value: 0.12136473 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 6cc62066c37dffd4aba9a7c426723528, type: 2} + - target: {fileID: 2300002, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 360c90aa3bc85c9438a05d511deb80ae, type: 2} + - target: {fileID: 400004, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalPosition.x + value: -0.046 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + propertyPath: m_LocalPosition.y + value: -0.007 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: aa39033344b08ce4bab10cc11dc6d6b8, type: 3} + m_IsPrefabParent: 0 +--- !u!1 &1644802401 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1676796405072838, guid: 96fefa1d533a06841a416ee9fa81fae0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1644802406} + - component: {fileID: 1644802405} + - component: {fileID: 1644802404} + - component: {fileID: 1644802403} + - component: {fileID: 1644802402} + - component: {fileID: 1644802407} + - component: {fileID: 1644802408} + m_Layer: 0 + m_Name: Plate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &1644802402 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644802401} + serializedVersion: 2 + m_Mass: 100 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 +--- !u!23 &1644802403 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 23264933688451526, guid: 96fefa1d533a06841a416ee9fa81fae0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644802401} + 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: 61c598ddff7a2cc4ea50c285c361691d, 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!65 &1644802404 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 65011898408323852, guid: 96fefa1d533a06841a416ee9fa81fae0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644802401} + 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 &1644802405 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 33061434417795008, guid: 96fefa1d533a06841a416ee9fa81fae0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644802401} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1644802406 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 4873667944872804, guid: 96fefa1d533a06841a416ee9fa81fae0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644802401} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.937, y: -0.328, z: 0.207} + m_LocalScale: {x: 0.005452275, y: 0.24741833, z: 0.41088742} + m_Children: + - {fileID: 37407854} + m_Father: {fileID: 503309312} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &1644802407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644802401} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4768146f072b50149a922df192dfb58f, type: 3} + m_Name: + m_EditorClassIdentifier: + flattenedAxis: 4 + scaleHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, type: 2} + rotateHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, + type: 2} + interactingMaterial: {fileID: 2100000, guid: b614a09bc429623478e946d8170b15ae, type: 2} + scaleRate: 4 + maxScale: 2 + rotationType: 0 + handMotionToRotate: 1 + boundingBoxPrefab: {fileID: 114030465538688920, guid: 865a8ded6c47efd4285f04f3aebe99e9, + type: 2} + appBarPrefab: {fileID: 114050950401502068, guid: aa610ada334bff640a535f0d23a9a15c, + type: 2} +--- !u!114 &1644802408 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644802401} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6eb034688bcf84b4bb52b3a3310868c3, type: 3} + m_Name: + m_EditorClassIdentifier: + HostTransform: {fileID: 0} + boundingBoxPrefab: {fileID: 0} + ManipulationMode: 0 + ConstraintOnRotation: 0 + OneHandMovement: 1 +--- !u!1 &1722965370 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1485382055181008, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1722965371} + - component: {fileID: 1722965373} + - component: {fileID: 1722965372} + m_Layer: 5 + m_Name: WorksOn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1722965371 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224413024187748670, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1722965370} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.3334956} + m_LocalScale: {x: 0.0005000003, y: 0.0005000001, z: 0.0005000003} + m_Children: [] + m_Father: {fileID: 785992103} + 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: -512.6625, y: -322.61212} + m_SizeDelta: {x: 471.4, y: 140.6} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1722965372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114544788369345886, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1722965370} + 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: 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: 12800000, guid: 2a056e2bb89e0134daaf49e5f183e5dc, type: 3} + m_FontSize: 34 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 101 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Works on +--- !u!222 &1722965373 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222602141398920914, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1722965370} +--- !u!1 &1946117762 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1113360108618934, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1946117763} + - component: {fileID: 1946117765} + - component: {fileID: 1946117764} + m_Layer: 5 + m_Name: DeviceTypes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1946117763 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224644953376245418, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1946117762} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.3334941} + m_LocalScale: {x: 0.00050000026, y: 0.0005, z: 0.00050000026} + m_Children: [] + m_Father: {fileID: 785992103} + 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: -512.6625, y: -322.63422} + m_SizeDelta: {x: 471.4, y: 140.6} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1946117764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114745954840247250, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1946117762} + 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: 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: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + m_FontSize: 28 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 101 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'HoloLens + + Immersive headset' +--- !u!222 &1946117765 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222889759466084120, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1946117762} +--- !u!1001 &2006633758 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4541142303025740, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 114504390558679740, guid: d29bc40b7f3df26479d6a0aac211c355, + type: 2} + propertyPath: NearClipPlane_TransparentDisplay + value: 0.2 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: d29bc40b7f3df26479d6a0aac211c355, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &2077985934 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 1579474663996116, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2077985935} + - component: {fileID: 2077985937} + - component: {fileID: 2077985936} + m_Layer: 5 + m_Name: Subtitle (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2077985935 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 224867391563566598, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2077985934} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.3334941} + m_LocalScale: {x: 0.00049999997, y: 0.00049999997, z: 0.00049999997} + m_Children: [] + m_Father: {fileID: 785992103} + 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: -512.82166, y: -323.11884} + m_SizeDelta: {x: 1107.8, y: 89.1924} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2077985936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 114628746298840300, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2077985934} + 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: 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: 12800000, guid: e3d8348b7d66bae4aa4b1f3ada3ef5fd, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 101 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Resources +--- !u!222 &2077985937 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 222081016692326802, guid: 3404cd77d857d3847a89a11804f185c0, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2077985934} diff --git a/Assets/HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity.meta b/Assets/HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity.meta new file mode 100644 index 00000000000..d80fcf1be54 --- /dev/null +++ b/Assets/HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d909917bdc6293945b2923ca5d139560 +timeCreated: 1519428456 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/Input/Scripts/Utilities/Interactions/AffineConstraintEnums.cs.meta b/Assets/HoloToolkit/Input/Scripts/Utilities/Interactions/AffineConstraintEnums.cs.meta new file mode 100644 index 00000000000..40c51ffc3f7 --- /dev/null +++ b/Assets/HoloToolkit/Input/Scripts/Utilities/Interactions/AffineConstraintEnums.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9ec64577c4f39cb48845a85fedd32259 +timeCreated: 1522964522 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Materials/AppBarBackgroundBar.mat b/Assets/HoloToolkit/UX/Materials/AppBarBackgroundBar.mat new file mode 100644 index 00000000000..3abcdc65269 --- /dev/null +++ b/Assets/HoloToolkit/UX/Materials/AppBarBackgroundBar.mat @@ -0,0 +1,139 @@ +%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: AppBarBackgroundBar + m_Shader: {fileID: 4800000, guid: d45c0efca53019e43891b0f610f8146e, type: 3} + m_ShaderKeywords: _HOVER_LIGHT _INNER_GLOW _METALLIC_TEXTURE_ALBEDO_CHANNEL_A + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + 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} + - _LightMapTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 1443b22b919aede4ca14ca5e3bf81096, 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} + - _NormalMap: + 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: + - _AlbedoAlphaMode: 1 + - _AlbedoAlphaSmoothness: 0 + - _BlendOp: 0 + - _BorderLight: 0 + - _BorderLightOpaque: 0 + - _BorderLightUsesHoverColor: 0 + - _BorderMinValue: 1 + - _BorderWidth: 0.049 + - _BorderWidthHorizontal: 0.1 + - _BorderWidthVertical: 0.1 + - _BumpScale: 1 + - _ClippingPlane: 0 + - _ClippingPlaneBorder: 0 + - _ClippingPlaneBorderWidth: 0.054 + - _ColorWriteMask: 15 + - _CullMode: 2 + - _CustomMode: 0 + - _Cutoff: 0 + - _DetailNormalMapScale: 1 + - _DirectionalLight: 0 + - _DstBlend: 0 + - _EdgeSmoothingValue: 0.0001 + - _EnableEmission: 0 + - _EnableHoverColorOpaqueOverride: 0 + - _EnableHoverColorOverride: 0 + - _EnableLightMap: 0 + - _EnableNormalMap: 0 + - _EnvironmentColorIntensity: 0.5 + - _EnvironmentColorThreshold: 1.49 + - _EnvironmentColoring: 0 + - _FadeBeginDistance: 0.85 + - _FadeCompleteDistance: 0.5 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _HoverLight: 1 + - _HoverLightOpaque: 0 + - _InnerGlow: 1 + - _Metallic: 0 + - _Mode: 0 + - _NearPlaneFade: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Reflections: 0 + - _Refraction: 0 + - _RefractiveIndex: 0.98 + - _RenderQueueOverride: -1 + - _RimLight: 0 + - _RimPower: 4.65 + - _RoundCornerMargin: 0 + - _RoundCornerRadius: 0 + - _RoundCorners: 0 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZTest: 4 + - _ZWrite: 1 + m_Colors: + - _ClipPlane: {r: 0, g: 1, b: 0, a: 0} + - _ClippingPlaneBorderColor: {r: 1, g: 0.2, b: 0, a: 1} + - _Color: {r: 0.30882353, g: 0.30882353, b: 0.30882353, a: 0.616} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EnvironmentColorX: {r: 1, g: 0, b: 0, a: 1} + - _EnvironmentColorY: {r: 0, g: 1, b: 0, a: 1} + - _EnvironmentColorZ: {r: 0, g: 0, b: 1, a: 1} + - _HoverColor: {r: 1, g: 0, b: 0, a: 1} + - _HoverColorOpaqueOverride: {r: 1, g: 1, b: 1, a: 1} + - _HoverColorOverride: {r: 1, g: 1, b: 1, a: 1} + - _InnerGlowColor: {r: 1, g: 1, b: 1, a: 0.665} + - _RimColor: {r: 1, g: 1, b: 1, a: 0.497} diff --git a/Assets/HoloToolkit/UX/Materials/AppBarBackgroundBar.mat.meta b/Assets/HoloToolkit/UX/Materials/AppBarBackgroundBar.mat.meta new file mode 100644 index 00000000000..06e2b05e760 --- /dev/null +++ b/Assets/HoloToolkit/UX/Materials/AppBarBackgroundBar.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f0dfd2a486bf27644b5fd4e943880452 +timeCreated: 1522888398 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Materials/BoundingBoxHandle.mat b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandle.mat new file mode 100644 index 00000000000..6b58168da3b --- /dev/null +++ b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandle.mat @@ -0,0 +1,134 @@ +%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: BoundingBoxHandle + m_Shader: {fileID: 4800000, guid: d45c0efca53019e43891b0f610f8146e, type: 3} + m_ShaderKeywords: _BORDER_LIGHT_USES_HOVER_COLOR _DISABLE_ALBEDO_MAP _HOVER_COLOR_OVERRIDE + _HOVER_LIGHT _INNER_GLOW _NEAR_PLANE_FADE + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + 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} + - _LightMapTex: + 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} + - _NormalMap: + 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: + - _AlbedoAlphaMode: 0 + - _AlbedoAlphaSmoothness: 0 + - _BlendOp: 0 + - _BorderLight: 0 + - _BorderLightOpaque: 0 + - _BorderLightUsesHoverColor: 1 + - _BorderMinValue: 0.144 + - _BorderWidth: 0.059 + - _BumpScale: 1 + - _ClippingPlane: 0 + - _ClippingPlaneBorder: 0 + - _ClippingPlaneBorderWidth: 0.025 + - _ColorWriteMask: 15 + - _CullMode: 2 + - _CustomMode: 0 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DirectionalLight: 0 + - _DstBlend: 0 + - _EdgeSmoothingValue: 0.002 + - _EnableEmission: 0 + - _EnableHoverColorOverride: 1 + - _EnableLightMap: 0 + - _EnableNormalMap: 0 + - _EnvironmentColorIntensity: 0.46 + - _EnvironmentColorThreshold: 1.46 + - _EnvironmentColoring: 0 + - _FadeBeginDistance: 0.85 + - _FadeCompleteDistance: 0.5 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _HoverLight: 1 + - _InnerGlow: 1 + - _Metallic: 0 + - _Mode: 0 + - _NearPlaneFade: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Reflections: 0 + - _Refraction: 0 + - _RefractiveIndex: 1.1 + - _RenderQueueOverride: -1 + - _RimLight: 0 + - _RimPower: 5.27 + - _RoundCornerMargin: 0 + - _RoundCornerRadius: 0.25 + - _RoundCorners: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZTest: 4 + - _ZWrite: 1 + m_Colors: + - _ClipPlane: {r: 0, g: 1, b: 0, a: 0} + - _ClippingPlaneBorderColor: {r: 1, g: 0.2, b: 0, a: 1} + - _Color: {r: 0, g: 0.50304264, b: 0.8235294, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EnvironmentColorX: {r: 0, g: 0.4862745, b: 0.79607844, a: 1} + - _EnvironmentColorY: {r: 0, g: 0.4862745, b: 0.79607844, a: 1} + - _EnvironmentColorZ: {r: 0.6544118, g: 0.86551, b: 1, a: 1} + - _HoverColorOverride: {r: 1, g: 1, b: 1, a: 1} + - _InnerGlowColor: {r: 1, g: 1, b: 1, a: 0.603} + - _RimColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/HoloToolkit/UX/Materials/BoundingBoxHandle.mat.meta b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandle.mat.meta new file mode 100644 index 00000000000..a7dd8bd1df6 --- /dev/null +++ b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandle.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4a9072a0d8623aa44abf31f02d209a09 +timeCreated: 1519934472 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Materials/BoundingBoxHandleGrabbed.mat b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandleGrabbed.mat new file mode 100644 index 00000000000..8a334d169a8 --- /dev/null +++ b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandleGrabbed.mat @@ -0,0 +1,134 @@ +%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: BoundingBoxHandleGrabbed + m_Shader: {fileID: 4800000, guid: d45c0efca53019e43891b0f610f8146e, type: 3} + m_ShaderKeywords: _BORDER_LIGHT_USES_HOVER_COLOR _DISABLE_ALBEDO_MAP _HOVER_COLOR_OVERRIDE + _HOVER_LIGHT _INNER_GLOW _NEAR_PLANE_FADE + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + 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} + - _LightMapTex: + 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} + - _NormalMap: + 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: + - _AlbedoAlphaMode: 0 + - _AlbedoAlphaSmoothness: 0 + - _BlendOp: 0 + - _BorderLight: 0 + - _BorderLightOpaque: 0 + - _BorderLightUsesHoverColor: 1 + - _BorderMinValue: 0.144 + - _BorderWidth: 0.059 + - _BumpScale: 1 + - _ClippingPlane: 0 + - _ClippingPlaneBorder: 0 + - _ClippingPlaneBorderWidth: 0.025 + - _ColorWriteMask: 15 + - _CullMode: 2 + - _CustomMode: 0 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DirectionalLight: 0 + - _DstBlend: 0 + - _EdgeSmoothingValue: 0.002 + - _EnableEmission: 0 + - _EnableHoverColorOverride: 1 + - _EnableLightMap: 0 + - _EnableNormalMap: 0 + - _EnvironmentColorIntensity: 0.46 + - _EnvironmentColorThreshold: 1.46 + - _EnvironmentColoring: 0 + - _FadeBeginDistance: 0.85 + - _FadeCompleteDistance: 0.5 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _HoverLight: 1 + - _InnerGlow: 1 + - _Metallic: 0 + - _Mode: 0 + - _NearPlaneFade: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Reflections: 0 + - _Refraction: 0 + - _RefractiveIndex: 1.1 + - _RenderQueueOverride: -1 + - _RimLight: 0 + - _RimPower: 5.27 + - _RoundCornerMargin: 0 + - _RoundCornerRadius: 0.25 + - _RoundCorners: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZTest: 4 + - _ZWrite: 1 + m_Colors: + - _ClipPlane: {r: 0, g: 1, b: 0, a: 0} + - _ClippingPlaneBorderColor: {r: 1, g: 0.2, b: 0, a: 1} + - _Color: {r: 0, g: 0.6522169, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EnvironmentColorX: {r: 0, g: 0.4862745, b: 0.79607844, a: 1} + - _EnvironmentColorY: {r: 0, g: 0.4862745, b: 0.79607844, a: 1} + - _EnvironmentColorZ: {r: 0.6544118, g: 0.86551, b: 1, a: 1} + - _HoverColorOverride: {r: 1, g: 1, b: 1, a: 1} + - _InnerGlowColor: {r: 1, g: 1, b: 1, a: 0.866} + - _RimColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/HoloToolkit/UX/Materials/BoundingBoxHandleGrabbed.mat.meta b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandleGrabbed.mat.meta new file mode 100644 index 00000000000..264f35e5190 --- /dev/null +++ b/Assets/HoloToolkit/UX/Materials/BoundingBoxHandleGrabbed.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b614a09bc429623478e946d8170b15ae +timeCreated: 1519934472 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Materials/BoundingBoxLines.mat b/Assets/HoloToolkit/UX/Materials/BoundingBoxLines.mat index ae91f2fd3ca..4884f4613f5 100644 --- a/Assets/HoloToolkit/UX/Materials/BoundingBoxLines.mat +++ b/Assets/HoloToolkit/UX/Materials/BoundingBoxLines.mat @@ -67,7 +67,7 @@ Material: - _BorderLightOpaque: 0 - _BorderLightUsesHoverColor: 1 - _BorderMinValue: 0.1 - - _BorderWidth: 0.1 + - _BorderWidth: 0.241 - _BumpScale: 1 - _ClippingPlane: 0 - _ClippingPlaneBorder: 0 @@ -81,7 +81,6 @@ Material: - _DstBlend: 0 - _EdgeSmoothingValue: 0.002 - _EnableEmission: 0 - - _EnableHoverColorOpaqueOverride: 0 - _EnableHoverColorOverride: 0 - _EnableNormalMap: 0 - _EnvironmentColorIntensity: 0.5 @@ -93,7 +92,6 @@ Material: - _Glossiness: 0.5 - _GlossyReflections: 1 - _HoverLight: 0 - - _HoverLightOpaque: 0 - _InnerGlow: 1 - _Metallic: 0 - _Mode: 0 @@ -102,14 +100,14 @@ Material: - _Parallax: 0.02 - _Reflections: 0 - _Refraction: 0 - - _RefractiveIndex: 0 + - _RefractiveIndex: 1.1 - _RenderQueueOverride: -1 - _RimLight: 0 - _RimPower: 0.25 - _RoundCornerMargin: 0 - _RoundCornerRadius: 0.25 - _RoundCorners: 0 - - _Smoothness: 0.5 + - _Smoothness: 0 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 @@ -125,7 +123,6 @@ Material: - _EnvironmentColorX: {r: 1, g: 0, b: 0, a: 1} - _EnvironmentColorY: {r: 0, g: 1, b: 0, a: 1} - _EnvironmentColorZ: {r: 0, g: 0, b: 1, a: 1} - - _HoverColorOpaqueOverride: {r: 1, g: 1, b: 1, a: 1} - _HoverColorOverride: {r: 1, g: 1, b: 1, a: 1} - _InnerGlowColor: {r: 1, g: 1, b: 1, a: 0.75} - _RimColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} diff --git a/Assets/HoloToolkit/UX/Prefabs/AppBar.meta b/Assets/HoloToolkit/UX/Prefabs/AppBar.meta new file mode 100644 index 00000000000..ccfe2ef8f9c --- /dev/null +++ b/Assets/HoloToolkit/UX/Prefabs/AppBar.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 62065a40e7a490544aa7689f2184dec1 +folderAsset: yes +timeCreated: 1522887691 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Prefabs/AppBar/AppBar.prefab b/Assets/HoloToolkit/UX/Prefabs/AppBar/AppBar.prefab new file mode 100644 index 00000000000..e386baf7525 --- /dev/null +++ b/Assets/HoloToolkit/UX/Prefabs/AppBar/AppBar.prefab @@ -0,0 +1,172 @@ +%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: 1275815092924048} + m_IsPrefabParent: 1 +--- !u!1 &1093294406509342 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4777743242153572} + - component: {fileID: 33920644740031820} + - component: {fileID: 23284320966475202} + m_Layer: 0 + m_Name: BackgroundBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1275815092924048 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4773597359991020} + - component: {fileID: 114050950401502068} + m_Layer: 0 + m_Name: AppBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1374918788334882 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4691479528535670} + m_Layer: 0 + m_Name: ButtonParent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4691479528535670 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1374918788334882} + m_LocalRotation: {x: 0, 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: 4777743242153572} + m_Father: {fileID: 4773597359991020} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4773597359991020 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1275815092924048} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: + - {fileID: 4691479528535670} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4777743242153572 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1093294406509342} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.4882841, y: 1.4882845, z: 0.61235887} + m_Children: [] + m_Father: {fileID: 4691479528535670} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23284320966475202 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1093294406509342} + 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: f0dfd2a486bf27644b5fd4e943880452, 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 &33920644740031820 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1093294406509342} + m_Mesh: {fileID: 4300006, guid: c68a88ae5c5b91f41b94c83aa4c4196e, type: 3} +--- !u!114 &114050950401502068 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1275815092924048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 80c870726057bb743b9c4f8faa604b98, type: 3} + m_Name: + m_EditorClassIdentifier: + interactables: [] + Targets: [] + lockFocus: 0 + HoverOffsetYScale: 0.35 + HoverOffsetZ: 0 + SquareButtonPrefab: {fileID: 1210820392543280, guid: 40da8a1b3b26ba743b892d890b95a9f9, + type: 2} + UseRemove: 1 + UseAdjust: 1 + UseHide: 1 + DisplayType: 0 + State: 0 + CustomButtonIconProfile: {fileID: 0} + buttons: [] + buttonParent: {fileID: 4691479528535670} + baseRenderer: {fileID: 1275815092924048} + backgroundBar: {fileID: 1093294406509342} + boundingBox: {fileID: 0} diff --git a/Assets/HoloToolkit/UX/Prefabs/AppBar/AppBar.prefab.meta b/Assets/HoloToolkit/UX/Prefabs/AppBar/AppBar.prefab.meta new file mode 100644 index 00000000000..7b9c3c72b91 --- /dev/null +++ b/Assets/HoloToolkit/UX/Prefabs/AppBar/AppBar.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: aa610ada334bff640a535f0d23a9a15c +timeCreated: 1519284601 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxRig.prefab b/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxRig.prefab new file mode 100644 index 00000000000..7876a55dd5b --- /dev/null +++ b/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxRig.prefab @@ -0,0 +1,381 @@ +%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: 1239953840342384} + m_IsPrefabParent: 1 +--- !u!1 &1239953840342384 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4534580742824818} + - component: {fileID: 65801773077148412} + - component: {fileID: 114175038440563122} + m_Layer: 5 + m_Name: BoundingBoxRig + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1250537129321830 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4867447042062062} + - component: {fileID: 33184592341948756} + - component: {fileID: 23899439937517240} + m_Layer: 5 + m_Name: UIButtonSquareIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1425065528980126 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4800923697195466} + - component: {fileID: 33878956050837486} + - component: {fileID: 23907422687686574} + m_Layer: 5 + m_Name: UIButtonSquare + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1572303575470518 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4567352782959966} + - component: {fileID: 33819667893357458} + - component: {fileID: 23957602964816658} + m_Layer: 0 + m_Name: UIButtonSquareFace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1650702992504684 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4602376989556298} + - component: {fileID: 23759032012274656} + - component: {fileID: 102052099225654442} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4534580742824818 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1239953840342384} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.081, y: -0.299, z: -0.3067} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4800923697195466} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4567352782959966 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1572303575470518} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00008332232, y: 0.0005985206, z: -0.00015} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4800923697195466} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4602376989556298 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1650702992504684} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.035, z: -0.0075} + m_LocalScale: {x: 0.0021804431, y: 0.0021804424, z: 0.0021804424} + m_Children: [] + m_Father: {fileID: 4800923697195466} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4800923697195466 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1425065528980126} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.0313, z: -0.0135} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4567352782959966} + - {fileID: 4602376989556298} + - {fileID: 4867447042062062} + m_Father: {fileID: 4534580742824818} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4867447042062062 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250537129321830} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.0045, z: -0.0075} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4800923697195466} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23759032012274656 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1650702992504684} + 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: 1017ef825d041c749bab30bf03aca0d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23899439937517240 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250537129321830} + 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!23 &23907422687686574 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1425065528980126} + 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: 11217bb60dac19b47854c8d47c51b871, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23957602964816658 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1572303575470518} + 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: 284aa3e66c225724caf8162435dd995a, 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 &33184592341948756 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250537129321830} + m_Mesh: {fileID: 4300010, guid: c68a88ae5c5b91f41b94c83aa4c4196e, type: 3} +--- !u!33 &33819667893357458 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1572303575470518} + m_Mesh: {fileID: 4300008, guid: c68a88ae5c5b91f41b94c83aa4c4196e, type: 3} +--- !u!33 &33878956050837486 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1425065528980126} + m_Mesh: {fileID: 4300006, guid: c68a88ae5c5b91f41b94c83aa4c4196e, type: 3} +--- !u!65 &65801773077148412 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1239953840342384} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.08, y: 0.08, z: 0.015} + m_Center: {x: 0, y: 0, z: 0} +--- !u!102 &102052099225654442 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1650702992504684} + m_Text: Adjust + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 7 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 48 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!114 &114175038440563122 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1239953840342384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4768146f072b50149a922df192dfb58f, type: 3} + m_Name: + m_EditorClassIdentifier: + flattenedAxis: 0 + scaleHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, type: 2} + rotateHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, + type: 2} + interactingMaterial: {fileID: 2100000, guid: b614a09bc429623478e946d8170b15ae, type: 2} + scaleRate: 1 + maxScale: 2 + rotationType: 0 + handMotionToRotate: 0 + boundingBoxPrefab: {fileID: 114030465538688920, guid: 865a8ded6c47efd4285f04f3aebe99e9, + type: 2} + appBarPrefab: {fileID: 114050950401502068, guid: aa610ada334bff640a535f0d23a9a15c, + type: 2} diff --git a/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxRig.prefab.meta b/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxRig.prefab.meta new file mode 100644 index 00000000000..f5253a2b800 --- /dev/null +++ b/Assets/HoloToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxRig.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 57828122b3388d742a3d8b33042e2223 +timeCreated: 1519339051 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/AppBar.meta b/Assets/HoloToolkit/UX/Scripts/AppBar.meta new file mode 100644 index 00000000000..af983e077a0 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/AppBar.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d43782e5b880f2043957f732e0c4d1e7 +folderAsset: yes +timeCreated: 1522887691 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/AppBar/AppBar.cs b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBar.cs new file mode 100644 index 00000000000..f148ee8cd1f --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBar.cs @@ -0,0 +1,524 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using HoloToolkit.Unity.Buttons; +using HoloToolkit.Unity.InputModule; +using HoloToolkit.Unity.Receivers; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace HoloToolkit.Unity.UX +{ + /// + /// Logic for the App Bar. Generates buttons, manages states. + /// + public class AppBar : InteractionReceiver + { + private float buttonWidth = 1.50f; + + /// + /// How many custom buttons can be added to the toolbar + /// + public const int MaxCustomButtons = 5; + + /// + /// Where to display the app bar on the y axis + /// This can be set to negative values + /// to force the app bar to appear below the object + /// + public float HoverOffsetYScale = 0.25f; + + /// + /// Pushes the app bar away from the object + /// + public float HoverOffsetZ = 0f; + + /// + /// Class used for building toolbar buttons + /// (not yet in use) + /// + [Serializable] + public struct ButtonTemplate + { + public ButtonTemplate(ButtonTypeEnum type, string name, string icon, string text, int defaultPosition, int manipulationPosition) + { + Type = type; + Name = name; + Icon = icon; + Text = text; + DefaultPosition = defaultPosition; + ManipulationPosition = manipulationPosition; + EventTarget = null; + OnTappedEvent = null; + } + + public bool IsEmpty + { + get + { + return string.IsNullOrEmpty(Name); + } + } + + public int DefaultPosition; + public int ManipulationPosition; + public ButtonTypeEnum Type; + public string Name; + public string Icon; + public string Text; + public InteractionReceiver EventTarget; + public UnityEvent OnTappedEvent; + } + + [Flags] + public enum ButtonTypeEnum + { + Custom = 0, + Remove = 1, + Adjust = 2, + Hide = 4, + Show = 8, + Done = 16 + } + + public enum AppBarDisplayTypeEnum + { + Manipulation, + Standalone + } + + public enum AppBarStateEnum + { + Default, + Manipulation, + Hidden + } + + public BoundingBox BoundingBox + { + get + { + return boundingBox; + } + set + { + boundingBox = value; + } + } + + public GameObject SquareButtonPrefab; + + public int NumDefaultButtons + { + get + { + return numDefaultButtons; + } + } + + public int NumManipulationButtons + { + get + { + return numManipulationButtons; + } + } + + public bool UseRemove = true; + public bool UseAdjust = true; + public bool UseHide = true; + + public ButtonTemplate[] Buttons + { + get + { + return buttons; + } + set + { + buttons = value; + } + } + + public ButtonTemplate[] DefaultButtons + { + get + { + return defaultButtons; + } + } + + public AppBarDisplayTypeEnum DisplayType = AppBarDisplayTypeEnum.Manipulation; + public AppBarStateEnum State = AppBarStateEnum.Default; + + /// + /// Custom icon profile + /// If null, the profile in the SquareButtonPrefab object will be used + /// + public ButtonIconProfile CustomButtonIconProfile; + + [SerializeField] + private ButtonTemplate[] buttons = new ButtonTemplate[MaxCustomButtons]; + + [SerializeField] + private Transform buttonParent; + + [SerializeField] + private GameObject baseRenderer; + + [SerializeField] + private GameObject backgroundBar; + + [SerializeField] + private BoundingBox boundingBox; + + private ButtonTemplate[] defaultButtons; + private Vector3[] forwards = new Vector3[4]; + private Vector3 targetBarSize = Vector3.one; + private float lastTimeTapped = 0f; + private float coolDownTime = 0.5f; + private int numDefaultButtons; + private int numHiddenButtons; + private int numManipulationButtons; + + public void Reset() + { + State = AppBarStateEnum.Default; + FollowBoundingBox(false); + lastTimeTapped = Time.time + coolDownTime; + } + + public void Start() + { + State = AppBarStateEnum.Default; + if (interactables.Count == 0) + { + RefreshTemplates(); + for (int i = 0; i < defaultButtons.Length; i++) + { + CreateButton(defaultButtons[i], null); + } + + for (int i = 0; i < buttons.Length; i++) + { + CreateButton(buttons[i], CustomButtonIconProfile); + } + } + } + + protected override void InputClicked(GameObject obj, InputClickedEventData eventData) + { + if (Time.time < lastTimeTapped + coolDownTime) + { + return; + } + + lastTimeTapped = Time.time; + base.InputClicked(obj, eventData); + + switch (obj.name) + { + case "Remove": + // Destroy the target object, Bounding Box, Bounding Box Rig and App Bar + boundingBox.Target.GetComponent().Deactivate(); + Destroy(boundingBox.Target.GetComponent()); + Destroy(boundingBox.Target); + Destroy(gameObject); + break; + + case "Adjust": + // Make the bounding box active so users can manipulate it + State = AppBarStateEnum.Manipulation; + // Activate BoundingBoxRig + boundingBox.Target.GetComponent().Activate(); + break; + + case "Hide": + // Make the bounding box inactive and invisible + State = AppBarStateEnum.Hidden; + break; + + case "Show": + State = AppBarStateEnum.Default; + // Deactivate BoundingBoxRig + boundingBox.Target.GetComponent().Deactivate(); + break; + + case "Done": + State = AppBarStateEnum.Default; + // Deactivate BoundingBoxRig + boundingBox.Target.GetComponent().Deactivate(); + break; + + default: + break; + } + } + + private void CreateButton(ButtonTemplate template, ButtonIconProfile customIconProfile) + { + if (template.IsEmpty) + { + return; + } + + switch (template.Type) + { + case ButtonTypeEnum.Custom: + numDefaultButtons++; + break; + + case ButtonTypeEnum.Adjust: + numDefaultButtons++; + break; + + case ButtonTypeEnum.Done: + numManipulationButtons++; + break; + + case ButtonTypeEnum.Remove: + numManipulationButtons++; + numDefaultButtons++; + break; + + case ButtonTypeEnum.Hide: + numDefaultButtons++; + break; + + case ButtonTypeEnum.Show: + numHiddenButtons++; + break; + + default: + throw new ArgumentOutOfRangeException(); + } + + GameObject newButton = Instantiate(SquareButtonPrefab, buttonParent); + newButton.name = template.Name; + newButton.transform.localPosition = Vector3.zero; + newButton.transform.localRotation = Quaternion.identity; + AppBarButton mtb = newButton.AddComponent(); + mtb.Initialize(this, template, customIconProfile); + } + + private void FollowBoundingBox(bool smooth) + { + if (boundingBox == null) + { + if (DisplayType == AppBarDisplayTypeEnum.Manipulation) + { + // Hide our buttons + baseRenderer.SetActive(false); + } + else + { + baseRenderer.SetActive(true); + } + return; + } + + // Show our buttons + baseRenderer.SetActive(true); + + // Get positions for each side of the bounding box + // Choose the one that's closest to us + forwards[0] = boundingBox.transform.forward; + forwards[1] = boundingBox.transform.right; + forwards[2] = -boundingBox.transform.forward; + forwards[3] = -boundingBox.transform.right; + Vector3 scale = boundingBox.TargetBoundsLocalScale; + float maxXYScale = Mathf.Max(scale.x, scale.y); + float closestSoFar = Mathf.Infinity; + Vector3 finalPosition = Vector3.zero; + Vector3 finalForward = Vector3.zero; + Vector3 headPosition = Camera.main.transform.position; + + for (int i = 0; i < forwards.Length; i++) + { + Vector3 nextPosition = boundingBox.transform.position + + (forwards[i] * -maxXYScale) + + (Vector3.up * (-scale.y * HoverOffsetYScale)); + + float distance = Vector3.Distance(nextPosition, headPosition); + if (distance < closestSoFar) + { + closestSoFar = distance; + finalPosition = nextPosition; + finalForward = forwards[i]; + } + } + + // Apply hover offset + finalPosition += (finalForward * -HoverOffsetZ); + + // Follow our bounding box + transform.position = smooth ? + Vector3.Lerp(transform.position, finalPosition, 0.5f) : + finalPosition; + + // Rotate on the y axis + Vector3 eulerAngles = Quaternion.LookRotation((boundingBox.transform.position - finalPosition).normalized, Vector3.up).eulerAngles; + eulerAngles.x = 0f; + eulerAngles.z = 0f; + transform.eulerAngles = eulerAngles; + } + + private void Update() + { + FollowBoundingBox(true); + + switch (State) + { + case AppBarStateEnum.Default: + targetBarSize = new Vector3(numDefaultButtons * buttonWidth, buttonWidth, 1f); + break; + + case AppBarStateEnum.Hidden: + targetBarSize = new Vector3(numHiddenButtons * buttonWidth, buttonWidth, 1f); + break; + + case AppBarStateEnum.Manipulation: + targetBarSize = new Vector3(numManipulationButtons * buttonWidth, buttonWidth, 1f); + break; + + default: + throw new ArgumentOutOfRangeException(); + } + + backgroundBar.transform.localScale = Vector3.Lerp(backgroundBar.transform.localScale, targetBarSize, 0.5f); + } + + private void RefreshTemplates() + { + int numCustomButtons = 0; + for (int i = 0; i < buttons.Length; i++) + { + if (!buttons[i].IsEmpty) + { + numCustomButtons++; + } + } + + var defaultButtonsList = new List(); + + // Create our default button templates based on user preferences + if (UseRemove) + { + defaultButtonsList.Add(GetDefaultButtonTemplateFromType(ButtonTypeEnum.Remove, numCustomButtons, UseHide, UseAdjust)); + } + + if (UseAdjust) + { + defaultButtonsList.Add(GetDefaultButtonTemplateFromType(ButtonTypeEnum.Adjust, numCustomButtons, UseHide, UseAdjust)); + defaultButtonsList.Add(GetDefaultButtonTemplateFromType(ButtonTypeEnum.Done, numCustomButtons, UseHide, UseAdjust)); + } + + if (UseHide) + { + defaultButtonsList.Add(GetDefaultButtonTemplateFromType(ButtonTypeEnum.Hide, numCustomButtons, UseHide, UseAdjust)); + defaultButtonsList.Add(GetDefaultButtonTemplateFromType(ButtonTypeEnum.Show, numCustomButtons, UseHide, UseAdjust)); + } + defaultButtons = defaultButtonsList.ToArray(); + } + +#if UNITY_EDITOR + public void EditorRefreshTemplates() + { + RefreshTemplates(); + } +#endif + + /// + /// Generates a template for a default button based on type + /// + /// + /// + /// + /// + /// + private static ButtonTemplate GetDefaultButtonTemplateFromType(ButtonTypeEnum type, int numCustomButtons, bool useHide, bool useAdjust) + { + // Button position is based on custom buttons + // In the app bar, Hide/Show + switch (type) + { + case ButtonTypeEnum.Custom: + return new ButtonTemplate( + ButtonTypeEnum.Custom, + "Custom", + "", + "Custom", + 0, + 0); + + case ButtonTypeEnum.Adjust: + int adjustPosition = numCustomButtons + 1; + + if (!useHide) + { + adjustPosition--; + } + + return new ButtonTemplate( + ButtonTypeEnum.Adjust, + "Adjust", + "ObjectCollectionScatter", // Replace with your custom icon texture name in HolographicButton prefab + "Adjust", + adjustPosition, // Always next-to-last to appear + 0); + + case ButtonTypeEnum.Done: + return new ButtonTemplate( + ButtonTypeEnum.Done, + "Done", + "ObjectCollectionScatter", // Replace with your custom icon texture name in HolographicButton prefab + "Done", + 0, + 0); + + case ButtonTypeEnum.Hide: + return new ButtonTemplate( + ButtonTypeEnum.Hide, + "Hide", + "ObjectCollectionScatter", // Replace with your custom icon texture name in HolographicButton prefab + "Hide Menu", + 0, // Always the first to appear + 0); + + case ButtonTypeEnum.Remove: + int removePosition = numCustomButtons + 1; + if (useAdjust) + { + removePosition++; + } + + if (!useHide) + { + removePosition--; + } + + return new ButtonTemplate( + ButtonTypeEnum.Remove, + "Remove", + "ObjectCollectionScatter", // Replace with your custom icon texture name in HolographicButton prefab + "Remove", + removePosition, // Always the last to appear + 1); + + case ButtonTypeEnum.Show: + return new ButtonTemplate( + ButtonTypeEnum.Show, + "Show", + "ObjectCollectionScatter", // Replace with your custom icon texture name in HolographicButton prefab + "Show Menu", + 0, + 0); + + default: + throw new ArgumentOutOfRangeException("type", type, null); + } + } + } +} diff --git a/Assets/HoloToolkit/UX/Scripts/AppBar/AppBar.cs.meta b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBar.cs.meta new file mode 100644 index 00000000000..c3ab4f6edc3 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBar.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 80c870726057bb743b9c4f8faa604b98 +timeCreated: 1519284585 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/AppBar/AppBarButton.cs b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBarButton.cs new file mode 100644 index 00000000000..6ec3e06cc21 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBarButton.cs @@ -0,0 +1,187 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// +using HoloToolkit.Unity.Buttons; +using UnityEngine; + +namespace HoloToolkit.Unity.UX +{ + /// + /// Button logic for the App Bar. Determines position of the button in the App Bar, visibility based on the current mode. + /// + public class AppBarButton : MonoBehaviour + { + private ButtonIconProfile customIconProfile; + private AppBar.ButtonTemplate template; + private Vector3 targetPosition; + private Vector3 defaultOffset; + private Vector3 hiddenOffset; + private Vector3 manipulationOffset; + private CompoundButton cButton; + private Renderer highlightMeshRenderer; + private CompoundButtonText text; + private CompoundButtonIcon icon; + private AppBar parentToolBar; + private bool initialized = false; + + public const float ButtonWidth = 0.12f; + public const float ButtonDepth = 0.0001f; + const float MoveSpeed = 5f; + + public void Initialize(AppBar newParentToolBar, AppBar.ButtonTemplate newTemplate, ButtonIconProfile newCustomProfile) + { + template = newTemplate; + customIconProfile = newCustomProfile; + parentToolBar = newParentToolBar; + + cButton = GetComponent(); + cButton.MainRenderer.enabled = false; + text = GetComponent(); + text.Text = template.Text; + icon = GetComponent(); + highlightMeshRenderer = cButton.GetComponent().Renderer; + + if (customIconProfile != null) + { + icon.Profile = customIconProfile; + icon.IconName = string.Empty; + } + icon.IconName = template.Icon; + initialized = true; + Hide(); + + if (newTemplate.EventTarget != null) + { + // Register the button with its target interactable + newTemplate.EventTarget.Registerinteractable(gameObject); + } else + { + // Register the button with the parent app bar + newParentToolBar.Registerinteractable(gameObject); + } + } + + protected void OnEnable () + { + Hide(); + } + + protected void Update() + { + if (!initialized) + return; + + RefreshOffsets(); + + switch (parentToolBar.State) + { + case AppBar.AppBarStateEnum.Default: + // Show hide, adjust, remove buttons + // The rest are hidden + targetPosition = defaultOffset; + switch (template.Type) + { + case AppBar.ButtonTypeEnum.Hide: + case AppBar.ButtonTypeEnum.Remove: + case AppBar.ButtonTypeEnum.Adjust: + case AppBar.ButtonTypeEnum.Custom: + Show(); + break; + + default: + Hide(); + break; + } + break; + + case AppBar.AppBarStateEnum.Hidden: + // Show show button + // The rest are hidden + targetPosition = hiddenOffset; + switch (template.Type) + { + case AppBar.ButtonTypeEnum.Show: + Show(); + break; + + default: + Hide(); + break; + } + break; + + case AppBar.AppBarStateEnum.Manipulation: + // Show done / remove buttons + // The rest are hidden + targetPosition = manipulationOffset; + switch (template.Type) + { + case AppBar.ButtonTypeEnum.Done: + case AppBar.ButtonTypeEnum.Remove: + Show(); + break; + + default: + Hide(); + break; + } + break; + } + + transform.localPosition = Vector3.Lerp(transform.localPosition, targetPosition, 0.5f); + } + + private void Hide() + { + if (!initialized) + return; + + icon.Alpha = 0f; + text.DisableText = true; + cButton.enabled = false; + highlightMeshRenderer.enabled = false; + cButton.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast"); + } + + private void Show() + { + if (!initialized) + return; + + icon.Alpha = 1f; + text.DisableText = false; + cButton.enabled = true; + highlightMeshRenderer.enabled = true; + cButton.gameObject.layer = LayerMask.NameToLayer("UI"); + } + + private void RefreshOffsets() + { + // Apply offset based on total number of buttons + float xDefaultOffset = (parentToolBar.NumDefaultButtons / 2) * ButtonWidth; + float xManipulationOffset = (parentToolBar.NumManipulationButtons / 2) * ButtonWidth; + + // For odd numbers of buttons, add an additional 1/2 button offset + if (parentToolBar.NumDefaultButtons > 1 && parentToolBar.NumDefaultButtons % 2 == 0) + { + xDefaultOffset -= (ButtonWidth / 2); + } + if (parentToolBar.NumManipulationButtons > 1 && parentToolBar.NumManipulationButtons % 2 == 0) + { + xManipulationOffset -= (ButtonWidth / 2); + } + + defaultOffset = new Vector3( + template.DefaultPosition * ButtonWidth - xDefaultOffset, + 0f, + template.DefaultPosition * ButtonDepth); + manipulationOffset = new Vector3( + template.ManipulationPosition * ButtonWidth - xManipulationOffset, + 0f, + template.ManipulationPosition * ButtonDepth); + hiddenOffset = Vector3.zero; + } + + } +} diff --git a/Assets/HoloToolkit/UX/Scripts/AppBar/AppBarButton.cs.meta b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBarButton.cs.meta new file mode 100644 index 00000000000..95cef870b5f --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/AppBar/AppBarButton.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fb66df91526e2034e94cac3868625598 +timeCreated: 1519284586 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmo.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmo.cs index ec5b5e9150d..e3e0331bafc 100644 --- a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmo.cs +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmo.cs @@ -1,7 +1,6 @@ -// -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. -// + using UnityEngine; namespace HoloToolkit.Unity.UX diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs new file mode 100644 index 00000000000..0a3d7c22c59 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs @@ -0,0 +1,379 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using HoloToolkit.Unity.InputModule; +using UnityEngine; + +#if UNITY_WSA && UNITY_2017_2_OR_NEWER +using UnityEngine.XR.WSA; +#endif + +namespace HoloToolkit.Unity.UX +{ + /// + /// Logic for the gizmo handles in Bounding Box + /// + public class BoundingBoxGizmoHandle : MonoBehaviour, IInputHandler, ISourceStateHandler + { + private BoundingBoxRig rig; + private Transform transformToAffect; + private BoundingBoxGizmoHandleTransformType affineType; + private BoundingBoxGizmoHandleAxisToAffect axis; + private Vector3 initialHandPosition; + private Vector3 initialScale; + private Vector3 initialPosition; + private Vector3 initialOrientation; + private Quaternion initialRotation; + private Quaternion initialHandOrientation; + private Vector3 initialScaleOrigin; + private InputEventData inputDownEventData; + private bool isHandRotationAvailable; + private bool isLeftHandedRotation = false; + private Vector3 rotationFromPositionScale = new Vector3(-300.0f, -300.0f, -300.0f); + private float minimumScaleNav = 0.001f; + private float scaleRate = 1.0f; + private float maxScale = 10.0f; + private BoundingBoxGizmoHandleRotationType rotationCoordinateSystem; + private BoundingBoxGizmoHandleHandMotionType handMotionForRotation; + + public BoundingBoxGizmoHandleTransformType AffineType + { + get + { + return affineType; + } + + set + { + affineType = value; + } + } + public BoundingBoxGizmoHandleAxisToAffect Axis + { + get + { + return axis; + } + + set + { + axis = value; + } + } + public bool IsLeftHandedRotation + { + get + { + return isLeftHandedRotation; + } + + set + { + isLeftHandedRotation = value; + } + } + public Transform TransformToAffect + { + get + { + return transformToAffect; + } + + set + { + transformToAffect = value; + } + } + public BoundingBoxGizmoHandleRotationType RotationCoordinateSystem + { + get + { + return rotationCoordinateSystem; + } + set + { + rotationCoordinateSystem = value; + } + } + public BoundingBoxGizmoHandleHandMotionType HandMotionForRotation + { + get + { + return handMotionForRotation; + } + set + { + handMotionForRotation = value; + } + } + public float ScaleRate + { + get + { + return scaleRate; + } + set + { + scaleRate = value; + } + } + public float MaxScale + { + get + { + return maxScale; + } + set + { + maxScale = value; + } + } + public BoundingBoxRig Rig + { + get + { + return rig; + } + + set + { + rig = value; + } + } + + private void Start() + { + isHandRotationAvailable = true; + +#if UNITY_WSA && UNITY_2017_2_OR_NEWER + if (HolographicSettings.IsDisplayOpaque == false) + { + isHandRotationAvailable = false; + } +#endif + cachedRenderer = gameObject.GetComponent(); + } + private void Update() + { + if (inputDownEventData != null) + { + Vector3 currentHandPosition = Vector3.zero; + Quaternion currentHandOrientation = Quaternion.identity; + + //set values from hand + currentHandPosition = GetHandPosition(inputDownEventData.SourceId); + if (isHandRotationAvailable) + { + currentHandOrientation = GetHandOrientation(inputDownEventData.SourceId); + } + + //calculate affines + if (this.AffineType == BoundingBoxGizmoHandleTransformType.Scale) + { + ApplyScale(currentHandPosition); + } + else if (this.AffineType == BoundingBoxGizmoHandleTransformType.Rotation) + { + if (isHandRotationAvailable && handMotionForRotation == BoundingBoxGizmoHandleHandMotionType.handRotatesToRotateObject) + { + ApplyRotation(currentHandOrientation); + } + else + { + ApplyRotation(currentHandPosition); + } + } + } + } + + private Vector3 GetHandPosition(uint sourceId) + { + Vector3 handPosition = new Vector3(0, 0, 0); + inputDownEventData.InputSource.TryGetGripPosition(sourceId, out handPosition); + return handPosition; + } + private Quaternion GetHandOrientation(uint sourceId) + { + Quaternion handOrientation = Quaternion.identity; + inputDownEventData.InputSource.TryGetGripRotation(sourceId, out handOrientation); + return handOrientation; + } + private void ApplyScale(Vector3 currentHandPosition) + { + if ((transformToAffect.position - initialHandPosition).magnitude > minimumScaleNav) + { + float scaleScalar = (currentHandPosition - transformToAffect.position).magnitude / (transformToAffect.position - initialHandPosition).magnitude; + scaleScalar = Mathf.Pow(scaleScalar, scaleRate); + Vector3 changeScale = new Vector3(scaleScalar, scaleScalar, scaleScalar); + changeScale = GetBoundedScaleChange(changeScale); + + Vector3 newScale = changeScale; + newScale.Scale(initialScale); + + //scale from object center + transformToAffect.localScale = newScale; + + //now handle offset + Vector3 currentScaleOrigin = initialScaleOrigin; + currentScaleOrigin.Scale(changeScale); + Vector3 postScaleOffset = currentScaleOrigin - initialScaleOrigin; + + //translate so that scale is effectively from opposite corner + transformToAffect.position = initialPosition - postScaleOffset; + } + } + private void ApplyRotation(Quaternion currentHandOrientation) + { + Matrix4x4 m = Matrix4x4.Rotate(initialHandOrientation); + Vector3 initRay = new Vector3(0, 0, 1); + initRay = m.MultiplyPoint(initRay); + initRay.Normalize(); + + m = Matrix4x4.Rotate(currentHandOrientation); + Vector3 currentRay = new Vector3(0, 0, 1); + currentRay = m.MultiplyPoint(currentRay); + currentRay.Normalize(); + + float angle = Vector3.Dot(initRay, currentRay); + angle = Mathf.Acos(angle) * Mathf.Rad2Deg; + if (Mathf.Abs(initRay.y - currentRay.y) < Mathf.Abs(initRay.x - currentRay.x)) + { + if (Vector3.Cross(initRay, currentRay).y > 0) + { + angle = -angle; + } + } + else if (Vector3.Cross(initRay, currentRay).x > 0) + { + angle = -angle; + } + + if (rotationCoordinateSystem == BoundingBoxGizmoHandleRotationType.globalCoordinates) + { + Vector3 newEulers = (Axis == BoundingBoxGizmoHandleAxisToAffect.X ? new Vector3(angle, 0, 0) : Axis == BoundingBoxGizmoHandleAxisToAffect.Y ? new Vector3(0, angle, 0) : new Vector3(0, 0, angle)); + newEulers += initialOrientation; + transformToAffect.rotation = Quaternion.Euler(newEulers); + } + else + { + Vector3 axis = (Axis == BoundingBoxGizmoHandleAxisToAffect.X ? new Vector3(1,0,0) : Axis == BoundingBoxGizmoHandleAxisToAffect.Y ? new Vector3(0,1,0) : new Vector3(0,0,1) ); + transformToAffect.localRotation = initialRotation; + transformToAffect.Rotate(axis, angle * 5.0f); + } + } + private void ApplyRotation(Vector3 currentHandPosition) + { + Vector3 initialRay = initialHandPosition - transformToAffect.position; + initialRay.Normalize(); + + Vector3 currentRay = currentHandPosition - transformToAffect.position; + currentRay.Normalize(); + + Vector3 delta = currentRay - initialRay; + delta.Scale(rotationFromPositionScale); + + Vector3 newEulers = new Vector3(0, 0, 0); + if (Axis == BoundingBoxGizmoHandleAxisToAffect.X) + { + newEulers = new Vector3(-delta.y, 0, 0); + } + else if (Axis == BoundingBoxGizmoHandleAxisToAffect.Y) + { + newEulers = new Vector3(0, delta.x, 0); + } + else if (Axis == BoundingBoxGizmoHandleAxisToAffect.Z) + { + newEulers = new Vector3(0, 0, delta.y); + } + if (IsLeftHandedRotation) + { + newEulers.Scale(new Vector3(-1.0f, -1.0f, -1.0f)); + } + + if (rotationCoordinateSystem == BoundingBoxGizmoHandleRotationType.globalCoordinates) + { + newEulers += initialOrientation; + transformToAffect.rotation = Quaternion.Euler(newEulers); + } + else + { + Vector3 axis = (Axis == BoundingBoxGizmoHandleAxisToAffect.X ? new Vector3(1, 0, 0) : Axis == BoundingBoxGizmoHandleAxisToAffect.Y ? new Vector3(0, 1, 0) : new Vector3(0, 0,1)); + transformToAffect.localRotation = initialRotation; + float angle = newEulers.x != 0 ? newEulers.x : newEulers.y != 0 ? newEulers.y : newEulers.z; + transformToAffect.Rotate(axis, angle * 2.0f); + } + } + private Vector3 GetBoundedScaleChange(Vector3 scale) + { + Vector3 maximumScale = new Vector3(initialScale.x * maxScale, initialScale.y * maxScale, initialScale.z * maxScale); + Vector3 intendedFinalScale = new Vector3(initialScale.x, initialScale.y, initialScale.z); + intendedFinalScale.Scale(scale); + if (intendedFinalScale.x > maximumScale.x || intendedFinalScale.y > maximumScale.y || intendedFinalScale.z > maximumScale.z) + { + return new Vector3(maximumScale.x / initialScale.x, maximumScale.y / initialScale.y, maximumScale.z / initialScale.z); + } + + return scale; + } + + private Renderer cachedRenderer; + + private void ResetRigHandles() + { + inputDownEventData = null; + + if (this.AffineType == BoundingBoxGizmoHandleTransformType.Scale) + { + cachedRenderer.sharedMaterial = Rig.ScaleHandleMaterial; + } + else + { + cachedRenderer.sharedMaterial = Rig.RotateHandleMaterial; + } + + HoloToolkit.Unity.InputModule.InputManager.Instance.PopModalInputHandler(); + Rig.FocusOnHandle(null); + } + + public void OnInputDown(InputEventData eventData) + { + inputDownEventData = eventData; + + initialHandPosition = GetHandPosition(eventData.SourceId); + initialScale = transformToAffect.localScale; + initialPosition = transformToAffect.position; + initialOrientation = transformToAffect.rotation.eulerAngles; + initialRotation = transformToAffect.rotation; + initialHandOrientation = GetHandOrientation(eventData.SourceId); + initialScaleOrigin = transformToAffect.position - this.transform.position; + + HoloToolkit.Unity.InputModule.InputManager.Instance.PushModalInputHandler(gameObject); + + cachedRenderer.sharedMaterial = Rig.InteractingMaterial; + Rig.FocusOnHandle(this.gameObject); + eventData.Use(); + } + public void OnInputUp(InputEventData eventData) + { + inputDownEventData = null; + ResetRigHandles(); + + if (eventData != null) + { + eventData.Use(); + } + } + public void OnSourceDetected(SourceStateEventData eventData) + { + } + public void OnSourceLost(SourceStateEventData eventData) + { + if (eventData.SourceId == inputDownEventData.SourceId) + { + inputDownEventData = null; + ResetRigHandles(); + } + eventData.Use(); + } + } +} \ No newline at end of file diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs.meta b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs.meta new file mode 100644 index 00000000000..d245efe8026 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: af9fcc1008a58be468d9548d416c6846 +timeCreated: 1519165009 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleAxisToAffectEnum.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleAxisToAffectEnum.cs new file mode 100644 index 00000000000..12cba98a61d --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleAxisToAffectEnum.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Unity.UX +{ + public enum BoundingBoxGizmoHandleAxisToAffect + { + X, + Y, + Z + } +} diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleAxisToAffectEnum.cs.meta b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleAxisToAffectEnum.cs.meta new file mode 100644 index 00000000000..329ac931cc1 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleAxisToAffectEnum.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 40b4dbab0d21ed147a024f8211b47916 +timeCreated: 1522971839 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleHandMotionTypeEnum.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleHandMotionTypeEnum.cs new file mode 100644 index 00000000000..70c03cedc01 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleHandMotionTypeEnum.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Unity.UX +{ + public enum BoundingBoxGizmoHandleHandMotionType + { + handRotatesToRotateObject, + handMovesToRotateObject + } +} diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleHandMotionTypeEnum.cs.meta b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleHandMotionTypeEnum.cs.meta new file mode 100644 index 00000000000..60c0ff30319 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleHandMotionTypeEnum.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3de53561d7fee9449a34cdc188c81729 +timeCreated: 1522971563 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleRotationTypeEnum.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleRotationTypeEnum.cs new file mode 100644 index 00000000000..1d8d2365d71 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleRotationTypeEnum.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Unity.UX +{ + public enum BoundingBoxGizmoHandleRotationType + { + objectCoordinates, + globalCoordinates + } +} diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleRotationTypeEnum.cs.meta b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleRotationTypeEnum.cs.meta new file mode 100644 index 00000000000..6cc9bd4f324 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleRotationTypeEnum.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 502d0e6e92966b240b7cd1fd5127e560 +timeCreated: 1522971385 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleTransformTypeEnum.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleTransformTypeEnum.cs new file mode 100644 index 00000000000..1612ca36701 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleTransformTypeEnum.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Unity.UX +{ + public enum BoundingBoxGizmoHandleTransformType + { + Rotation, + Scale + } +} diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleTransformTypeEnum.cs.meta b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleTransformTypeEnum.cs.meta new file mode 100644 index 00000000000..4bb86b263f8 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandleTransformTypeEnum.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 014f19f62b6cc8a42a66c786fb0e2cf5 +timeCreated: 1522971839 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoShell.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoShell.cs index d40a16af23e..885735a2b18 100644 --- a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoShell.cs +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoShell.cs @@ -1,9 +1,6 @@ -// -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. -// -using System.Collections.Generic; using UnityEngine; namespace HoloToolkit.Unity.UX @@ -59,12 +56,5 @@ public class BoundingBoxGizmoShell : BoundingBoxGizmo protected GameObject zyHandlesObject; #endregion - - #region custom editor -#if UNITY_EDITOR - [UnityEditor.CustomEditor(typeof(BoundingBoxGizmoShell))] - public class CustomEditor : MRTKEditor { } -#endif - #endregion } } \ No newline at end of file diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs new file mode 100644 index 00000000000..fde8804cf81 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs @@ -0,0 +1,528 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using HoloToolkit.Unity.UX; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity.UX +{ + /// + /// Constructs the scale and rotate gizmo handles for the Bounding Box + /// + public class BoundingBoxRig : MonoBehaviour + { + [Header("Flattening")] + [SerializeField] + [Tooltip("Choose this option if Rig is to be applied to a 2D object.")] + private BoundingBox.FlattenModeEnum flattenedAxis; + + [Header("Customization Settings")] + [SerializeField] + private Material scaleHandleMaterial; + + [SerializeField] + private Material rotateHandleMaterial; + + [SerializeField] + private Material interactingMaterial; + + [Header("Behavior")] + [SerializeField] + private float scaleRate = 1.0f; + + [SerializeField] + [Tooltip("This is the maximum scale that one grab can accomplish.")] + private float maxScale = 2.0f; + + [SerializeField] + private BoundingBoxGizmoHandleRotationType rotationType = BoundingBoxGizmoHandleRotationType.objectCoordinates; + + [SerializeField] + private BoundingBoxGizmoHandleHandMotionType handMotionToRotate = BoundingBoxGizmoHandleHandMotionType.handRotatesToRotateObject; + + [Header("Preset Components")] + [SerializeField] + [Tooltip("To visualize the object bounding box, drop the MixedRealityToolkit/UX/Prefabs/BoundingBoxes/BoundingBoxBasic.prefab here.")] + private BoundingBox boundingBoxPrefab; + + [SerializeField] + [Tooltip("AppBar prefab.")] + private AppBar appBarPrefab; + + private BoundingBox boxInstance; + + private GameObject objectToBound; + + private AppBar appBarInstance; + + private GameObject[] rotateHandles; + + private GameObject[] cornerHandles; + + private List handleCentroids; + + private GameObject transformRig; + + private BoundingBoxGizmoHandle[] rigScaleGizmoHandles; + + private BoundingBoxGizmoHandle[] rigRotateGizmoHandles; + + private bool showRig = false; + + private Vector3 scaleHandleSize = new Vector3(0.04f, 0.04f, 0.04f); + + private Vector3 rotateHandleSize = new Vector3(0.04f, 0.04f, 0.04f); + + private bool destroying = false; + + public BoundingBox BoundingBoxPrefab + { + get + { + return boundingBoxPrefab; + } + + set + { + boundingBoxPrefab = value; + } + } + + public Material ScaleHandleMaterial + { + get + { + return scaleHandleMaterial; + } + + set + { + scaleHandleMaterial = value; + } + } + + public Material RotateHandleMaterial + { + get + { + return rotateHandleMaterial; + } + + set + { + rotateHandleMaterial = value; + } + } + + public Material InteractingMaterial + { + get + { + return interactingMaterial; + } + + set + { + interactingMaterial = value; + } + } + + public void Activate() + { + ShowRig = true; + } + + public void Deactivate() + { + ShowRig = false; + } + + public void FocusOnHandle(GameObject handle) + { + if (handle != null) + { + for (int i = 0; i < rotateHandles.Length; ++i) + { + rotateHandles[i].SetActive(rotateHandles[i].gameObject == handle); + } + for (int i = 0; i < cornerHandles.Length; ++i) + { + cornerHandles[i].SetActive(cornerHandles[i].gameObject == handle); + } + } + else + { + for (int i = 0; i < rotateHandles.Length; ++i) + { + rotateHandles[i].SetActive(true); + } + for (int i = 0; i < cornerHandles.Length; ++i) + { + cornerHandles[i].SetActive(true); + } + } + } + + + private void Start() + { + objectToBound = this.gameObject; + + boxInstance = Instantiate(BoundingBoxPrefab) as BoundingBox; + boxInstance.Target = objectToBound; + boxInstance.FlattenPreference = flattenedAxis; + + BuildRig(); + + appBarInstance = Instantiate(appBarPrefab) as AppBar; + appBarInstance.BoundingBox = boxInstance; + + boxInstance.IsVisible = false; + } + + private void Update() + { + if (destroying == false && ShowRig) + { + UpdateBoundsPoints(); + UpdateHandles(); + } + } + + private void OnDestroy() + { + destroying = true; + ShowRig = false; + ClearHandles(); + } + + private void UpdateBoundsPoints() + { + handleCentroids = GetBounds(); + } + + private void CreateHandles() + { + ClearHandles(); + UpdateCornerHandles(); + UpdateRotateHandles(); + ParentHandles(); + UpdateHandles(); + } + + private void UpdateCornerHandles() + { + if (handleCentroids != null) + { + GetBounds(); + } + + if (cornerHandles == null) + { + cornerHandles = new GameObject[handleCentroids.Count]; + rigScaleGizmoHandles = new BoundingBoxGizmoHandle[handleCentroids.Count]; + for (int i = 0; i < cornerHandles.Length; ++i) + { + cornerHandles[i] = GameObject.CreatePrimitive(PrimitiveType.Cube); + cornerHandles[i].GetComponent().material = scaleHandleMaterial; + cornerHandles[i].transform.localScale = scaleHandleSize; + cornerHandles[i].name = "Corner " + i.ToString(); + rigScaleGizmoHandles[i] = cornerHandles[i].AddComponent(); + rigScaleGizmoHandles[i].Rig = this; + rigScaleGizmoHandles[i].ScaleRate = scaleRate; + rigScaleGizmoHandles[i].MaxScale = maxScale; + rigScaleGizmoHandles[i].TransformToAffect = objectToBound.transform; + rigScaleGizmoHandles[i].Axis = BoundingBoxGizmoHandleAxisToAffect.Y; + rigScaleGizmoHandles[i].AffineType = BoundingBoxGizmoHandleTransformType.Scale; + } + } + + for (int i = 0; i < cornerHandles.Length; ++i) + { + cornerHandles[i].transform.position = handleCentroids[i]; + cornerHandles[i].transform.localRotation = objectToBound.transform.rotation; + } + } + + private void UpdateRotateHandles() + { + if (handleCentroids != null) + { + GetBounds(); + } + + if (rotateHandles == null) + { + rotateHandles = new GameObject[12]; + rigRotateGizmoHandles = new BoundingBoxGizmoHandle[12]; + for (int i = 0; i < rotateHandles.Length; ++i) + { + rotateHandles[i] = GameObject.CreatePrimitive(PrimitiveType.Sphere); + rotateHandles[i].GetComponent().material = rotateHandleMaterial; + rotateHandles[i].transform.localScale = rotateHandleSize; + rotateHandles[i].name = "Middle " + i.ToString(); + rigRotateGizmoHandles[i] = rotateHandles[i].AddComponent(); + rigRotateGizmoHandles[i].Rig = this; + rigRotateGizmoHandles[i].HandMotionForRotation = handMotionToRotate; + rigRotateGizmoHandles[i].RotationCoordinateSystem = rotationType; + rigRotateGizmoHandles[i].TransformToAffect = objectToBound.transform; + rigRotateGizmoHandles[i].AffineType = BoundingBoxGizmoHandleTransformType.Rotation; + + } + + //set axis to affect + rigRotateGizmoHandles[0].Axis = BoundingBoxGizmoHandleAxisToAffect.Y; + rigRotateGizmoHandles[1].Axis = BoundingBoxGizmoHandleAxisToAffect.Y; + rigRotateGizmoHandles[2].Axis = BoundingBoxGizmoHandleAxisToAffect.Y; + rigRotateGizmoHandles[3].Axis = BoundingBoxGizmoHandleAxisToAffect.Y; + + rigRotateGizmoHandles[4].Axis = BoundingBoxGizmoHandleAxisToAffect.Z; + rigRotateGizmoHandles[5].Axis = BoundingBoxGizmoHandleAxisToAffect.Z; + rigRotateGizmoHandles[6].Axis = BoundingBoxGizmoHandleAxisToAffect.Z; + rigRotateGizmoHandles[7].Axis = BoundingBoxGizmoHandleAxisToAffect.Z; + + rigRotateGizmoHandles[8].Axis = BoundingBoxGizmoHandleAxisToAffect.X; + rigRotateGizmoHandles[9].Axis = BoundingBoxGizmoHandleAxisToAffect.X; + rigRotateGizmoHandles[10].Axis = BoundingBoxGizmoHandleAxisToAffect.X; + rigRotateGizmoHandles[11].Axis = BoundingBoxGizmoHandleAxisToAffect.X; + + //set lefthandedness + rigRotateGizmoHandles[0].IsLeftHandedRotation = false; + rigRotateGizmoHandles[1].IsLeftHandedRotation = false; + rigRotateGizmoHandles[2].IsLeftHandedRotation = false; + rigRotateGizmoHandles[3].IsLeftHandedRotation = false; + + rigRotateGizmoHandles[4].IsLeftHandedRotation = false; + rigRotateGizmoHandles[5].IsLeftHandedRotation = false; + rigRotateGizmoHandles[6].IsLeftHandedRotation = true; + rigRotateGizmoHandles[7].IsLeftHandedRotation = true; + + rigRotateGizmoHandles[8].IsLeftHandedRotation = false; + rigRotateGizmoHandles[9].IsLeftHandedRotation = true; + rigRotateGizmoHandles[10].IsLeftHandedRotation = false; + rigRotateGizmoHandles[11].IsLeftHandedRotation = true; + } + + rotateHandles[0].transform.localPosition = (handleCentroids[2] + handleCentroids[0]) * 0.5f; + rotateHandles[1].transform.localPosition = (handleCentroids[3] + handleCentroids[1]) * 0.5f; + rotateHandles[2].transform.localPosition = (handleCentroids[6] + handleCentroids[4]) * 0.5f; + rotateHandles[3].transform.localPosition = (handleCentroids[7] + handleCentroids[5]) * 0.5f; + rotateHandles[4].transform.localPosition = (handleCentroids[0] + handleCentroids[1]) * 0.5f; + rotateHandles[5].transform.localPosition = (handleCentroids[2] + handleCentroids[3]) * 0.5f; + rotateHandles[6].transform.localPosition = (handleCentroids[4] + handleCentroids[5]) * 0.5f; + rotateHandles[7].transform.localPosition = (handleCentroids[6] + handleCentroids[7]) * 0.5f; + rotateHandles[8].transform.localPosition = (handleCentroids[0] + handleCentroids[4]) * 0.5f; + rotateHandles[9].transform.localPosition = (handleCentroids[1] + handleCentroids[5]) * 0.5f; + rotateHandles[10].transform.localPosition = (handleCentroids[2] + handleCentroids[6]) * 0.5f; + rotateHandles[11].transform.localPosition = (handleCentroids[3] + handleCentroids[7]) * 0.5f; + } + + private void ParentHandles() + { + transformRig.transform.position = boxInstance.transform.position; + transformRig.transform.rotation = boxInstance.transform.rotation; + + Vector3 invScale = objectToBound.transform.localScale; + + transformRig.transform.localScale = new Vector3(0.5f / invScale.x, 0.5f / invScale.y, 0.5f / invScale.z); + transformRig.transform.parent = objectToBound.transform; + } + + private void UpdateHandles() + { + UpdateCornerHandles(); + UpdateRotateHandles(); + } + + private void ClearCornerHandles() + { + if (cornerHandles != null) + { + for (int i = 0; i < cornerHandles.Length; ++i) + { + GameObject.Destroy(cornerHandles[i]); + } + cornerHandles = null; + handleCentroids = null; + } + + cornerHandles = null; + handleCentroids = null; + } + + private void ClearRotateHandles() + { + if (rotateHandles != null && rotateHandles.Length > 0 && rotateHandles[0] != null) + { + for (int i = 0; i < rotateHandles.Length; ++i) + { + if (rotateHandles[i] != null) + { + Destroy(rotateHandles[i]); + rotateHandles[i] = null; + } + } + } + + rotateHandles = null; + } + + private void ClearHandles() + { + ClearCornerHandles(); + ClearRotateHandles(); + } + + private GameObject BuildRig() + { + Vector3 scale = objectToBound.transform.localScale; + + GameObject rig = new GameObject(); + rig.name = "center"; + rig.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity); + rig.transform.localScale = new Vector3(1.0f / scale.x, 1.0f / scale.y, 1.0f / scale.z); + + GameObject upperLeftFront = new GameObject(); + upperLeftFront.name = "upperleftfront"; + upperLeftFront.transform.SetPositionAndRotation(new Vector3(0.5f, 0.5f, 0.5f), Quaternion.identity); + upperLeftFront.transform.localScale = new Vector3(1, 1, 1); + upperLeftFront.transform.parent = rig.transform; + + GameObject upperLeftBack = new GameObject(); + upperLeftBack.name = "upperleftback"; + upperLeftBack.transform.SetPositionAndRotation(new Vector3(0.5f, 0.5f, -0.5f), Quaternion.identity); + upperLeftBack.transform.localScale = new Vector3(1, 1, 1); + upperLeftBack.transform.parent = rig.transform; + + GameObject lowerLeftFront = new GameObject(); + lowerLeftFront.name = "lowerleftfront"; + lowerLeftFront.transform.SetPositionAndRotation(new Vector3(0.5f, -0.5f, 0.5f), Quaternion.identity); + lowerLeftFront.transform.localScale = new Vector3(1, 1, 1); + lowerLeftFront.transform.parent = rig.transform; + + GameObject lowerLeftBack = new GameObject(); + lowerLeftBack.name = "lowerleftback"; + lowerLeftBack.transform.SetPositionAndRotation(new Vector3(0.5f, -0.5f, -0.5f), Quaternion.identity); + lowerLeftBack.transform.localScale = new Vector3(1, 1, 1); + lowerLeftBack.transform.parent = rig.transform; + + GameObject upperRightFront = new GameObject(); + upperRightFront.name = "upperrightfront"; + upperRightFront.transform.SetPositionAndRotation(new Vector3(-0.5f, 0.5f, 0.5f), Quaternion.identity); + upperRightFront.transform.localScale = new Vector3(1, 1, 1); + upperRightFront.transform.parent = rig.transform; + + GameObject upperRightBack = new GameObject(); + upperRightBack.name = "upperrightback"; + upperRightBack.transform.SetPositionAndRotation(new Vector3(-0.5f, 0.5f, -0.5f), Quaternion.identity); + upperRightBack.transform.localScale = new Vector3(1, 1, 1); + upperRightBack.transform.parent = rig.transform; + + GameObject lowerRightFront = new GameObject(); + lowerRightFront.name = "lowerrightfront"; + lowerRightFront.transform.SetPositionAndRotation(new Vector3(-0.5f, -0.5f, 0.5f), Quaternion.identity); + lowerRightFront.transform.localScale = new Vector3(1, 1, 1); + lowerRightFront.transform.parent = rig.transform; + + GameObject lowerRightBack = new GameObject(); + lowerRightBack.name = "lowerrightback"; + lowerRightBack.transform.SetPositionAndRotation(new Vector3(-0.5f, -0.5f, -0.5f), Quaternion.identity); + lowerRightBack.transform.localScale = new Vector3(1, 1, 1); + lowerRightBack.transform.parent = rig.transform; + + transformRig = rig; + + return rig; + } + + private bool ShowRig + { + get + { + return showRig; + } + set + { + if (destroying == false) + { + if (value == true) + { + UpdateBoundsPoints(); + UpdateHandles(); + } + + if (boxInstance != null) + { + boxInstance.IsVisible = value; + } + + if (cornerHandles != null && rotateHandles != null) + { + foreach (GameObject handle in cornerHandles) + { + handle.SetActive(value); + } + foreach (GameObject handle in rotateHandles) + { + handle.SetActive(value); + } + } + + showRig = value; + } + } + } + + + + private List GetBounds() + { + if (objectToBound != null) + { + List bounds = new List(); + LayerMask mask = new LayerMask(); + + GameObject clone = GameObject.Instantiate(boxInstance.gameObject); + clone.transform.localRotation = Quaternion.identity; + clone.transform.position = Vector3.zero; + BoundingBox.GetMeshFilterBoundsPoints(clone, bounds, mask); + Vector3 centroid = boxInstance.TargetBoundsCenter; + GameObject.Destroy(clone); + Matrix4x4 m = Matrix4x4.Rotate(objectToBound.transform.rotation); + for (int i = 0; i < bounds.Count; ++i) + { + bounds[i] = m.MultiplyPoint(bounds[i]); + bounds[i] += boxInstance.TargetBoundsCenter; + } + + return bounds; + } + + return null; + } + + private BoundingBox.FlattenModeEnum GetBestAxisToFlatten() + { + int index = handleCentroids.Count - 8; + float width = (handleCentroids[index + 0] - handleCentroids[index + 4]).magnitude; + float height = (handleCentroids[index + 0] - handleCentroids[index + 2]).magnitude; + float depth = (handleCentroids[index + 0] - handleCentroids[index + 1]).magnitude; + + if (width < height && width < depth) + { + return BoundingBox.FlattenModeEnum.FlattenX; + } + else if (height < width && height < depth) + { + return BoundingBox.FlattenModeEnum.FlattenY; + } + else if (depth < height && depth < width) + { + return BoundingBox.FlattenModeEnum.FlattenZ; + } + + return BoundingBox.FlattenModeEnum.DoNotFlatten; + } + } +} \ No newline at end of file diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs.meta b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs.meta new file mode 100644 index 00000000000..139a4375806 --- /dev/null +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/BoundingBoxRig.cs.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 4768146f072b50149a922df192dfb58f +timeCreated: 1519946350 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - BoundingBoxPrefab: {fileID: 114030465538688920, guid: 865a8ded6c47efd4285f04f3aebe99e9, + type: 2} + - appBarPrefab: {fileID: 114050950401502068, guid: aa610ada334bff640a535f0d23a9a15c, + type: 2} + - scaleHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, + type: 2} + - rotateHandleMaterial: {fileID: 2100000, guid: 4a9072a0d8623aa44abf31f02d209a09, + type: 2} + - interactingMaterial: {fileID: 2100000, guid: b614a09bc429623478e946d8170b15ae, + type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/Duplicator.cs b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/Duplicator.cs index 2e9801e5778..b903956de14 100644 --- a/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/Duplicator.cs +++ b/Assets/HoloToolkit/UX/Scripts/BoundingBoxes/Duplicator.cs @@ -9,6 +9,9 @@ namespace HoloToolkit.Unity.UX { + /// + /// Duplicates target object of the Bounding Box. + /// public class Duplicator : MonoBehaviour { public enum StateEnum diff --git a/External/ReadMeImages/MRTK_AppBar_BoundingBox.jpg b/External/ReadMeImages/MRTK_AppBar_BoundingBox.jpg index 81e4ceebecc..a4897a3fb0d 100644 Binary files a/External/ReadMeImages/MRTK_AppBar_BoundingBox.jpg and b/External/ReadMeImages/MRTK_AppBar_BoundingBox.jpg differ diff --git a/External/ReadMeImages/MRTK_AppBar_BoundingBox_CustomButtons.jpg b/External/ReadMeImages/MRTK_AppBar_BoundingBox_CustomButtons.jpg new file mode 100644 index 00000000000..bdc4d76e377 Binary files /dev/null and b/External/ReadMeImages/MRTK_AppBar_BoundingBox_CustomButtons.jpg differ diff --git a/External/ReadMeImages/MRTK_AppBar_BoundingBox_ExampleScene.jpg b/External/ReadMeImages/MRTK_AppBar_BoundingBox_ExampleScene.jpg new file mode 100644 index 00000000000..6992e9a39a7 Binary files /dev/null and b/External/ReadMeImages/MRTK_AppBar_BoundingBox_ExampleScene.jpg differ diff --git a/External/ReadMeImages/MRTK_AppBar_BoundingBox_Interaction.jpg b/External/ReadMeImages/MRTK_AppBar_BoundingBox_Interaction.jpg new file mode 100644 index 00000000000..617aa96a048 Binary files /dev/null and b/External/ReadMeImages/MRTK_AppBar_BoundingBox_Interaction.jpg differ diff --git a/External/ReadMeImages/MRTK_AppBar_BoundingBox_Materials.jpg b/External/ReadMeImages/MRTK_AppBar_BoundingBox_Materials.jpg new file mode 100644 index 00000000000..0dda3e7ea2d Binary files /dev/null and b/External/ReadMeImages/MRTK_AppBar_BoundingBox_Materials.jpg differ diff --git a/External/ReadMeImages/MRTK_AppBar_BoundingBox_ScriptSetup.jpg b/External/ReadMeImages/MRTK_AppBar_BoundingBox_ScriptSetup.jpg new file mode 100644 index 00000000000..1d03d4534ce Binary files /dev/null and b/External/ReadMeImages/MRTK_AppBar_BoundingBox_ScriptSetup.jpg differ diff --git a/External/ReadMeImages/MRTK_AppBar_BoundingBox_Structure.jpg b/External/ReadMeImages/MRTK_AppBar_BoundingBox_Structure.jpg new file mode 100644 index 00000000000..85d4a336394 Binary files /dev/null and b/External/ReadMeImages/MRTK_AppBar_BoundingBox_Structure.jpg differ diff --git a/External/ReadMeImages/MRTK_BoundingBoxBasicPrefab.jpg b/External/ReadMeImages/MRTK_BoundingBoxBasicPrefab.jpg new file mode 100644 index 00000000000..6a8d8be5ed1 Binary files /dev/null and b/External/ReadMeImages/MRTK_BoundingBoxBasicPrefab.jpg differ diff --git a/External/ReadMeImages/MRTK_BoundingBoxNormalMode.jpg b/External/ReadMeImages/MRTK_BoundingBoxNormalMode.jpg new file mode 100644 index 00000000000..c5d2707a2a4 Binary files /dev/null and b/External/ReadMeImages/MRTK_BoundingBoxNormalMode.jpg differ diff --git a/External/ReadMeImages/MRTK_DialogProgress.jpg b/External/ReadMeImages/MRTK_DialogProgress.jpg new file mode 100644 index 00000000000..36053724e9f Binary files /dev/null and b/External/ReadMeImages/MRTK_DialogProgress.jpg differ diff --git a/External/ReadMeImages/MRTK_GrabMechanics.jpg b/External/ReadMeImages/MRTK_GrabMechanics.jpg index 4d34a6e9ec0..c07b5b37047 100644 Binary files a/External/ReadMeImages/MRTK_GrabMechanics.jpg and b/External/ReadMeImages/MRTK_GrabMechanics.jpg differ diff --git a/External/ReadMeImages/MRTK_InteractableObject.jpg b/External/ReadMeImages/MRTK_InteractableObject.jpg index 153e60dd3ce..d4a527408bf 100644 Binary files a/External/ReadMeImages/MRTK_InteractableObject.jpg and b/External/ReadMeImages/MRTK_InteractableObject.jpg differ diff --git a/External/ReadMeImages/MRTK_InteractableObject_HolographicButton.jpg b/External/ReadMeImages/MRTK_InteractableObject_HolographicButton.jpg index 388172d897e..7ba8dfa7633 100644 Binary files a/External/ReadMeImages/MRTK_InteractableObject_HolographicButton.jpg and b/External/ReadMeImages/MRTK_InteractableObject_HolographicButton.jpg differ diff --git a/External/ReadMeImages/MRTK_InteractableObject_Toolbar.jpg b/External/ReadMeImages/MRTK_InteractableObject_Toolbar.jpg new file mode 100644 index 00000000000..0e7d216ddea Binary files /dev/null and b/External/ReadMeImages/MRTK_InteractableObject_Toolbar.jpg differ diff --git a/External/ReadMeImages/MRTK_Keyboard.jpg b/External/ReadMeImages/MRTK_Keyboard.jpg index c4b681a4c40..e37b123d5cc 100644 Binary files a/External/ReadMeImages/MRTK_Keyboard.jpg and b/External/ReadMeImages/MRTK_Keyboard.jpg differ diff --git a/External/ReadMeImages/MRTK_ObjectCollection.jpg b/External/ReadMeImages/MRTK_ObjectCollection.jpg index f610d0b7b5e..030e56644ea 100644 Binary files a/External/ReadMeImages/MRTK_ObjectCollection.jpg and b/External/ReadMeImages/MRTK_ObjectCollection.jpg differ diff --git a/External/ReadMeImages/MRTK_Progress1.jpg b/External/ReadMeImages/MRTK_Progress1.jpg new file mode 100644 index 00000000000..6cf7664864f Binary files /dev/null and b/External/ReadMeImages/MRTK_Progress1.jpg differ diff --git a/External/ReadMeImages/MRTK_Progress2.jpg b/External/ReadMeImages/MRTK_Progress2.jpg new file mode 100644 index 00000000000..3326f89fd80 Binary files /dev/null and b/External/ReadMeImages/MRTK_Progress2.jpg differ diff --git a/External/ReadMeImages/MRTK_Progress3.jpg b/External/ReadMeImages/MRTK_Progress3.jpg new file mode 100644 index 00000000000..526a4c1e731 Binary files /dev/null and b/External/ReadMeImages/MRTK_Progress3.jpg differ diff --git a/External/ReadMeImages/MRTK_Progress4.jpg b/External/ReadMeImages/MRTK_Progress4.jpg new file mode 100644 index 00000000000..2ded754e72c Binary files /dev/null and b/External/ReadMeImages/MRTK_Progress4.jpg differ diff --git a/External/ReadMeImages/MRTK_ProgressIndicatorInspector.jpg b/External/ReadMeImages/MRTK_ProgressIndicatorInspector.jpg new file mode 100644 index 00000000000..e6a40166ba9 Binary files /dev/null and b/External/ReadMeImages/MRTK_ProgressIndicatorInspector.jpg differ diff --git a/External/ReadMeImages/MRTK_SolverSystem.jpg b/External/ReadMeImages/MRTK_SolverSystem.jpg new file mode 100644 index 00000000000..ff4a8412404 Binary files /dev/null and b/External/ReadMeImages/MRTK_SolverSystem.jpg differ diff --git a/External/ReadMeImages/MRTK_Tooltip.jpg b/External/ReadMeImages/MRTK_Tooltip.jpg new file mode 100644 index 00000000000..6dc0a5832f1 Binary files /dev/null and b/External/ReadMeImages/MRTK_Tooltip.jpg differ diff --git a/External/ReadMeImages/MRTK_TooltipAssignTarget.jpg b/External/ReadMeImages/MRTK_TooltipAssignTarget.jpg new file mode 100644 index 00000000000..b4036ad50c9 Binary files /dev/null and b/External/ReadMeImages/MRTK_TooltipAssignTarget.jpg differ diff --git a/External/ReadMeImages/MRTK_TooltipExampleScene.jpg b/External/ReadMeImages/MRTK_TooltipExampleScene.jpg new file mode 100644 index 00000000000..ecece6969bb Binary files /dev/null and b/External/ReadMeImages/MRTK_TooltipExampleScene.jpg differ diff --git a/External/ReadMeImages/MRTK_TooltipMotionControllers1.jpg b/External/ReadMeImages/MRTK_TooltipMotionControllers1.jpg new file mode 100644 index 00000000000..bd0f9d57607 Binary files /dev/null and b/External/ReadMeImages/MRTK_TooltipMotionControllers1.jpg differ diff --git a/External/ReadMeImages/MRTK_TooltipMotionControllers2.jpg b/External/ReadMeImages/MRTK_TooltipMotionControllers2.jpg new file mode 100644 index 00000000000..1f16ca234ab Binary files /dev/null and b/External/ReadMeImages/MRTK_TooltipMotionControllers2.jpg differ diff --git a/External/ReadMeImages/MRTK_TooltipSpawner.jpg b/External/ReadMeImages/MRTK_TooltipSpawner.jpg new file mode 100644 index 00000000000..6f78b47d64c Binary files /dev/null and b/External/ReadMeImages/MRTK_TooltipSpawner.jpg differ diff --git a/External/ReadMeImages/MRTK_TwoHandManipulation.jpg b/External/ReadMeImages/MRTK_TwoHandManipulation.jpg new file mode 100644 index 00000000000..9dc2eabc70f Binary files /dev/null and b/External/ReadMeImages/MRTK_TwoHandManipulation.jpg differ diff --git a/External/ReadMeImages/MRTK_TwoHandManipulationScene.jpg b/External/ReadMeImages/MRTK_TwoHandManipulationScene.jpg new file mode 100644 index 00000000000..dcce6d243f2 Binary files /dev/null and b/External/ReadMeImages/MRTK_TwoHandManipulationScene.jpg differ diff --git a/External/ReadMeImages/MRTK_TwoHandManipulationScript.jpg b/External/ReadMeImages/MRTK_TwoHandManipulationScript.jpg new file mode 100644 index 00000000000..e98d85466fd Binary files /dev/null and b/External/ReadMeImages/MRTK_TwoHandManipulationScript.jpg differ diff --git a/README.md b/README.md index 7304011aed9..284a39fc721 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,7 @@ The project is aimed at reducing barriers to entry to create mixed reality appli MixedRealityToolkit-Unity uses code from the base [MixedRealityToolkit](https://github.com/Microsoft/MixedRealityToolkit) and makes it easier to consume in [Unity](https://unity3d.com/). -[![Mixed Reality Academy](External/ReadMeImages/MixedRealityStack-Apps.png)](https://developer.microsoft.com/en-us/windows/mixed-reality/academy) -[![View the Mixed Reality Companion Kit](External/ReadMeImages/MixedRealityStack-MRTK-Unity.png)](https://github.com/Microsoft/MixedRealityCompanionKit) -[![Mixed Reality Toolkit GitHub Repo](External/ReadMeImages/MixedRealityStack-MRTK.png)](https://github.com/Microsoft/MixedRealityToolkit) -[![Read the Mixed Reality Developer Guides](External/ReadMeImages/MixedRealityStack-UWP.png)](https://developer.microsoft.com/en-us/windows/mixed-reality) + > Learn more about [Windows Mixed Reality](https://www.microsoft.com/en-gb/windows/windows-mixed-reality) here. @@ -54,16 +51,17 @@ To get up and going as quickly as possible, here are some guides to help you get |:--- | :--- | :--- | | Please go over the [Getting started guide](GettingStarted.md) to learn more about getting off the ground quickly. | Please go over the [Contributing guidelines](CONTRIBUTING.md) to learn more about the process and thinking. | Check out the recent updates for Windows Mixed reality in the [Fall Creators update](/FallCreatorsUpdate.md) | -# Examples and QuickStart scenes -The MRTK includes many great samples and starter scenes to demonstrate the uses of the MRTK API, these include: - -| [![Motion Controller tests](External/ReadMeImages/MRTK_MotionControllerTest.jpg)](/Assets/HoloToolkit-Examples) [Motion Controller tests](/Assets/HoloToolkit-Examples) | [![Input manager tests](External/ReadMeImages/MRTK_InputManagerTest.jpg)](/Assets/HoloToolkit-Examples) [Input manager tests](/Assets/HoloToolkit-Examples) | [![Grab Mechanics demo](External/ReadMeImages/MRTK_GrabMechanics.jpg)](/Assets/HoloToolkit-Examples/MotionControllers-GrabMechanics) [Grab Mechanics demo](/Assets/HoloToolkit-Examples/MotionControllers-GrabMechanics) | -|:--- | :--- | :--- | -| Motion controller test scene demonstrating controller input events | Several gaze interaction demos such as popups, buttons and more | Examples of direct manipulation with Motion Controllers (IHMD Only) | -| [![Interactable Objects](External/ReadMeImages/MRTK_InteractableObject.jpg)](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md) [Interactable Objects](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md) | [![Object Collection](External/ReadMeImages/MRTK_ObjectCollection.jpg)](/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md) [Object Collection](/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md) | [![App Bar and Bounding Box](External/ReadMeImages/MRTK_AppBar_BoundingBox.jpg)](/Assets/HoloToolkit-Examples/UX/Scenes) App Bar and Bounding Box | -| Example of modular and extensible interactable objects with visual states, including Holographic button | Object collection helps you lay out an array of objects in a three-dimensional shape | **[Coming Soon]** Standard UI for move/rotate/scale 3D objects | -| [![Keyboard input sample](External/ReadMeImages/MRTK_Keyboard.jpg)](/Assets/HoloToolkit-Examples) [Keyboard input sample](/Assets/HoloToolkit-Examples) | [![Interactive button demos](External/ReadMeImages/MRTK_InteractiveButtons.jpg)](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractiveButtonComponents.md) [Interactive button demos](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractiveButtonComponents.md) | [![Scene occulsion demo](External/ReadMeImages/MRTK_OcclusionExample.jpg)](/Assets/HoloToolkit-Examples) [Scene occlusion demo](/Assets/HoloToolkit-Examples) | -| A sample virtual keyboard, similar to system keyboard in Windows Mixed Reality shell | Example UI buttons and controls for use in Mixed Reality | Scene construction demo on how to make occluded windows | +# Examples - Input +|[![Input manager tests](External/ReadMeImages/MRTK_InputManagerTest.jpg)](/Assets/HoloToolkit-Examples) [Input manager tests](/Assets/HoloToolkit-Examples) | [![Motion Controller tests](External/ReadMeImages/MRTK_MotionControllerTest.jpg)](/Assets/HoloToolkit-Examples) [Motion Controller tests](/Assets/HoloToolkit-Examples) | [![Grab Mechanics](External/ReadMeImages/MRTK_GrabMechanics.jpg)](/Assets/HoloToolkit-Examples/MotionControllers-GrabMechanics) [Grab Mechanics](/Assets/HoloToolkit-Examples/MotionControllers-GrabMechanics) | [![Two Hand Manipulation](External/ReadMeImages/MRTK_TwoHandManipulation.jpg)](/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md) [Two Hand Manipulation](/Assets/HoloToolkit-Examples/Input/Readme/README_TwoHandManipulationTest.md) | +|:--- | :--- | :--- | :--- | +| Input and cursor visaulization examples for gaze and motion controller pointers | Demonstrates how to access motion controller input events and data | Examples of direct manipulation with motion controllers | Script for manipulating objects with two hands | + +# Examples - UI controls and building blocks +| [![Bounding Box and App Bar](External/ReadMeImages/MRTK_AppBar_BoundingBox.jpg)](/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md) [Bounding Box and App Bar](/Assets/HoloToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md) | [![Interactable Objects](External/ReadMeImages/MRTK_InteractableObject_HolographicButton.jpg)](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md) [Interactable Objects](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractableObjectExample.md) | [![Object Collection](External/ReadMeImages/MRTK_ObjectCollection.jpg)](/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md) [Object Collection](/Assets/HoloToolkit-Examples/UX/Readme/README_ObjectCollection.md) |[![Keyboard](External/ReadMeImages/MRTK_Keyboard.jpg)](/Assets/HoloToolkit-Examples) [Keyboard](/Assets/HoloToolkit-Examples) | +|:--- | :--- | :--- | :--- | +| Standard UI for manipulating objects in 3D space | Modular script for making objects interactable with visual states, including Holographic button | Script for lay out an array of objects in a three-dimensional shape | System style keyboard prefab for Unity projects | +| ![Dialog and Progress](External/ReadMeImages/MRTK_DialogProgress.jpg) [Dialog](https://github.com/Microsoft/MixedRealityToolkit-Unity/blob/Dev_Working_Branch/Assets/MixedRealityToolkit-Examples/UX/Readme/README_DialogsExample.md) / [Progress](https://github.com/Microsoft/MixedRealityToolkit-Unity/blob/Dev_Working_Branch/Assets/MixedRealityToolkit-Examples/UX/Readme/README_ProgressExample.md) | [![Solver system](External/ReadMeImages/MRTK_SolverSystem.jpg)](/Assets/HoloToolkit-Examples/Utilities/Readme/README_SolverSystem.md) [Solver system](/Assets/HoloToolkit-Examples/Utilities/Readme/README_SolverSystem.md) | [![Interactive button demos](External/ReadMeImages/MRTK_InteractiveButtons.jpg)](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractiveButtonComponents.md) [Interactive button demos](/Assets/HoloToolkit-Examples/UX/Readme/README_InteractiveButtonComponents.md) | [![ToolTip & Label](External/ReadMeImages/MRTK_Tooltip.jpg)](https://github.com/Microsoft/MixedRealityToolkit-Unity/blob/Dev_Working_Branch/Assets/MixedRealityToolkit-Examples/UX/Readme/README_TooltipExample.md) [ToolTip & Label](https://github.com/Microsoft/MixedRealityToolkit-Unity/blob/Dev_Working_Branch/Assets/MixedRealityToolkit-Examples/UX/Readme/README_TooltipExample.md) | +| (Available in Dev branch) Standard UI for notification, approval, or additional information from the user / Data loading indicator | Scripts for various behavious such as tag-along, billboarding, body-lock, constant view size and surface magnetism | UWP style UI controls including radio, toggle and checkboxes | (Available in Dev branch) Annotation UI with flexible anchor/pivot system which can be used for labeling motion controllers and object. | Check out the [Examples](/Assets/HoloToolkit-Examples) folder for more details.