• Guides
    • English
    • 日本語
  • API Documentation
  • Contributing
  • Experimental Features

    Show / Hide Table of Contents
    • MRTK を始める
      • Release Notes
      • MRTK Package Contents
      • Updating from earlier versions
      • HTK からの移植ガイド
      • MRTK のビルドとデプロイ
      • NuGet Packages
      • Getting started with MRTK and XR SDK
      • Performance
      • Hologram Stabilization (ホログラムの安定化)
    • アーキテクチャ
      • 全体像
      • フレームワークとランタイム
      • Input System (入力システム)
        • 用語
        • Core System
        • Controllers, Pointers, and Focus
      • Systems, Extension Services and Data Providers
    • 機能概要
      • Boundary System
        • Boundary System Overview
        • Configuring the Boundary Visualization
      • Camera System
        • Camera System Overview
        • Camera Settings Providers
          • Windows Mixed Reality Camera Settings
          • Unity AR Camera Settings [Experimental]
          • Creating a camera settings provider
      • Cross Platform Support
        • Configure MRTK for iOS and Android
      • プラットフォームの Capabilities (機能) を検出する
      • Diagnostics System (診断システム)
        • 診断システムの概要
        • 診断システムの構成
        • ビジュアル プロファイラーを使用する
      • Extension Services
        • Extension Service Creation Wizard
        • Scene Transition Service Overview
        • Hand Physics Service Overview
      • Input System (入力システム)
        • 入力の概要
        • Input Actions
        • Input Events
        • Input Providers
          • Input Providers Overview
          • Creating an input data provider
        • Controllers (コントローラー)
        • Eyes
        • Gaze (ゲイズ)
        • Gestures (ジェスチャ)
        • Hands
        • How to Add Near Interaction
        • エディター内入力シミュレーション
        • Pointers
        • Voice Input
          • Dictation (ディクテーション)
          • Speech (コマンドとコントロール)
      • Multi Scene System
        • Multi Scene System Overview
        • Scene Types
        • Content Scene Loading
        • Monitoring Content Loading
        • Lighting Scene Operations
      • パッケージ
        • MRTK パッケージ
        • MRTK Modularization
      • Profiles (プロファイル)
        • プロファイル概要
        • 設定ガイド
      • Rendering
        • Material Instance Overview
        • Shaders
          • MRTK Standard Shader
      • Services (サービス)
        • What makes a mixed reality feature
        • MixedRealityServiceRegistry と IMixedRealityServiceRegistrar とは何か
        • Extension services
      • Spatial Awareness System (空間認識システム)
        • Spatial Awareness (空間認識) 概要
        • Spatial Observers
          • Configuring Observers for Device
          • Configuring Observers for Editor
          • Controlling Observers via Code
          • Creating a custom Observer
      • Teleport System (テレポートシステム) 概要
      • ツール
        • Dependency Window (依存関係ウィンドウ)
        • Extension Service Creation Wizard
        • Holographic Remoting
        • Input Animation Recording
          • Input Animation File Format Specification
        • Optimize Window
        • Runtime tools
          • Controller Mapping tool
      • UX ビルディング ブロック
        • Interactable (インタラクタブル)
        • Button (ボタン)
        • Bounding Box
        • Object Manipulation (物体操作)
        • Sliders (スライダー)
        • Fingertip Visualization
        • App Bar
        • Object Collection (オブジェクトコレクション)
        • Slate (スレート)
        • System Keyboard (システム キーボード)
        • Tooltips (ツールチップ)
        • Solvers (ソルバー)
      • Example Scenes
        • Examples Hub
        • ハンド インタラクションのサンプル
        • アイ トラッキング インタラクションのサンプル
      • Experimental
        • Scrolling Object Collection
        • Hand Coach UX
        • Pulse Shader
    • Contributing
      • Contributing Overview
      • Coding Guidelines
      • Writing and Running Tests
      • Writing Documentation
      • Pull Requests
      • Experimental Features
      • Breaking Changes
      • How to use DocFX
    • Planning
      • Roadmap
    • Notice
    • Authors

    Experimental features

    Some features the MRTK team works on appear to have a lot of initial value even if we haven’t fully fleshed out the details. For these types of features, we want the community to get a chance to see them early. Because they are early in the cycle, we label them as experimental to indicate that they are still evolving, and subject to change over time.

    What to expect from an experimental feature

    If a component is marked experimental you can expect the following:

    • An example scene demonstrating usage, located under MixedRealityToolkit.Examples\Experimental sub-folder
    • Experimental features may not have docs.
    • They probably don't have tests.
    • Experimental features are subject to change.

    Experimental feature guidelines

    Experimental code should live in a separate folder

    Experimental code should go into a top-level experimental folder followed by the experimental feature name. For example, if trying to contribute a new feature FooBar, put code in the following:

    • Example scenes, scripts go into MRTK.Examples/Experimental/FooBar/
    • Component scripts, prefabs go into MRTK.SDK/Experimental/FooBar/
    • Component inspectors go into MRTK.SDK/Inspectors/Experimental/FooBar

    When using sub-folders under the experimental feature name, try to mirror the same folder structure of MRTK.

    For example, solvers would go under MRTK.SDK/Experimental/FooBar/Features/Utilities/Solvers/FooBarSolver.cs

    Keep scenes in a scene folder near the top: MRTK.Examples/Experimental/FooBar/Scenes/FooBarExample.unity

    Note

    We considered not having a single Experimental root folder and instead putting Experimental under say MRTK.Examples/HandTracking/Scenes/Experimental/HandBasedMenuExample.unity. We decided to go with folders at the base to make the experimental features easier to discover.

    Experimental code should be in a special namespace

    Ensure that the experimental code lives in an experimental namespace that matches the non-experimental location. For example, if your component is part of solvers at Microsoft.MixedReality.Toolkit.Utilities.Solvers, its namespace should be Microsoft.MixedReality.Toolkit.Experimental.Utilities.Solvers.

    See this PR for an example.

    Experimental features should have an [Experimental] attribute

    Add an [Experimental] attribute above one of your fields to have a small dialog appear in the component editor that mentions your feature is experimental and subject to significant changes.

    Menus for experimental features should go under "Experimental" sub-menu

    Ensure that experimental features are under "experimental" sub-menus when adding commands to menus in the editor. Here are a few examples:

    Adding a top-level menu command:

    [MenuItem("Mixed Reality Toolkit/Experimental/MyCommand")]
    public static void MyCommand()
    

    Adding a component menu:

    [AddComponentMenu("MRTK/Experimental/MyCommand")]
    

    Documentation

    Follow these steps to add documentation for your experimental feature:

    1. Any documentation for an experimental feature should go in a README.md file in the experimental folder. For example, MixedRealityToolkit.SDK/Experimental/ScrollingObjectCollection/README.md.

    2. Under Feature Overviews Add a link in the Experimental section at Documentation/toc.yml.

    Minimize impact to MRTK code

    While your MRTK change might get your experiment to work, it could impact other people in ways you do not expect. Any regressions you make to the MRTK core code would result in your pull request getting reverted.

    Aim to have zero changes in folders other than experimental folders. Here is a list of folders that can have experimental changes:

    • MixedRealityToolkit.SDK\Experimental
    • MixedRealityToolkit.SDK\Inspectors\Experimental
    • MixedRealityToolkit.Examples\Experimental

    Changes outside of these folders should be treated very carefully. If your experimental feature must include changes to MRTK core code, consider splitting out MRTK changes into a separate pull request that includes tests and documentation.

    Using your experimental feature should not impact people's ability to use core controls

    Most people use core UX components like the button, ManipulationHandler and Interactable very frequently. They will likely not use your experimental feature if it prevents them from using buttons.

    Using your component should not break buttons, ManipulationHandler, BoundingBox, or interactable.

    For example, in this ScrollableObjectCollection PR, adding a ScrollableObjectCollection caused people to not be able to use the HoloLens button prefabs. Even though this was not caused by a bug in the PR (but rather exposed an existing bug), it prevented the PR from getting checked in.

    Provide an example scene that demonstrates how to use the feature

    People need to see how to use your feature, and how to test it.

    Provide an example under MRTK.Examples/Experimental/YOUR_FEATURE

    Minimize user visible flaws in experimental features

    Others will not use the experimental feature if it does not work, it will not graduate to a feature.

    Test your example scene on your target platform, make sure it works as expected. Make sure your feature also works in editor, so people can rapidly iterate and see your feature even if they don’t have the target platform.

    Graduating experimental code into MRTK code

    If a feature ends up seeing quite a lot of use, then we should graduate it into core MRTK code. To do this, the feature should have tests, documentation, and an example scene.

    When you are ready to graduate the feature MRTK, create an issue to check in your PR against. The PR should include all the things needed to make this a core feature: tests, documentation, and an example scene showing usage.

    Also, don’t forget to update the namespaces to remove the “Experimental” subspace.

    • Improve this Doc
    In This Article
    • What to expect from an experimental feature
    • Experimental feature guidelines
      • Experimental code should live in a separate folder
      • Experimental code should be in a special namespace
      • Experimental features should have an [Experimental] attribute
      • Menus for experimental features should go under "Experimental" sub-menu
    • Documentation
      • Minimize impact to MRTK code
      • Using your experimental feature should not impact people's ability to use core controls
      • Provide an example scene that demonstrates how to use the feature
      • Minimize user visible flaws in experimental features
    • Graduating experimental code into MRTK code
    Back to top Generated by DocFX