yotiky Tech Blog

とあるエンジニアの備忘録

Win + Shift + S を使ったキャプチャのファイルの保存場所

※こちらは古い記事です。最新の記事はこちらを参照下さい。

[Win + Shift + S]でのスクリーンショットがすっかり日常化してしまったが、ファイルに保存する機会があるもののダイアログを出して保存するのはかなり面倒である。
調べてみると以下のディレクトリに一時的にファイルが保存されるようだ。
一番古いキャプチャでも3日前くらいだった。

C:\Users\USERNAME\AppData\Local\Packages\Microsoft.Windows.ShellExperienceHost_cw5n1h2txyewy\TempState\ScreenClip

Unity - シーンビューで自在に移動する操作方法

HoloLens で作業してるとスケールが小さいせいなのか、「もう少し寄りたい(ズームしたい)けどこれ以上スクロール回すと突き抜けてしまう...!!」みたいなことがよくあります。

そんなときに使える操作方法を教えてもらったので残しておきます。

検証環境

  • Unity 2019.2.7f.2

操作方法

  • マウスの右ボタンを押し続ける(この状態を Flythrough モードというらしい)
  • WSADキーで前後左右、QEキーで上下に移動するのが基本操作
  • ホイールを回すとキー移動時の移動量の倍率を変更できる(0.01x~2x)
  • Shift を押しながら移動すると設定された移動量よりも速く移動する

f:id:yotiky:20200615224932g:plain

Build Window の Deploy Options タブで Install が実行できない場合の解決方法

環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0
  • VisualStudio:2019
  • Device:HoloLens2
  • OS:Windows Holographic, version 2004

問題

MRTK の Build Window の Deploy Options タブで、[Install AppX]を実行しても PowerShell のウィンドウが一瞬出るだけで何も起きない。(インストールできない)
[Uninstall AppX]を実行しても同じ結果。
既にインストールされてたり、過去に何度も実行できてたはずなのに、[Install AppX]と[Uninstall AppX]しか有効になっっていないのも特徴のひとつ。

f:id:yotiky:20200605225451p:plain

解決方法

HoloLens を再起動する。OSのバージョンに依存している可能性あり。

f:id:yotiky:20200605225931p:plain

MRTK v2 - Button (How to use)

目次

TL;DR

Mixed Reality Toolkit Documentation の UX Building Blocks の章の Button から要点と補足をまとめたページです。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0 / 2.4.0
  • VisualStudio:2019
  • Device:HoloLens2

内容

ドキュメントは2.4をベースに書かれている。
詳細はこちら。 microsoft.github.io

非公式日本語はこちら。 hololabinc.github.io

How to use pressable buttons

2D(uGUI)向け

基本的な使い方は以下の通り。

  • MRTK Canvas に変換する

    f:id:yotiky:20200603215219p:plain:w300

  • [NearInteractionTouchableUnityUI]コンポーネントを追加

    f:id:yotiky:20200603215428p:plain:w300

  • Scale を 0.001 に

    f:id:yotiky:20200603215608p:plain:w300

  • Unity UI 向けのボタンを追加する

    • UnityUIInteractableButton.prefab
    • PressableButtonUnityUI.prefab
    • PressableButtonUnityUICircular.prefab
    • PressableButtonHoloLens2UnityUI.prefab

3D

基本的な使い方は以下の通り。

  • コライダーベースのボタンをシーンに追加する
  • テキストとアイコンを変更する(2.4であればButtonConfigHelper)

    f:id:yotiky:20200603231536p:plain:w300

  • Interactable スクリプト(2.4であればButtonConfigHelper)で

    • Events の OnClick() に呼び出し先を登録する

    f:id:yotiky:20200603232622p:plain:w300

    • General の Speech Command で音声コマンドを選び、ラベルを修正する

      f:id:yotiky:20200603233117p:plain:w300

      音声コマンドはMixedRealityToolkitのプロファイルで登録されているものから選ぶことになる

      f:id:yotiky:20200603233043p:plain:w300

      音声コマンドを無効化するには、音声コマンドを[No Selection]にして、ラベルを無効化すればいけそう?(未確認)

Inspector properties

PressableButtonHoloLens2 ボタンに登録されているコンポーネントf:id:yotiky:20200604003001p:plain:w400

  • PressableButtonHoloLens2 は、MRTKのボタンを構成する最もベースの動きを提供する
  • PhysicalPressEventRouter は、PressableButton のイベントを Interactable にルーティングする
  • Interactable は、ユーザー操作に対する動きや他のスクリプトとのインターフェスを担う
  • NearInteractionTouchable は、コライダーを持つオブジェクトをユーザーが触れるようになる
  • ButtonConfigHelper は、テキストとアイコン、OnClick イベントのハンドリングがここでできるようになっている(2.4のみ)

スクリプトの関連はYoonさんのセッション動画のスライドが分かりやすかった。 *1 f:id:yotiky:20200604001439p:plain:w500

OnClick に関しては PhysicalPressEventRouter で発火のタイミングを選択できる。
Interactable の Receivers には Press や Touch も選べるので、詳細を変更しようとしない限りは直接 PressableButtonHoloLens2 を触らなくても良さそう。
Near Interaction、Far Interaction の両方の動きをサポートするには Interactable の OnClick を使う必要がある。

Toggle では、Interactable の General に項目が追加される。Receviers では Toggle を選べる。
f:id:yotiky:20200604013440p:plain:w300 f:id:yotiky:20200604013749p:plain:w300

こちらもセッション動画のスライド。
f:id:yotiky:20200604013858p:plain:w500

How to change the icon and text

2.4なら ButtonConfigHelper から編集できる。

f:id:yotiky:20200604003436p:plain:w300

アイコンは[Icon Set]というアイコンをグループ化したセットで管理するようだ。

f:id:yotiky:20200604005123p:plain:w300

Examples パッケージには以下のセットが含まれている。

f:id:yotiky:20200604005255p:plain:w300

2.3ならこのあたりで直接編集する。

f:id:yotiky:20200603231536p:plain:w300

Creating a HoloLens Icon Font Asset

C:/Windows/Fonts/holomdl2.ttf をUnityにインポートする。Explorer上だとこんな表示。

f:id:yotiky:20200604005655p:plain:w300

初回作成時は、[Select Font Asset]は空のままで良さそう。
Character Sequence (Hex) の値。

E700-E702,E706,E70D-E70E,E710-E714,E718,E71A,E71D-E71E,E720,E722,E728,E72A-E72E,E736,E738,E73F,E74A-E74B,E74D,E74F-E752,E760-E761,E765,E767-E769,E76B-E76C,E770,E772,E774,E777,E779-E77B,E782-E783,E785-E786,E799,E7A9-E7AB,E7AF-E7B1,E7B4,E7C8,E7E8-E7E9,E7FC,E80F,E821,E83F,E850-E859,E872-E874,E894-E895,E8A7,E8B2,E8B7,E8B9,E8D5,E8EC,E8FB,E909,E91B,E92C,E942,E95B,E992-E995,E9E9-E9EA,EA37,EA40,EA4A,EA55,EA96,EB51-EB52,EB65,EB9D-EBB5,EBCB-EBCC,EBCF-EBD3,EC03,EC19,EC3F,EC7A,EC8E-EC98,ECA2,ECD8-ECDA,ECE0,ECE7-ECEB,ED17,EE93,EFA9,F114-F120,F132,F181,F183-F186

f:id:yotiky:20200604010125p:plain:w300

ちょっと古いがこの辺の記事を見ると理解が進む。
Generateが完了したら任意の場所に保存。187個もあるらしい。

f:id:yotiky:20200604010233p:plain:w300

Projectウィンドウでメニューから[Create > Mixed Reality Toolkit > Icon Set]で新しいアセットを作成する。
[Char Icon Font] に作成した Font Asset を突っ込むと読み込まれる。

f:id:yotiky:20200604010731p:plain:w300

Available Icons でクリックすると下の Selected Icons に追加される。逆に Selected Icons でクリックすると消える。
Selected Icons に追加されているアイコンが ButtonConfigHelper で選択できるようになる。
Name をつけるとスクリプト上からアイコンを識別できる。

f:id:yotiky:20200604012106p:plain:w300

Icon Set を変更して任意のアイコンを選択する。

f:id:yotiky:20200604010949p:plain:w300 f:id:yotiky:20200604010922p:plain:w300

MRTK v2 - Button (Prefabs)

目次

TL;DR

Mixed Reality Toolkit Documentation の UX Building Blocks の章の Button から要点と補足をまとめたページです。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0 / 2.4.0
  • VisualStudio:2019
  • Device:HoloLens2

内容

ドキュメントは2.4をベースに書かれている。
詳細はこちら。 microsoft.github.io

非公式日本語はこちら。 hololabinc.github.io

Button prefabs in MRTK

2D(UnityUI)向け

  • UnityUIInteractableButton
  • PressableButtonUnityUI
  • PressableButtonUnityUICircular
  • PressableButtonHoloLens2UnityUI

3D

2.4

ToolBoxから参照したり追加したりできるのでそちらを使う。

Buttons f:id:yotiky:20200603202640p:plain

Button Collections f:id:yotiky:20200603202708p:plain

Microsoft.MixedReality.Toolkit.Unity.Examples パッケージに以下のボタンが梱包されている。 画像はリスト順に左からの順になっている。

  • ExampleHubButton
  • Model_PushButton
  • PressableButtonHoloLens2_AppButton
  • PressableRoundButton
  • RecordButton

なお、PressableRoundButtonはパッケージをインポートするとToolBoxにも追加される。

2.3

2.3はToolBoxがないので2.4の画面キャプチャを参考にすると良い。
なお、以下のボタンは2.4から追加されたので2.3には含まれない。

  • PressableButtonHoloLens2Toggle_32x96
  • PressableButtonHoloLens2Toggle_40x40
  • PressableButtonHoloLens2Toggle_48x48
  • PressableButtonHoloLens2ToggleCheckBox_32x32
  • PressableButtonHoloLens2ToggleCheckBox_32x96
  • PressableButtonHoloLens2ToggleRadio_32x32
  • PressableButtonHoloLens2ToggleRadio_32x96
  • PressableButtonHoloLens2ToggleSwitch_32x32
  • PressableButtonHoloLens2ToggleSwitch_32x96
  • SlateUGUIHoloLens2Buttons

f:id:yotiky:20200603211013p:plain:w300

Microsoft.MixedReality.Toolkit.Unity.Examples パッケージに以下のボタンが梱包されている。 画像はリスト順に右からの順になっている。

  • ExampleHubButton
  • Model_PushButton
  • PressableRoundButton
  • RecordButton

HoloLens2 + MRTK 2.4 プロジェクトの初期設定

新規プロジェクト作成時に行うミニマムなお決まりの手順、設定など。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.4.0
  • VisualStudio:2019
  • Device:HoloLens2

手順

  • [Ctrl + Shift + B] で 「Build Settings」 画面を開く
  • [Universal Windows Platform] を選択して[Switch Platform]をクリック
    f:id:yotiky:20200602232317p:plain:w300

  • MRTK のパッケージを Project ペインにドラッグ&ドロップして Import

    • Microsoft.MixedReality.Toolkit.Unity.Foundation.2.4.0.unitypackage
    • Microsoft.MixedReality.Toolkit.Unity.Tools.2.4.0.unitypackage
  • インポート後に表示される「MRTK Project Configurator」ウィンドウは、[Enable MSBuild for Unity] をオフにして Apply
    f:id:yotiky:20200602225923p:plain:w300

    • その後も表示されてうざい場合はIgnore、再度表示したい場合はメニューから
      f:id:yotiky:20200602230137p:plain:w300
  • 「Build Settings」 画面やメニューから「Project Settings」 画面の[Player]タブを開く

    • [Publishing Settings]グループ
      • [Package name] に任意のパッケージ名を入力
    • [XR Settings]グループ
      • [Virtual Reality SDKs]に[Windows Mixed Reality]を追加
      • [Depth Format]を[16-bit depth]に変更
      • [Stereo Rendering Mode]が[Single Pass Instanced]であることを確認
        f:id:yotiky:20200602231351p:plain:w300
  • メニューから TextMeshPro Essential Resources を Import
    f:id:yotiky:20200602231806p:plain:w300

  • 任意の Scene で HoloLens 用の設定を適用(Scene のセーブを忘れずに)
    f:id:yotiky:20200602231725p:plain:w200

  • 任意の Scene をビルドに追加
    f:id:yotiky:20200602232246p:plain:w300

オプション

  • Mixed Reality Capture (MRC) でハンドメッシュがズレる
    • Render from the PV camera (opt-in)
    • MixedRealityToolkitConfigurationProfile の Camera の項目で、DefaultMixedRealityCameraProfile を Clone して、CameraSettingsProviders の [Render from PV Camera] をONにする f:id:yotiky:20200624165517p:plain

補足

  • Unity 2019.3 では基本的に ARM64 でのビルドが推奨 されている
    • ARM プロセッサ用の依存関係およびプラグインのコンパイル

      Unity 2019.3.xを使用している場合は、Visual StudioでビルドアーキテクチャとしてARMではなくARM64を選択してください。Unity 2019.3.xのデフォルトのUnity設定では、UnityのバグによりARMを選択した場合、UnityアプリはHoloLensにデプロイされません。これはUnityのイシュートラッカーで追跡することができます。

      ARMアーキテクチャが必要な場合は、Edit > Project Settings(編集)、Player(プロジェクト設定)、Other Settings(その他の設定)メニューでGraphics Jobs(グラフィックジョブ)を無効にしてください。グラフィックジョブを無効にすると、Unity 2019.3.xのARMビルドアーキテクチャを使用してアプリをデプロイすることができますが、ARM64を推奨します。

MRTK v2 - Near Menu

目次

TL;DR

Mixed Reality Toolkit Documentation の UX Building Blocks の章の Near Menu から要点と補足をまとめたページです。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0 / 2.4.0 / (2.5.3)
  • VisualStudio:2019
  • Device:HoloLens2

内容

ドキュメントは2.4をベースに書かれている。
詳細はこちら。

microsoft.github.io

Interaction behavior

  • 30-60cmの距離でユーザーに追従するメニュー
  • ピンで空間に固定することができる
  • メニューを掴んで移動することができる

Prefabs

2.4 では、Microsoft.MixedReality.Toolkit.Unity.Foundation パッケージに以下の prefab が梱包されている。

  • NearMenu2x4.prefab
  • NearMenu3x1.prefab
  • NearMenu3x2.prefab
  • NearMenu3x3.prefab
  • NearMenu4x1.prefab
  • NearMenu4x2.prefab

2.3 では、Microsoft.MixedReality.Toolkit.Unity.Examples パッケージに以下の prefab が梱包されている。

  • NearMenuExample3x1.prefab
  • NearMenuExample3x2.prefab
  • NearMenuExample3x3.prefab
  • NearMenuExample4x1.prefab
  • NearMenuExample4x2.prefab

Structure

2.3でもUI構成は2.4と同じように見える。以下は2.3の画面。

f:id:yotiky:20200602173404p:plain

How to customize

2.3も2.4も同じように編集可能。

ドキュメントには書かれていないが、パネルサイズを変更した場合 Pin ボタンの位置も調整が必要になる。

メニューの prefab を Unpack した場合も注意が必要。
Pin ボタンが prefab のままだとクリックイベントが元のメニューの prefab を参照しているので、Pin ボタンをクリックしてもユーザーに追従してくれない。
親の [FollowMeToggle.ToggleFollowMeBehaviour] を設定しなおす。
Pin ボタンの修正は 2.5.3 は必要なさそうだった。

f:id:yotiky:20200602174515p:plain