Skip to main content
UnityによるHoloLens
アプリケーション入門
石井勇一 2018/03(2018/04/04公開版)
0. はじめに
(C) 2018 石井 勇一 2
研修の概要
本研修はUnityによるHoloLensアプリケーションの作成に必要な基礎知識を身につけるための
必要な機能について紹介します。
◦ Unityが提供する多種多様なプラットフォーム対応を説明できる
◦ Unityの基本概念を理解して基本的な操作ができる
◦ Unityの基本コンポーネントとその制御スクリプトを簡単な物であれば自作できる
◦ HoloLensアプリケーションを作るために必要な機能について把握し、適切な提案ができる
(C) 2018 石井 勇一 3
使用しているソフトウェアについて
ソフトウェア名 バージョン
Unity Unity 2017.2.1.p1(MRTK対応バージョン)
PC Windows 10 Fall Creators Update必須
Visual Studio 2017
MixedRealityToolkit‐Unity 2017.2.1.3 Hot Fix
https://github.com/Microsoft/MixedRealityToolkit‐Unity/releases
(C) 2018 石井 勇一 4
目次
1. HoloLensアプリ開発入門
1. MixedRealityToolkit‐Unity とは
2. Input(Gaze/AirTap/Voiceなど)
3. Spatial Sound
4. Spatial Mapping
5. UX Controls
6. Spatial Understanding
7. Sharing
8. その他便利な機能や情報
(C) 2018 石井 勇一 5
1.HoloLensアプリ開発入
(C) 2018 石井 勇一 6
HoloLens
HoloLensのハードウェア仕様
◦ https://developer.microsoft.com/en‐us/windows/mixed‐reality/hololens_hardware_details
◦ CPU: Intel 32 bit architecture
◦ GPU: HPU 1.0 (HoloLens専用に開発)
◦ RAM: 2GB
◦ Flash: 64GB
◦ Sensors: Depth Camera, Ambient light sensor, Image camera
◦ ETC: Bluetooth 4.0LE / Wi‐Fi 802.11ac / Speaker / Microphone
OS: Windows 10 (Universal Windows Platform)
(C) 2018 石井 勇一 7
HoloLensアプリ開発の流れ
1. UnityでWindows Store(Universal Windows Platform向け)に切り替えて開発
2. UnityからVisual Studioプロジェクトファイルの作成
3. Visual Studioでx86版のアプリをビルド&配備(HoloLensにインストール)
(C) 2018 石井 勇一 8
(参考): UWPとは
ユニバーサル Windows プラットフォーム (UWP) アプリとは
◦ https://docs.microsoft.com/ja‐jp/windows/uwp/get‐started/whats‐a‐uwp
(C) 2018 石井 勇一 9
Unity標準機能によるHoloLens用設定
新規にプロジェクトを作成
プロジェクトの設定
◦ File > Build &  Settingsを実行
◦ Universal Windows Platformに切り替え
◦ Player Settingsボタンを押す
◦ Other Settingsの「Scripting Backend」を.NETに変
更
◦ XR Settingsの「Virtual Reality Supported」を
チェック。これでWindows Mixed Realityが選択さ
れている
◦ Edit > Project Settings > Qualityを実行
◦ Universal Windows Platformの設定をVery Low
に変更
(C) 2018 石井 勇一
ここをクリック
10
Unity標準機能によるHoloLens用設定
シーンの設定
◦ Main CameraのTransformコンポーネントの歯車アイコンをク
リックして「Reset」を実行
◦ Main CameraのCameraのClear FlagsをSolid Colorに変更
◦ Main CameraのCameraのBackgroundを黒(0, 0, 0)に変更
◦ Main CameraのCameraのClipping PlanesのNearを0.85に変更
以上の設定を毎プロジェクトごとに実施しなければならな
いのでMRTKを使って一気に設定をする方法を紹介します。
(C) 2018 石井 勇一 11
HoloLensのためのカメラ設定
快適なカメラの設定
https://developer.microsoft.com/en‐us/windows/mixed‐reality/comfort
(C) 2018 石井 勇一 12
HoloLensのためのカメラ設定
HoloLensのディスプレイは「光の加算」
◦ 白色:明るく見える
◦ 黒色:透明に見える
黒が透明になる特性を活かして、実際に描画する3Dオブジェクト以外は黒にする
ライティングや色に関する詳細情報
◦ https://developer.microsoft.com/en‐us/windows/mixed‐reality/color,_light_and_materials
(C) 2018 石井 勇一 13
Cubeを配置
物を配置する適切な位置
https://developer.microsoft.com/en‐us/windows/mixed‐reality/gaze_targeting
(C) 2018 石井 勇一 14
Cubeを配置
[GameObject]‐[3D Object]‐[Cube]でCubeを配置
InspectorのTransformコンポーネント
◦ Position:  0, 0, 2 (前方2m先)
◦ Scale: 0.1, 0.1, 0.1(全体的に10分の1にする)
UnityのCubeは一辺が1mの立方体です。そのスケールを0.1倍するので、一辺が10cmの立方
体になります。
(C) 2018 石井 勇一 15
1.1 MixedRealityToolkit‐
Unity とは
(C) 2018 石井 勇一 16
MixedRealityToolkit‐Unity
Mixed Reality Toolkitは、Microsoft HoloLensとWindows Mixed Realityヘッドセットを対象とした
アプリケーション開発のためのスクリプトとコンポーネントの集まりです。
MixedRealityToolkit ‐ UnityはMixedRealityToolkitベースのコードを使用しており、さらにUnityで
簡単に利用できるようになっています。
(C) 2018 石井 勇一 17
(C) 2018 石井 勇一 18
提供機能概要(HoloLens限定)
Input
◦ 視線(Gaze)、ジェスチャー、音声およびモーションコントローラなどの入力を活かすスクリプト。
Spatial Mapping
◦ HoloLensを使用して実際の世界にデジタルを持ち込むためのスクリプト。
Spatial Sound
◦ 空間オーディオをアプリケーションで実現するためのスクリプト。
(C) 2018 石井 勇一 19
提供機能概要(HoloLens限定)
UX Controls
◦ 共通のコントロールのように、アプリケーションにより良いUXを作成するための部品
Spatial Understanding
◦ ソファや壁などの部屋を「理解する」ためのスクリプト
Sharing
◦ 複数のHoloLesnで同一の映像を見ることで共同作業を可能にします。
(C) 2018 石井 勇一 20
MRTKの導入と初期設定
Unityで新規にプロジェクトの作成
HoloToolkit‐Unity‐2017.2.1.3.unitypackageをインポート
Mixed Reality Toolkit > Configure > Apply Mixed Reality Project Settingsを実行
(C) 2018 石井 勇一 21
MRTKの導入と初期設定
HoloLensの場合はそのままApplyをクリック
これで P.8 で紹介した内容の設定が完了しま
す。
それぞれの説明は次ページ以降で紹介。
(C) 2018 石井 勇一 22
MRTKの導入と初期設定
Target Windows Universal UWP
◦ Universal Windows Platformをターゲットとする
Storeアプリケーションに切り替えます。
Enable XR
◦ Mixed Reality Supportを有効にします。
Build for Direct3D
◦ XAMLではなくDirect3Dをターゲットとするアプリ
ケーションを作成します。
Target Occluded Devices
◦ VR hardwareの場合はチェックし、HoloLensの場
合はチェックを外します。
(C) 2018 石井 勇一 23
MRTKの導入と初期設定
Enable Sharing Services
◦ Sharing機能を使うときに有効にします。あとから
も設定を変えられます。
Use Toolkit‐specific InputManager axes
◦ Xboxコントローラを使用するときはチェックする。
Project Settings/Inputの定義ファイルを上書き
するので注意
Enable .NET scripting backend
◦ Scripting backendを .NETに変更する
(C) 2018 石井 勇一 24
MRTKの導入と初期設定
シーンファイルを初期化
Mixed Reality Toolkit > Configure > Apply Mixed Reality Scene Settingsを実行
(C) 2018 石井 勇一 25
MRTKの導入と初期設定
HoloLensの場合はそのままApplyをクリック
これで P.9 で紹介した内容の設定が完了しま
す。
ですが、バグがあるので上手く動きません。
https://github.com/Microsoft/MixedRealityTo
olkit‐Unity/issues/1790
これを修正するパッチはまだないのでこちら
で用意しました。
(C) 2018 石井 勇一 26
MRTKの導入と初期設定
参考:Hierarchy のMixedRealityCameraParent
の子要素のMixedRealityCameraにアタッチさ
れているMixedRealityCameraManagerが実行
時にカメラの設定を変更します。
◦ CameraのClear FlagsをSolid Colorに変更
◦ CameraのBackgroundを黒(0, 0, 0)に変更
◦ CameraのClipping PlanesのNearを0.85に変更
ただし、これはUnity上でプレイボタンを押し
たときは「Opaque」扱いになるためSkybox+
QualityセッティングがUltraになってしまいます。
場合によってはこのスクリプトを無効化して手
動で設定することも考慮に入れてください。
Hierarchy View
(C) 2018 石井 勇一 27
MRTKの導入と初期設定
Add the Mixed Reality Camera Prefab
◦ Mixed Reality Camera プレハブをシーンに追加します。本
来ならそのままで動作しますが、
Move Camera to Origin
◦ カメラの位置を(0, 0, 0)に設定します。
Add the Input Manager Prefab
◦ Input Managerプレハブを追加します。
Add the Default Cursor Prefab
◦ Default Cursorプレハブを追加します。
Update World Space Canvases
◦ 全てのWorld SpaceのCanvasに対して視線からのイベント
を受け取れるようにUIRaycastCameraをデフォルトイベント
カメラとして使用します。
◦ 以後もCanvasをWorld Space に変えると自動的に追加お
よび設定をします。
(C) 2018 石井 勇一 28
Cubeを配置
何も無いと寂しいのでCubeを配置しましょう。
位置やスケールは以下の通りにします。
◦ Position(0, 0, 2)
◦ Scale(0.1, 0.1, 0.1)
(C) 2018 石井 勇一 29
Unity Editor上で動作させる
そのままPlayボタンを押すとUnity Editor上でも動作させることができます。
Unity Editor上での操作
◦ 移動:マウスの右ボタンを押しながらWASDおよびQEキー
◦ 視線:マウスの右ボタンを押しながら動かす
◦ AirTap: マウスのボタンから手をいったん離し、Shiftキーを押しながらマウスの左ボタン
Cubeに視線を合わせたり、外したり、AirTapしてみましょう
Skyboxが表示されていますが問題ありません(実機に転送したり、リモート接続、 Simulate
モードの時は自動的にHoloLens用にCameraの設定を変更します)
(C) 2018 石井 勇一 30
アプリケーションのビルド方法
本来であればメニューのMixed Reality Toolkit > Build Windowの画面から適切な設定をするこ
とでビルドおよびHoloLensへの配信が出来るようになっていますが、Visual Studioの内部バー
ジョンの変更に伴い上手く動作しないことが多いです。
そのため少々手間ですが、Visual Studioを経由する方法を紹介します。
(C) 2018 石井 勇一 31
アプリケーションのビルド方法
Sceneの保存(Ctrl+S)、Projectの保存(File > 
Save Project)は確実に実施する
File > Build Settingsを開く
Buildボタンを押す(Build & Runではない)
(C) 2018 石井 勇一 32
アプリケーションのビルド方法
UWPでは直接アプリケーションのビルドは行
わずに、一度Visual Studio用のプロジェクト
ファイル一式を生成します。
ここではそれらを格納するフォルダ名を指定
します。
お勧めは「新しいフォルダー」でフォルダを作
成してそこに格納する方法です。
名前は何でも良いですが、ここでは「App」と
します。
フォルダを選択したら「フォルダの選択」ボタ
ンを押す
(C) 2018 石井 勇一
Appフォルダを作成してそれを指定する
33
アプリケーションのビルド方法
しばらくすると図の用の先ほど選択したフォ
ルダを表示するようにエクスプローラーが起
動します。
選択したフォルダ(App)の中に移動します。
(C) 2018 石井 勇一 34
アプリケーションのビルド方法
フォルダの中に「Unityのプロジェクト名.sln」と
いう名前のVisual Studio用のソリューション
ファイルがありますのでそれをダブルクリック
します。
(C) 2018 石井 勇一 35
アプリケーションのビルド方法
ビルドターゲットを「Release」、「x86」、「Device」に変更します。
(C) 2018 石井 勇一 36
アプリケーションのビルド方法
ReleaseにするのはDebug版では性能が出ないためです。
x86にするのはHoloLensが32bit版 IntelアーキテクチャCPUだからです(ATOM)
DeviceにするのはHoloLensがUSBケーブルでPCに繋がっているときに奏します。
PC/HoloLensともに同一ネットワークにつながっている場合は「リモートコンピューター」を選び、
HoloLensのIPアドレスを入力することでケーブルレスで繋げることもできます。
(C) 2018 石井 勇一 37
HoloLens開発者モード
HoloLensを起動
メニューの中から「Settings」を実行
(C) 2018 石井 勇一 38
HoloLens開発者モード
「Update & Security」を実行
(C) 2018 石井 勇一 39
HoloLens開発者モード
「For developer」を実行
(C) 2018 石井 勇一 40
HoloLens開発者モード
Developer modeを「On」にする
(C) 2018 石井 勇一 41
HoloLens開発者モード
Device Portalを「On」にする
(C) 2018 石井 勇一 42
HoloLensの設定
HoloLensをUSBケーブルでPCに接続
Edge(Webブラウザ)を起動
以下のURLを開く(HoloLens内に実装されているDevice Portalへアクセスする)
◦ http://127.0.0.1:10080/
初回接続時はユーザ名とパスワード(パスワードは最低7文字以上)の作成をする。その際、
HoloLensに表示されているPINを使用する
裏技:もし誰かがユーザー登録していたとしても、5回連続間違えることでユーザー名とパス
ワードを再設定できます。
(C) 2018 石井 勇一 43
HoloLensの設定
Device Portal画面
(C) 2018 石井 勇一 44
Visual Studioによる操作
Visual Studioの上部にあるDebug / ARM / Deviceを以下のようにに修正してください。
(C) 2018 石井 勇一 45
Visual Studioによる操作
[デバッグ]‐[デバッグなしで開始]またはCtrl + F5を押してコンパイル&リンク&配置(インストー
ル)&実行をします。
それなりに時間が掛かります。その間にHoloLensがスリープしないように注意してください
(Device Portalでスリープするまでの時間を変更できます)。
(C) 2018 石井 勇一 46
Visual Studioによる操作
もし途中でPINを聞かれた、HoloLensのSettingsの[Update & Security]‐[For Developer]のPaired 
devicesの[Pair]ボタンを押して出てきた数字を入力して下さい。
(C) 2018 石井 勇一 47
Visual Studioによる操作
Visual Studioへの入力が終
わり、ボタンが「Done」に変
わったらクリックして閉じる
(C) 2018 石井 勇一 48
実行結果
2m先に一辺が10cmの立方体が表示されるはずです
(C) 2018 石井 勇一 49
Holographic Remoting Player
Unity上での再生でもある程度操作ができますが実機でテストしたくなることも多いです。
しかし、実機でテストするにはそれなりビルド時間が掛かります。
「Holographic Remoting Player」を使う事でこれらの問題点をある程度解決できます。
https://developer.microsoft.com/en‐us/windows/mixed‐reality/holographic_remoting_player
PC側のシステム要件
◦ Windows 10 Anniversary Update以降必須(現在はFall Creators Update)
◦ GeForce GTX 970 または AMD Radeon R9 290以上のグラフィックボード
◦ PCは可能であれば有線接続にして不要なホップ数を減らすことを推奨
(C) 2018 石井 勇一 50
Holographic Remoting Playerの使い方
HoloLensのストアから「Holographic Remoting Player」を探してインストールする
◦ https://www.microsoft.com/ja‐jp/store/p/holographic‐remoting‐player/9nblggh4sv40
アプリを起動すると図のような画面が表示される。このときのIPアドレスを覚える
(C) 2018 石井 勇一 51
Holographic Remoting Playerの使い方
Unityの[Window]‐[Holographic Emulation]を開く
HolographicウィンドウのEmulation Modeを
「Remote to Device」に変更
先ほど覚えたHoloLensのIPアドレスを「Remote 
Machine」に入力
[Connect]ボタンを押す。
小技:このとき上手くつながらないことがあります。
その場合、「Enable Audio」のチェックを一度外し
てから再度「Connect」ボタンを押して繋げて、
「Disconnect」してから再度「Enable Audio」をチェッ
クしてから「Connect」ボタンを押すと繋がることが
あります。あと音声は重たい様なのでビットレート
(一番下のスライドバー)を下げると良いかも知れ
ません。
(C) 2018 石井 勇一 52
Holographic Remoting Player利用時の
注意点
全体的に不安定です(特にUnity側)。そのためこまめにプロジェクトやシーンファイルのセーブ
を忘れずに。
Unity Editor上でエミュレーションをするならHolographicウィンドウのEmulation Modeを
「Simulate in Editor」にする方法もあります。その際、Unity Editor内におけるHoloLensの動きは
ジョイパッドを使用します。
◦ https://docs.unity3d.com/ja/current/Manual/windowsholographic‐emulation.html
(C) 2018 石井 勇一 53
1.2 Input
GAZE/AIRTAP/VOICEなど
(C) 2018 石井 勇一 54
Gaze(視線)
HoloLensの基本的な入力はGaze(視線)になります。
目標
◦ カーソルのビジュアル デザインと動作
◦ 視線に応じたカーソルのフィードバック
◦ 視線に応じたホログラムのフィードバック
カーソルのデザイン原則
◦ カーソルは常時表示します。
◦ カーソルは適切なサイズに保ちます。
◦ コンテンツの邪魔にならないようにします。
(C) 2018 石井 勇一 55
視線はレイキャスト
始点から直線を伸ばしてその途中に何かが衝突するかどうかを調べる機能
始点
距離
ヒット
(C) 2018 石井 勇一
ヒット
しない
56
© UTJ/UCL
InputManager
視線に関する設定はInputManagerに適用されているGaze Managerで行います。
最大距離は「Max Gaze Collision Distance」で設定します(単位はm)
(C) 2018 石井 勇一 57
視線カーソル関連のプレハブ
特に凝ったことをしなければシーンにプレハブを入れるだけで利用可能です。
格納場所は Assets/HoloToolkit/Input/Prefabs/Cursor です。
利用可能なプレハブは次のスライドを参照
(C) 2018 石井 勇一 58
視線カーソル関連のプレハブ
BasicCursor.prefab
◦ ユーザーの視線に沿ったトーラス型(ドーナッツ型)の基本カーソル。
Cursor.prefab
◦ ユーザがホログラムを注視しているときにトーラス型、ホログラムへの注視が外れると半透明な球体
の形のカーソルに変わります。
CursorWithFeedback.prefab
◦ ユーザーの視線に沿ったトーラス型のカーソルに加えて、手を認識すると指のアイコンを表示する。
DefaultCursor.prefab
◦ ユーザーの視線に沿った3Dアニメーションカーソル。Unityのアニメーションシステムを使用してさまざ
まな状態を処理します。 このカーソルは、HoloLensシェルのカーソルを模倣します。
(C) 2018 石井 勇一 59
Gaze関連イベント処理
注視されたときにイベントを発生させるためには以下のインタフェースを実装したスクリプトを
作成します。
IFocusable
(C) 2018 石井 勇一 60
public interface IFocusable : IEventSystemHandler
{
void OnFocusEnter(); //フォーカス(注視)し始めたとき時
void OnFocusExit(); // フォーカス(注視)が外れた
}
Gaze関連イベント処理
プログラム例
(C) 2018 石井 勇一 61
using UnityEngine;
using HoloToolkit.Unity.InputModule;
// IFocusableインタフェースを実装することで、注視された時とはずれたときにそれぞれメソッドが呼び出される
public class GreetingUnitychan : MonoBehaviour, IFocusable {
private Animator anim;
void Start()
{
anim = GetComponent<Animator>();
}
// フォーカス(注視)し始めたとき時
public void OnFocusEnter()
{
anim.SetTrigger("Greeting");
}
// フォーカス(注視)が外れた
public void OnFocusExit()
{
// 今回は特に実装無し
}
}
ジェスチャー関連のイベント
様々なジェスチャーが発生した時に対応する処理を書くには以下のインタフェースを実装します。
IInputHandler
◦ オブジェクトへのInputDown / 対象へのInputUp
IInputClickHandler
◦ オブジェクトへのクリックイベント(AirTap)
ISourceStateHandler
◦ 手の検出。対象を見ている状態で手が認識されている / 対象を見ている状態で手が認識から外れた
IHoldHandle
◦ ホールドの検出。対象をつまみだした / 対象をつまんでいる / 対象をつまみ外した
IManipulationHandler
◦ ドラッグ操作。対象をつまみだした / 対象をつまんでいる / 対象をつまみ外した / 途中でトラッキングが外れ
た
INavigationHandler
◦ ナビゲーション操作。対象をつまみだした / 対象をつまんでいる / 対象をつまみ外した / 途中でトラッキング
が外れた
(C) 2018 石井 勇一 62
IInputHandlerインタフェース
インタフェース
(C) 2018 石井 勇一 63
public interface IInputHandler : IEventSystemHandler
{
void OnInputDown(InputEventData eventData);
void OnInputUp(InputEventData eventData);
}
IInputClickHandlerインタフェース
インタフェース
(C) 2018 石井 勇一 64
public interface IInputClickHandler : IEventSystemHandler
{
void OnInputClicked(InputClickedEventData eventData);
}
ISourceStateHandlerインタフェース
インタフェース
(C) 2018 石井 勇一 65
public interface ISourceStateHandler : IEventSystemHandler
{
void OnSourceDetected(SourceStateEventData eventData);
void OnSourceLost(SourceStateEventData eventData);
}
IHoldHandleインタフェース
インタフェース
(C) 2018 石井 勇一 66
public interface IHoldHandler : IEventSystemHandler
{
void OnHoldStarted(HoldEventData eventData);
void OnHoldCompleted(HoldEventData eventData);
void OnHoldCanceled(HoldEventData eventData);
}
IManipulationHandlerインタフェース
インタフェース
(C) 2018 石井 勇一 67
public interface IManipulationHandler : IEventSystemHandler
{
void OnManipulationStarted(ManipulationEventData eventData);
void OnManipulationUpdated(ManipulationEventData eventData);
void OnManipulationCompleted(ManipulationEventData eventData);
void OnManipulationCanceled(ManipulationEventData eventData);
}
INavigationHandlerインタフェース
インタフェース
(C) 2018 石井 勇一 68
public interface INavigationHandler : IEventSystemHandler
{
void OnNavigationStarted(NavigationEventData eventData);
void OnNavigationUpdated(NavigationEventData eventData);
void OnNavigationCompleted(NavigationEventData eventData);
void OnNavigationCanceled(NavigationEventData eventData);
}
実装例
AirTapによって自分自身を消す
(C) 2018 石井 勇一 69
using HoloToolkit.Unity.InputModule;
using UnityEngine;
// IInputClickHandlerを実装することで、注視&クリック(AirTap)時に呼び出されるメソッドが呼び出される
public class HideCube : MonoBehaviour, IInputClickHandler {
// 注視&クリック(AirTap)されると呼び出される
public void OnInputClicked(InputClickedEventData eventData)
{
// 自分自身の削除
Destroy(gameObject);
}
}
何も無い所をAirTapした時のイベントを
取得するには
InputManager.Instance.AddGlobalListener()に登録する
(C) 2018 石井 勇一 70
using HoloToolkit.Unity.InputModule;
using UnityEngine;
public class NothingSpaceClickHandler : MonoBehaviour, IInputClickHandler {
void Start () {
// 全てのジェスチャーイベントをキャッチできるようにする
InputManager.Instance.AddGlobalListener(gameObject);
}
/// AirTapイベントのハンドラ
public void OnInputClicked(InputClickedEventData eventData) {
// 何もGazeしていないときだけ動作する
if (!GazeManager.Instance.HitObject) {
// ログを吐くだけ
Debug.Log("Click on nothing point !!!!");
}
}
}
参考: http://blog.d‐yama7.com/archives/699
その他のイベントについて
HoloLens+Unity開発 入力の取得まとめ編 by のしメモ アプリ開発ブログ
http://www.noshimemo.com/entry/2017/01/28/133818
HoloLesnに対する操作とそれに対応するイベント発生を一つにまとめている動画がとても分か
りやすい。
(C) 2018 石井 勇一 71
1.3 Spatial Sound
(C) 2018 石井 勇一 72
空間音響
英語はSpatial Sound と言います。
HoloLensは実際の空間で数メートル先に物体を表示します。
そして、HoloLensはそこから音が発生しているかのように振舞うことができます。
(C) 2018 石井 勇一 73
Unityの設定
[Edit]‐[Project Settings]‐[Audio]を開く
Spatializer Pluginを「MS HRTF Spatializer」に
変更
(C) 2018 石井 勇一 74
HRTF: 頭部伝達関数(Head-Related Impulse Response)
ユニティちゃんの設定
Audio Sourceコンポーネントを追加
設定を変更
◦ Spatializeをチェック
◦ Play On Awakeのチェックを外す
◦ Spatial Blendを1(3D)
◦ 3D Sound Settingsを変更(次のスライド)
(C) 2018 石井 勇一 75
ユニティちゃんの設定
AudioSourceの設定の続き
◦ Doppler Levelを0
◦ Max Distanceを20
(C) 2018 石井 勇一 76
ユニティちゃんの設定
PlayAudioClipスクリプトを追加
(Assets/UnityCHan/Custom/Scripts/PlayAudioClip)
Audio Clipsを0から3に変更してEnterキーを押す
(C) 2018 石井 勇一 77
ユニティちゃんの設定
PlayAudioClipの設定の続き
◦ Element0~2に適当なAudio Clip(音声ファイル)をドラッグ&ドロップで設定する
◦ Assets/UnityChan/unitychan_voicepack_append_01に音声ファイルがあります。
(C) 2018 石井 勇一 78
Unity上で実行
Playボタンを押してみましょう。
ユニティちゃんに視線を合わせてAirTapすると設定した音声のどれかをランダムで喋ります。
動作が確認出来たらHoloLensにインストールして動作確認してみましょう。HoloLensでは空間
音響が試せるので、USBケーブルと人とPCに注意しながら移動したり顔を左右に振ってみて下
さい。
(C) 2018 石井 勇一 79
応用
長時間再生する音声ファイルがあります。
Assets/UnityChan/Unite In The Sky (full)
これをAirTapで再生停止できるCubeを作成してみましょう(図で示しているサンプルコードを参
照)
音声が少し大きいのでAudio Sourceの設定でVolumeを1から0.3などに変更するとよいでしょう。
音声の再生が始まったら近づいたり、離れたり、左右に頭を振ると空間音響の効果がよりはっ
きりと分かると思います。
(C) 2018 石井 勇一 80
応用
HoloLesn用に用意されているスクリプトがいくつかあります。
AudioEmitter.cs
◦ AudioSourceをカプセル化し、オーディオの影響(オクルージョンなど)の適用をサポートするクラスです。
AudioOccluder.cs
◦ ローパスフィルタと音量減衰を使用した簡単な形式のオーディオオクルージョンを実装するクラス。
IAudioInfluencer.cs
◦ AudioInfluencerに必要なメソッドを定義するインターフェース。 AudioOccluder.csで使用。
UAudioManager/UAudioManager.cs
◦ オーディオ全般を管理するクラス
(C) 2018 石井 勇一 81
応用
利用イメージ
(C) 2018 石井 勇一 82
AudioOccluder
AudioEmitterAudioEmitter
減衰して
聞こえる
何も影響を
受けずに聞こえる
© UTJ/UCL
AudioEmitter.cs
Update Interval
◦ オーディオへの影響の更新間隔(秒単位)。 0はすべてのフレームを更新することを示します。
Max Distance
◦ 最大距離 (単位はm)。
Max Objects
◦ 影響を受けるオブジェクトの最大数。
(C) 2018 石井 勇一 83
AudioOccluder.cs
Cutoff Frequency
◦ ユーザーと AudioEmitter の間にある時に適用される最低周波数。
Volume Pass Through
◦ ユーザーと AudioEmitter の間にある時の音量の割合。
(C) 2018 石井 勇一 84
応用
CubeにAudioEmitter.csをアタッチ
新たにCubeを作成して、Wallと名前を付ける。分かりやすく適当にマテリアルを作成して色を
付ける
Wallの位置とスケールを調整
◦ Position(0, 0, 1.5)
◦ Scale(0.3, 0.5, 0.05)
WallにAudioOccluder.csをアタッチ
AudioOccluderの値を以下のように修正
◦ Cutoff Frequency: 600
◦ Volume Pass Through: 0.5
(C) 2018 石井 勇一 85
応用
Remote Playで試す場合はUnity Editorのシー
ンビューでWallを左右にずらすと効果が分か
ります。
実機に転送した場合はWallを回り込むとそ
の効果が分かります。
(C) 2018 石井 勇一 86
応用
UAudioManager.csを使うと、それぞれの音声を「AudioEvent」として名前を付けて、様々な設定
をまとめて管理できます。
(C) 2018 石井 勇一 87
UAudioManager
(Singletone)
Audio Bank
(ScriptableObject)
Audio Bank
(ScriptableObject)
Audio Event Bank
(ScriptableObject)
音声を再生する
スクリプト
音声の再生を依頼音声の再生方法を設定
Audio Event Bankを管理
Audio Bankの作成方法
Project Viewで右クリックして、Create > Audio Event Bankをクリック
「AudioEventBank」ファイルが生成される
(C) 2018 石井 勇一 88
Audio Bankの設定
Audio Bankファイルを選択し、インスペクターからEventのAddボタンを押す
(C) 2018 石井 勇一 89
Audio Bankの設定
設定例
◦ NameはUAudioManager経由で再生するスクリ
プトで指定する名前になります。 "/"を含めると
サブメニューにすることができます。
◦ Positioningを「Spatial Sound」にすると空間音響
になる。他にも2D/3Dなどもある。
◦ Audio Event Interface Behaviorは音声ファイル
の生成上限数(Instance Limit)を超えたときのア
ルゴリズムを選択。Kill Oldestは古い音を止めて
再利用。Kill Newestは新しい音を止めて再利用。
(C) 2018 石井 勇一 90
UAudioManagerの設定
適当なGameObjectを作成してそこにアタッチする。
Default Banksを1以上の値にする(Audio Bank数分作成)
作成したAudio Bankをセットする
(C) 2018 石井 勇一 91
再生スクリプト
HoloToolkit‐Unity‐Examples‐2017.2.1.3のUAudioManagerTestを参照
(C) 2018 石井 勇一 92
public class UAudioManagerTest : MonoBehaviour
{
[AudioEvent]
public string Vocals3d;
[AudioEvent]を付けておくと、
インスペクターからプルダウ
ンメニューで選択できます。
UAudioManager.Instance.PlayEvent(Vocals3d);
UAudioManager.InstanceでUAudioManagerのインス
タンスを取得できます。PlayEvent()で音声を再生
します。AudioSourceコンポーネントは無ければ自
動的に追加します。
第二引数にAudioSourceコンポーネントへの参照を
指定するとそちらを使用します。
(C) 2018 石井 勇一 93
1.4 Spatial Mapping
(C) 2018 石井 勇一 94
Spatial Mappingとは
HoloLensに搭載している複数のカメラを駆使して現実空間をリアルタイムにスキャンし、システ
ム内に3Dモデルデータとして保存する機能です。データは逐次更新されます。
アプリケーションからも利用することができます。作成した3Dモデルデータにはコライダーが設
定されています。
(C) 2018 石井 勇一 95
Spatial Mappingを使う設定
[Mixed Reality Toolkit]‐[Configure]‐[Apply UWP Capability Settings]を実行(Capability=能力)
(C) 2018 石井 勇一 96
Spatial Mappingを使う設定
Spatial Perceptionをチェックして「Apply」ボタ
ンを押す
その他のは「マイク」「カメラ(Webcam)」「イン
ターネット接続(クライアントとサーバ)」などを
利用するときに同様の設定をします。
(C) 2018 石井 勇一 97
【参考】UWPのCapabilityの設定
[Editor]‐[Project Settings]‐[Player]の
Publishing Settingsの下の方にCapabilitiesの
設定があります。ここで設定してもOKです。
(C) 2018 石井 勇一 98
Spatial Mappingを使う設定
Assets/HoloToolkit/SpatialMapping/Prefabsにある
SpatialMappingをHierarchyにドラッグ&ドロップする
Unityではテストするときは、Holographicウィンドウで
Emulation ModeをSimulate in Editorにし、適当なRoom
を選択してください。
空間のスキャンは3.5秒間隔で行われますのでゆっく
りと周りを見渡してください。
十分にスキャンが出来たと思ったらユニティちゃんの
床にあるCubeをAirTapしてユニティちゃんを落下させ
てください。
上手くいくと床の上でユニティちゃんがとまります。机
の影になるように回り込むと、きちんと見えなくなると
思います。
(C) 2018 石井 勇一 99
Spatial Mappingを使う設定
Unityではテストするときは、HolographicウィンドウでEmulation ModeをSimulate in Editorにし、
適当なRoomを選択してください。
あるいはEmulation ModeをNoneにして、 SpatialMappingにアタッチされている
ObjectSurfaceObserverのRoom Modelの右の◎ボタンを押して、
「MediumRoomWithHomeFurniture」を選択してから実行してください。これでダミールームデー
タによるスキャン実験ができます。
(C) 2018 石井 勇一 100