2017年1月26日木曜日

HoloLensの開発効率化 ノンコーディングでHoldできるオブジェクトを作成する方法

お疲れ様です。ZuQ9->Nnです。

HoloToolkit-Unityを利用すれば
なんとノンコーディングでオブジェクトのHold
つまりHolo内で掴んで移動させられる
オブジェクトを作れるようになります。

まずは、 HoloToolkit-Unityをインストール
プロジェクトとScenesの設定をきちんと行います。

HoloToolkit-Unityの
Input > Prefabs > InputManger.prefabをHierarchyに追加

Hierarchyのcreate > 3D Object > CubeでCubeを作成
Cubeの座標をCameraに移るように移動(今回は x:0 y:0 y:7)
Cubeを選択しAdd Componetをクリックし
HandDraggable.csを選択してアタッチ
これで完了です。Unityで実行し、
Shiftを押すと青い指マークがでますので
Cubeを選択し、マウスをクリックするとHoldで移動させられます。



実機で動かすとこんな感じになります。

例によって、HoloToolkit-Unityは、いつ変更されるかわからないのですが
とりあえず、現在のところは、これで問題ないかと思います。


2017年1月24日火曜日

HoloLensの開発効率化 Unity上でSpatial Mappingのメッシュを表示する方法

お疲れ様です。ZuQ9->Nnです。
HoloLensの開発をするうえで、もう一つ不便な点。
それは、空間検知をおこなう。Spatial MappingのAssetをHierarchyに
おいて実行してもUnityではメッシュが表示されない点です。

こちらもHoloToolkit-Unityをつかっていきます。
まずは、Spatial MappingのAssetをHierarchyにおきます。
これで実行しても、画面にはなにも表示されません。

そこでSpatialMappingのAssetにアタッチされている
ObjectSurfaceObserver.csのroomModelというプロパティをクリックし
選択画面でSRMeshを指定します。
これで再び実行するとUnity上でもSpatialMappingのメッシュが表示されるようになります。
確認したところ、この指定をしたまま、実機で動かしても
SRMeshの中にある部屋が表示されたりはしませんでした。
コード上からもUnity Editorでしか読み込まれて表示されないように制御されています。

こちらは、Holographic AcademyのサイトのHolograms 230: Spatial mapping でも
同じようにしていたので、大丈夫かなと思いますが、
SRMeshはHoloToolkit > SpatialMapping > Tests > Meshesの中に存在し
如何にもMicrosoftがテスト用に用意したAseetであると考えられます。
今後削除される可能性も高く、手放しでこれを利用するよりかは
自前で部屋のAssetは容易したほうが無難かもしれませんね。

2017年1月23日月曜日

Holographic AcademyのプロジェクトでAssembly-CSharp-firstpass.dll が見つかりませんでしたのエラーが出力された時の解決方法

お疲れ様です。ZuQ9->Nnです。

HoloLensの開発でHolographic Academyにある
Holograms 101 等のプロジェクトをUnityからUWPに出力し
HoloLens EmulatorやDeviceで実行しようとすると
「Assembly-CSharp-firstpass.dll' が見つかりませんでした」
とういエラーが表示されてしまいました。

てっきり、実機につないでないから、起きるのだろうと放置していたのですが、
実際に実機をつないでいても出力されるので調査しました。

Windows Holographic Developer Forumに
Assembly-CSharp-firstpass.dll missing from Origamiという
同じ内容の質問が投稿されており それによると
「The path my project was in appeared to be too long
When I put the Unity project in the root of the drive, everything worked like a charm!」

つまりプロジェクトのパスが長すぎる??
プロジェクトをCドライブ直下に置くと解決した????

若干、モンニョりとする解決方法だったのですが
試してみたところ、この方法でうまくいきました。。
なんか、もう少し、エレガントな解決策あるのかもしれませんが
今のところ、これ以外の解答が見つけれらませんでした。。orz..
本当は、根本的な原因を調査すべきかなぁと思ったりするけど。。まぁええかな。。


2017年1月22日日曜日

HoloLensの開発効率化 Unity上でAir Tapを確認する方法

HoloLensの開発効率化 Unity上でAir Tapを確認する方法
お疲れ様です。ZuQ9->Nnです。

HoloLensの開発をするうえで、いくつか不便な点があります。
その一つがAir Tap

Holographic Academy - Microsoft Developers
Holograms 101E
ではUnityEngine.VR.WSA.Input GestureRecognizer を利用する方法が紹介されています。

しかし、これは、Unity上で反応せず、
いちいちbuildしてHoloLens Emulatorを起動して確認しなけらばなりません。
HoloLens Emulatorはかなり起動が遅く、確認、デバックが、かなり辛いです。
そこでなるべくUnity上で確認したい欲求がでてきます。

Microsoftが提供してくれているHoloToolkit-Unityには便利なアセットが多く存在します。
UnityにHoloToolkit-Unityをコピーし、プロジェクトの設定を行います。

UnityのProjectから
HoloToolkit > Input > Prefabs
InputManagerのAssetをHierarchyに追加

これでUnityを実行してみると、薄っすら指のアイコンが確認できます。

Shiftキーを押すと反転し色がつくのでわかりやすくなります。
Shiftキーを押したままマウスのクリックを行うと
指のアイコンが動きTapされていることがわかりやすくなります。
調べたところ、この指のアイコンはUnity Editorでしか表示されないようになっていて
HoloLens Emulatorでは表示されません。

またHoloLens EmulatorではShiftキーを押したままマウスのクリックでAir Tapは反応せず
Air Tapは、マウスの右クリックになりますのでご注意ください。

コードでAir Tapをハンドリングするには
Input > Tests > ScriptsのInputHandleCallbackFX.csが参考になります。
using UnityEngine;
namespace HoloToolkit.Unity.InputModule.Tests
{
   public class InputHandleCallbackFX : MonoBehaviour, IInputClickHandler
   {
       [SerializeField] private ParticleSystem particles = null;
       private void Start()
      {
           InputManager.Instance.PushFallbackInputHandler(gameObject);
      }

      public void OnInputClicked(InputClickedEventData eventData)
      {
           particles.transform.position = GazeManager.Instance.HitPosition; particles.Emit(60);
       }
   }
}
こちらは、Gazeの位置でAir Tapすると、パーティクルが表示されるようになっています。
札束のやつも基本これです。HoloToolkit-Unityは、結構頻繁にアップデートをされているので
今後、このやり方ではできなくなるかもしれませんが、
今のところ積極的に使っても大丈夫だと思います。