2017年10月14日土曜日

xRLT vol.1に参加

お疲れ様です。ZuQ9->Nnです。
201710/13(金) xRLT vol.1 に参加しました。
場所は渋谷のTECH PLAYさん

xRLT vol.01|IT勉強会・セミナーなどのイベント情報検索サービス - TECH PLAY[テックプレイ]

本年1月に日本発売されたHoloLens、そしてまもなく一般発売を迎えるWindows Mixed Reality Immersiveデバイス! まだかまだかと待ち構えるみなさんの熱気が今回のLT大会の源となりました! もちろんMRだけでなく、VR/ARも集めてどーんとLT21連発! 10/2 Update: U22割(先着10名無料)やります! 10/3 Update: ...
今回もLT発表枠で申し込みました。内容はTokyo HoloLens meetup vol.5 の
LTで発表した椅子の検知の続きのような形
どうしても歩かせてから椅子に座らせてみたかったのでチャレンジしてみました。

結果的には、残念ながらうまくいきませんでした。orz..

発表そのものも、またしても5分で終わらず、強制終了。。orz..
もう、緊張のためか発表中は足がガタガタ震えてきたのがわかったんですが
全然とめられなかったですね。内容も頭の中が真っ白に
パーンっていっちゃいましたね。自分でも何言っているのかわからない感じ
とにかく、ふわふわ浮いたように感じてました。
はじめっててわけじゃないのに意識しすぎたんだろうか??

前回のリベンジならずで、ものすごく自分的に
反省点ばかりが目立つ結果になってしまいました。

発表したおかげか、色々な人から声をかけてもらいとてもうれしかったです。
今後も積極的に発表前提で勉強会に臨みます。

ともあれ、時間が許す限り、力を尽くしたので
ある意味ではやり遂げた感も、いったんこちらの内容は一休みして
ずっと気になっていたMRDesignLabs_Unityで、
いろいろ脳内の妄想が実装できそうなのでチャレンジしてみます。

あぁ次こそはキッチリとかっこよく5分ぴったりでおわらせるぞ。。
課題も増えましたが、やりたいことも増えてなんだかとても楽しくなってきています。
これを続けられるように精進かな。。


2017年10月8日日曜日

はじめよう!Mixed Reality を開催しました。

お疲れ様です。ZuQ9->Nnです。
2017/10/07(金) はじめよう!Mixed Reality を開催しました。
場所は渋谷の21Cafeさん

はじめよう!Mixed Reality (2017/10/06 19:00〜)

理念・目的 最近MRやHoloLensといった分野が盛り上がっていて、ドキュメントなどの整理もされ始めているので、一度初心を思い出すとともにこれからMRを始めたい! という方が情報を仕入れられる機会を作りたいなと思い開催されます。 ## こんな方を対象にしたお話し会です * HoloLensやMR技術に興味がある * でも実機は高いし * unity? C#? ちょっとよくわからないな... * そもそもMRって何よ? VRとは違うの? ## 当日のスケジュール 18:30 開場 18:50 開始 ~19:00 geechs.inc による会場説明 ~19...
これまで、何度も勉強会に参加者としては行っていましたが、
今回は、なんと主催側??。。といっても発表資料を作り
発表しただけで、ほとんど、浅葱 (あさぎ)さんにお任せでした。

本当に色々、準備してくださってありがとうございました。
もう少し、自主的に動けるように、今後の反省点も多いです

当日は、ものすごい雨となりましたが、
ほとんど想定した人数の方が参加してくださったようなので
こちらも本当に、ありがとうございました。

僕の発表内容は、「HoloLensのはじめかた」という技術的な内容より
操作方法やHoloLensに関する説明がメインでした。


いざ まとめ始めると、こんなので大丈夫なのか?
また、発表した後も、こんなのでよかったの??という迷いばかり。。

めちゃくちゃ、つたない発表となりましたが、
無事、最低限の義務は果たせてよかったかなと思っています。

アウトプットはとても、重要だと感じてますが、
僕は、量も少ないうえ、スピード感も無く、
それがとてもコンプレックスな感覚はもっています。

ただ、そんな思いをするたびに、マイペースで良い
自分のできる範囲内で最大で良いのだと自分を言い聞かせています。

他の勉強会の主催者、発表者さんたちは、自分の業務も持ちながら
おしみなく、自分のノウハウを積極的に共有していて
改めて、そのすごさや重要さを再認識しました。

なにはともあれ、勉強会開催という参加者か
次のステップを歩むことができ、自分的には大進歩だと感じています。

今後も続けられるのか?。不安も多いですが
今まで同様に、できる範囲を最大限を尽くして行く感じで取り組みます。

今回は、本当に良い体験になったと感じています
最後に、ほかの登壇者の方も含めてお連れ様でした。

2017年9月18日月曜日

Tokyo HoloLens ミートアップ vol.5 に参加

お疲れ様です。ZuQ9->Nnです。
2017/09/18(日) Tokyo HoloLens Meetup vol.5 が開催されたので参加しました。
場所は、日本マイクロソフト株式会社セミナールーム

Tokyo HoloLens ミートアップ vol.5 (2017/09/17 13:00〜)

開催概要 ## HoloLensアプリ開発秘話 HoloLensアプリ開発で著名な方々に登壇いただき、HoloLensに向いたアプリ、VR/MRに向いたアプリの特長や、HoloLensアプリ開発の裏話をお 話しいただきます。 HoloLensを持っていない方も参加可能です!ご興味のある方は是非ともご参加頂き、HoloLensを含めたWindows ...
イベントの詳細内容は、おそらくほかの方が詳しく、
わかりやすくまとめてくれると期待して。
今回は自分のLTについてのみです。
前から気になっていた椅子の検知にチャレンジ です。


なんとかサンプルが実機でも動きました。

今回はプロジェクトもGitHubに公開しましたので、参考にしてください。
ZuQ9Nn/ChairDetection

ZuQ9Nn/ChairDetection

This is HoloLens Sample App ChairDetection minimum cod
LTは残念ながら5分をオーバーしてしまいました。。orz..
プレゼンや動画の操作に戸惑いましたね。。事前に準備はしてたつもりでしたが
まだまだ努力も必要だったようです。

LTではいきなりコードを出してしまい詳細な説明しきれなかった、
椅子の定義について。ポイントは下記の部分です。

SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_SurfaceHeight_Between(0.25f, 0.6f),
...
SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleLength_Between(0.1f, 0.5f),
SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleWidth_Between(0.1f, 0.4f),
こんな感じで図解すると多少はわかりやすいでしょうか? ?(;^_^A アセアセ・・・


UnityでのScaleの1は、HoloLensで見て現実世界の1m
つまり幅が0.1m~0.4m、長さが0.1m~0.5m、床からの高さが0.25m~0.6mの
条件に当てはまった矩形を椅子として扱う感じです。

GitHubでのサンプルプロジェクトはUnityだけでも動くように作っています。
こんな感じで実行した後、ゲームシーンでマウスをぐりぐりと動かして
空間情報を読み込んでみてください。ある程度読み込むとユニティちゃんがでてきます。


結構時間がかかりますので、面倒な方は、
ChairDetection.csのpublicのプロパティ
Min Area For Complete、Min Horiz Area For Complete、Min Wall Area For Completeの値を
小さくしてみてください。実機ではある程度空間情報が必要ですが
Unity上ではそれぞれの値を半分くらいにしても大丈夫だと思います。
SpatialUnderstandingのサンプルは、全部の機能がてんこ盛りにされているため
逆に、やりたいことだけを抜き出すのにかなり苦労します。
今回、かなりコードが短くできたので
他の開発者さんの理解の助けになれば幸いです。

2017年9月14日木曜日

HoloLensの開発 SpatialUnderstandingDllTopologyで壁にオブジェクト配置してみる

お疲れ様です。ZuQ9->Nnです。
今回も、前回に引き続きSpatialUnderstandingの話題です。

SpatialUnderstandingには検知した壁、天井、床にオブジェクト配置する機能があります。
今回はSpatialUnderstandingDllTopologyというクラスを用いて
壁にオブジェクト配置に挑戦してみます。

Unity 5.6.2f1HoloToolkit-Unity-v1.5.8.0.unitypackage
HoloToolkit-Unity-Tests-v1.5.8.0.unitypackage を利用します。
まずは、HoloToolkit-Unity-v1.5.8.0.unitypackageをすべてインポート

次にHoloToolkit-Unity-Tests-v1.5.8.0.unitypackageの
MediumRoomWithHomeFurniture.fbxのみ
チェックしてインポートします。
次にプロジェクトの設定を行います。UnityのHoloToolkitメニューから
Configure > Apply Hololens Projectを選択、
表示されたポップアップメニューのApplyをおします。
続いてUnityのHoloToolkitメニューから
Configure > Apply Hololens Capablity Settingを選択、
Spatial PerceptionをチェックしてApplyをおします。
HierarchyのMain Cameraを右クリックで選択
表示されたメニューからDeleteで削除します。
HoloLensCamera、InputManager、Cusor、SpatialMapping、SpatialUnderstandingの
PrefabをHierarchyに置きます。
(HoloLensCamera、InputManagerはProjectのHoloToolkit > Input > Prefabs
CusorはHoloToolkit > Input > Prefabs > Cursor
SpatialMappingはHoloToolkit > SpatialMapping > Prefabs
SpatialUnderstandingはHoloToolkit > SpatialUnderstanding > Prefabsの中です)

HierarchyのSpatialMappingを選択Room Modelのプロパティに
MediumRoomWithHomeFurniture.fbxを選択しアタッチします。
HierarchyのSpatialMappingを選択Spatial Mapping Managerの
Draw Visual MesheのチェックをOFFにします。
UnityのProjectに適当な画像ファイルを追加します。
(今回はskey.pngという空の画像を追加しました。)
HierarchyのCreate > 3D Object Planeを選択し、Planeを作成
作成されたPlaneの名前をposterに変更、大きさを適当に変更し(サンプルでは x0.1 y0.1 z0.1)
rotationのxを90に変更、Unityに追加した画像ファイルをposterのMaterialにします。
HierarchyのposterをProjectにドラグアンドドロップでPrefab化した後
Hierarchyのposterは削除します。

ProjectのCreateからC# Scriptを選択、Scriptの名前をTopologySampleとします。

TopologySampleの中身はこんな感じです。

HierarchyのCreate Emptyで空のGame Objectを追加し
GameObjectにTopologySampleのScriptをアタッチ、
TopologySampleのWall Prefabプロパティにposterのprefabをアタッチして完成。
Unityを実行するとこんな感じで壁に、空のポスターが表示されます。
もちろん、SpatialUnderstandingDllTopologyを使わなくても
同じように壁にオブジェクト配置することは可能です。

MicrosoftのHolograms 230 のサンプルはSpatialMappingとSurfaceMeshesToPlanes.csで
壁の検知と壁にポスターを張っています。

SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnWallsの
メソッドの引数を調整することで細かく壁の位置が指定できるのが特徴ですね。

より細かく制御する場合はSpatialUnderstandingDllTopologyを
用いるといったすみわけかな。

GitHubで見つけたSpatialDemoでは壁だけではなく
SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnFloor
SpatialUnderstandingDllTopology.QueryTopology_FindPositionsSittable
なんかも利用していますので、併せて参考にしてください。

2017年8月23日水曜日

fastlane勉強会 vol4 に参加

お疲れ様です。 ZuQ9->Nnです
2017/08/22(日) fastlane勉強会 vol4 が開催されたので参加しました。
場所は株式会社Origami さん
実はこの勉強会は何度お参加しているのですが
今回の目的は勉強会の参加ってよりも、自分の発表です。

発表内容はFabricでfastlaneを使ってみるというもの

前から気になっていたので今回、自分の勉強もかねて
どこまでこのツールが使えるかを検証したかったのでこのテーマを選びました。

発表が久しぶりすぎて緊張しすぎてしまい。かなりグダグダになってしまいましたね。
発表中もFabricとfastlaneの話がまじってしまい。
自分の中で混乱してしまう感じでした。
あと、自分の発表に集中しすぎて、他の方の発表を集中して聞けなかった。orz..

特にmatchあたりは、現状きちんと使えて無いので
もう一度資料だけでも読み直しておきます。

あーなんだか悔しぃ。。リベンジしてぇって感じ。
あと、もう少し余裕も欲しいですね。
懇親会も料理の写真撮っておけばよかった。ここに載せられたのに。。

また、宣言して自分を追い込むかなぁ。
最近こんな感じでしか行動できてないけど。。
また、その時の気分、ノリで決めたいと思います。

最後に、今回の発表の機会をいただけて大変ありがとうございました。
これを糧に次のステップに進めるように精進します。

2017年6月4日日曜日

HoloLens開発 SpatialUnderstanding事始め 空間検知と空間内の情報(天井、床、壁)の判定まで

お疲れ様です。ZuQ9->Nnです。
久しぶりのHoloLens開発の進捗。
今回はSpatialUnderstandingです。

SpatialUnderstandingはクラス名、メソッド名が長くまた公式のサンプル
HoloToolkit-Examples > SpatialUnderstanding > SpatialUnderstanding-FeatureOverviewの
中のコードもかなり多めで解析が困難です。
ですから、まず空間検知と空間内の情報(天井、床、壁)の判定までを行っていきます。

今回は、Unity 5.6.1f1 (64-bit)
HoloToolKit-UnityはGitHubの最新を取得して行いました。

Unityのプロジェクトを作成し、
HoloToolKit-UnityとHoloToolkit-Testsのフォルダーを追加してください。

UnityにHoloToolKitのメニューが表示されますので
Configure > Apply HoloLens Project Settingsを選択
表示されたメニューをそのままApply > YES

プロジェクトの設定が終わったら再びUnityにHoloToolKitのメニューから
Configure > Apply HoloLens Capability Settingsを選択
Spatial PerceptionをチェックしApply

次に、 HierarchyのMain cameraを右クリック
メニューからDelelteで削除します

Project内のHoloToolkit > Input > PrefabのHoloLensCamera

続いてInputManager、

HoloToolkit > Input > Prefab > Cursorの中のCursor

HoloToolkit > SpatialMapping > Preabsの中のSpatialMapping

HoloToolkit > SpatialUnderstanding > Preabsの中のSpatialUnderstandingを

それぞれHierarchyに追加

HierarchyのSpatialMappingを選択し、Inspectorの
Object Surface Obsever Room Modelのプロパティをクリック
MediumRoomWithHomeFurnitureを選択しセット

Spatial Mapping ManagerのDraw Visual Meshesのチェックを外します。


この段階でいったんUnityを実行してみると。
こんな感じて空間検知が実行されメッシュが表示されます。

SpatialMapping同様、空間検知だけならノーコーディングでできてしまいます。

次にHierarchyのCreateから 3DObject > 3D Textを選択し追加
3D TextのInspectorで見やすい位置、設定にしてください。

今回はTransformのpositionをx:0 y:0 z;40
Text MehのAnchorをMiddle Cneter AlignmentをCenter
Font Sizeを30に設定しました。(ここはご自由にお好きな設定にしてください)


つづいて3D TextのInspector Add ComponentでTaglongと

BillboardのScriptを追加します

ProjectのCreateからC# Script、スクリプトの名前を
SpatialUnserstandingTestとします。

SpatialUnserstandingTestの中身はこんな感じ

using UnityEngine;
using HoloToolkit.Unity;
using System;

public class SpatialUnserstandingTest : MonoBehaviour {

    public TextMesh textMesh = null;
    public float kMinAreaForComplete = 50.0f;
    public float kMinHorizAreaForComplete = 25.0f;
    public float kMinWallAreaForComplete = 10.0f;

    private void LateUpdate()
    {
        if (DoesScanMeetMinBarForCompletion)
        {
            SpatialUnderstanding.Instance.RequestFinishScan();
        }

        Vector3 rayPos = Camera.main.transform.position;
        Vector3 rayVec = Camera.main.transform.forward * 10.0f;

        IntPtr raycastResultPtr = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticRaycastResultPtr();
        SpatialUnderstandingDll.Imports.PlayspaceRaycast(
            rayPos.x,
            rayPos.y,
            rayPos.z,
            rayVec.x,
            rayVec.y,
            rayVec.z,
            raycastResultPtr);

        SpatialUnderstandingDll.Imports.RaycastResult rayCastResult = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticRaycastResult();
        textMesh.text = rayCastResult.SurfaceType.ToString();
    }
    private bool DoesScanMeetMinBarForCompletion
    {
        get
        {
            if ((SpatialUnderstanding.Instance.ScanState != SpatialUnderstanding.ScanStates.Scanning) ||
                (!SpatialUnderstanding.Instance.AllowSpatialUnderstanding))
            {
                return false;
            }

            IntPtr statsPtr = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticPlayspaceStatsPtr();
            if (SpatialUnderstandingDll.Imports.QueryPlayspaceStats(statsPtr) == 0)
            {
                return false;
            }

            SpatialUnderstandingDll.Imports.PlayspaceStats stats = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticPlayspaceStats();
            if ((stats.TotalSurfaceArea > kMinAreaForComplete) ||
                (stats.HorizSurfaceArea > kMinHorizAreaForComplete) ||
                (stats.WallSurfaceArea > kMinWallAreaForComplete))
            {
                return true;
            }
            return false;
        }
    }
}

最後に、HierarchyのCreateからCreate EmptyでからのGameObjectを作成

作成したGameObjectのAdd Componentで先ほど作成した
SpatialUnserstandingTestとのスクリプトをアタッチ

SpatialUnserstandingTestのText MeshにNew Textを設定

これでUnityを実行、マウスでぐりぐり視線を動かすとこんな感じで
Testに空間の情報が表示されます。

それでは、SpatialMappingとSpatialUnserstandingとの相違点は何かといことですが
僕の理解では下記の点かとおもいます。(間違っていた場合はご指摘ください。)

*メッシュの形状が異なる
   これは一目瞭然なのですが、SpatialMappingは、かなり、
    ガタガタなメッシュが表示されるのに対し
 SpatialUnserstandingは場所によっては、
    とても綺麗なグリッド状のメッシュが表示されます。

*メッシュの構築プロセスが異なる
    これは文章で説明するとわかりにくいのですが、SpatialMappingは実行して
    時間がたてば行動しなくてもメッシュの情報が構築されていきます。
     SpatialUnserstandingは動画で示した通り、実行しただけでは、
     少ししかメッシュが表示されず
     積極的に視線を動かしていくことでメッシュの情報が構築されていきます。

*SpatialUnserstandingは直接、空間内の情報(天井、壁、床)を判別できる。
     SpatialMappingはSurfaceMeshesToPlanes.csのMakePlanesメソッドを実行し
     SurfacePlaneオブジェクトを生成しないと空間内の天井、壁、床を判別できませんが
     SpatialUnserstandingは視線の先の情報を直接判別することができます。

*空間内で判別できる情報がSpatialUnserstandingの方が多い
     SpatialMappingは、SurfacePlane.csにPlaneTypesのenumで定義されている
     Wall、Floor、Ceiling、Table、Unknownの5種類しか判別できないのに対し
     SpatialUnserstandingは、SpatialUnderstandingDll.csの
     内部クラスRaycastResultのSurfaceTypesのenumで定義されている
     Invalid、Other、Floor、FloorLike、Platform、Ceiling、WallExternal、WallLikeの8種類です

*SpatialUnserstandingでは定義以外の空間内情報を独自定義することができる
     MicrosoftのSpatialUnserstanding公式のサンプルでは
  ChairやCouch(ソファーのような長椅子)を独自定義し利用しています。

*SpatialUnserstandingでは空間内にオブジェクトを生成する便利関数が存在する
     HoloToolkit > SpatialMapping > Script内に
 SpatialUnderstandingDllObjectPlacement.csのスクリプトが用意されていて
     Create_OnFloor、Create_OnWall、Create_OnCeilingという、
     いかにもオブジェクトの生成を助けるような便利関数が存在しています。

これらを見ていくと、今回おこなった空間検知、空間内の情報の判別を行った後
最後のお便利関数を利用してオブジェクトを配置してくといった
処理の流れになるかと思います。

SpatialUnderstandingは、やはりコードも長く複雑な印象が強く
苦手意識が強くなりますが、今回くらいの内容であれば
意外と怖くないかも?っておもってくれる開発者が多くなるといいなぁと考えています。

SpatialUnderstandingは情報も少なかったので
個人的に参考にした記事のリンクも張っておきます

Indubitable Development
HoloLens Tutorial – Spatial Understanding

El Bruno
#Hololens – Spatial Understanding vs Spatial Mapping, and a step-by-step on how to use it

Mike Taulty
Hitchhiking the HoloToolkit-Unity, Leg 14–More with Spatial Understanding
https://mtaulty.com/2017/05/03/hitchhiking-the-holotoolkit-unity-leg-14-more-with-spatial-understanding/

2017年5月1日月曜日

とりあえずつかってみた、次世代ゲームエンジン Xenko プロジェクトの作成からRigdbodyでSphereを落とすまで

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

最近UnityやHoloLensに関してまったく進捗があがらないまま
時間のみ過ぎていき、焦りと無力さばかりがつのる悶々とした日々

ゴールデンウイークはエンジニアの新技術研究期間?みたいなノリがあるので
今回、気晴らしもかねて次世代ゲームエンジンとされるXenkoをつかってみました。

Xenkoは2017/04/25にリリースされたばかりの新しいゲームエンジンで
シリコンスタジオという会社が開発、リリースを行っています。

特徴は、なっといっても、XenkoそのものがGitLabでオープンソースで開発されている事
そして、エンジン部分がC#で実装されてることかと思います。
ここら辺が「次世代」と言われているのかなって個人的には思います。

さっそく使ってみたので、プロジェクトの作成から、
RigdbodyでSphereを落とすまでをみていきたいと思います。

本来なら、インストールとかもやるべきかなぁと思ったりしたのですが、
それは、ほかの誰かが必ずやるだろうと思うので省略します。(*^^*)

勘違いしていたのですが、Xenkoそのものは、
setup.exeでWindows用しか公式には提供されていません。
現状はMacでは動かせないようです。

ちなみに、僕が普段使っているWindowsマシーンは
第四世代Intel Core i5、メモリ8G
Windowsは、64bitのWindows 10 Proです。
そちらでは、とくにインストールにはまることもありませんでした。

Xenkoをインストールするとlauncherが出てきますのでそちらをクリック
launcherが起動したらStartをクリック
Project Selectionの画面でNew ProjectのNew Gameを選択
(今回は保存場所とプロジェクト名はデフォルトのままですが
こちらは自由に変更しても問題ありません。)
プロジェクトのターゲットはWindows、Linx、UWP、Android、iOSとなっています。
Unityと違って、Web PlayerとかWebGLのサポートは現在のところ全くありません。

今回はとりあえずWindowsのみを選択しOKをおしました。
起動すると、こんな感じの画面で、メニュー等は
日本語化されていてなんだか安心感がありますw



すでにGroundのPlaneとSphereがデフォルト表示されています。
XenkoのページにXenko for Unityという
Unityとの比較がのっていて、各種のビューの名前がのっていますので
今回は、説明を割愛します。(;^_^A

Asset EditorのSphereを選択すると、Grid Propertyが
Sphereのプロパティに切り替わります。
Add Componentボタンありますのでそちらをクリック
つづいてRigdbodyを選択
そうすると、SphereのPrpoerty GridにRigdbodyのコンポーネントが追加されています。
オブジェクトに対してコンポーネントを追加していくのは、かなりUnityと似ていますね。

SphereのRigdbodyのコンポーネントのGravityをみると
なぜかX,Y,Zが指定できるようになっています。。
とりあえず、そのまま実行してみたところ。。なにも起きませんでした。
よくみると without any collider shapeというエラーがでていました。
これはRigdbodyのコンポーネントだけではなく
Colliderのコンポーネントを追加しないとダメなようです

SphereのRigdbodyのコンポーネントPrpoerty Gridの一番下に
Collider Shapesというプラスボタンがあり、そちらのプラスボタンをおすと
色々なColliderが選択できます。今回はSphereを選択しました
ここで気を取り直して、再びアプリを実行。。
動画が見にくくて申し訳ないのですが、
Unityのようにゲームビューで実行されず、
いったんWindowsのアプリとして別のWindowが起動します。
これは、少し不便ですね。。

あと、特にGravityのx,y,zの値は入れなくても下に落ちましたし
逆にxに値をいれてみても、実行結果に変化はありませんでした。

3Dのモデルはデフォルトでは、
ToursやTeapodなどUnityにはないものが用意されています。


おそらく、Asset Storeでの資産が大きく、すぐにUnityから乗り換えて
実務でガッツリ使うぜってノリで使えなかと思いますが
今回のように、とりあえず、試すには面白いツールかと思いました。

まだまだ今後の進化に期待ってところも多いですが
新しいツールの登場により、開発者の選択肢が広がるのは良いですね。
今後触り続けるかは、僕的にも少し微妙かな。。
ゴールデンウイークは時間が許す限りお遊びしてみます。(;^_^A


2017年3月20日月曜日

HoloLensの開発効率化 ノーコーディングでオブジェクトにマーカーをつける方法

お疲れ様です。ZuQ9->Nnです。 
HoloLensは、とても視野が狭く、
ホロがどうしても、視界の外に出てしまいます。

そこで、オブジェクトにマーカーをつけて
視界を誘導してあげたい場合があります。
こちらもHoloToolkit-Unityにすでに用意されています。

一番簡単なものは、HoloToolkit > Utilities > Prefabsの中にある
HeadsUpDirectionIndicator.prefabを利用する方法です。

こちらも、いつものように手順をおっていきます。
まずは、HoloToolkit-Unityのインストールとプロジェクトの設定

最初にMain Cameraを選択、右クリックでメニューを表示しDelelteで削除します。
次に、HoloToolkit > Input> Prefabsの中にあるHoloLensCamera.prefabを
Hierarchyにドラッグアンドドロップで追加

次に、HoloToolkit > Input> Prefabsの中にあるInputManager.prefabを
Hierarchyにドラッグアンドドロップで追加
次に、HoloToolkit > Input> Prefabs > Cursorの中にあるBasicCursor.prefabを
Hierarchyにドラッグアンドドロップで追加
HierarchyからCreate > 3D Object > CubeでCubeを作成
Cubeの位置を見やすい位置に移動してください。(今回は x:0 y:0 z:7)
次に、HoloToolkit > Input> Utilities> Cursorの中にある
HeadsUpDirectionIndicator.prefabを
Hierarchyにドラッグアンドドロップで追加
HierarchyのHeadsUpDirectionIndicatorを選択し、Inspectorの
TargetにHierarchyのCubeをセット
なんと、作業はこれで完了、Unityを実行してみると、
こんな感じでオブジェクトに矢印が表示されます。
しかし、この方法では、問題がのこります。
そう、HeadsUpDirectionIndicatorのTargetには
1つのオブジェクトしかしていできません。

それでは、2つ以上のオブジェクトの場合の対応法をみていきましょう。
HeadsUpDirectionIndicatorを選択、右クリックでDeleteを選択し削除します。

HierarchyからCreate > 3D Object > SphereでSphereを作成
CubeとSphereの座標を見やすい位置に移動。(cubeは x:1 y:0 z:7、Sphere x:-1 y:0 z:7)

HierarchyからCreateを選択、InspectorのAdd ComponentでDirectionIndicator.csをアタッチ
アタッチされたDirectionIndicatorのCursorにHierarchyのBacicCursorをセット
HoloToolkit > Input> Utilities> PrefabsのHeadsUpDirectionIndicatorPointer.prefab
DirectionIndicatorのCursor Indicator Objectにセット
HierarchyのSphereも同じ手順で、同じ設定を行ってください。
これでUnityを実行してみると、こんな感じで、
オブジェクト一つ、一つに対してマーカーがつき矢印もオブジェクトの方向に向きます。。
ただ、見ていただいてもわかるように、矢印がかなり、大きく不格好です。
また、オリジナルのマーカーを表示したいという欲求もうまれてきます。
なので、次に、マーカーを変更してみることにします。
まずは、お好きな画像を用意。

ここでの説明は、僕がかなり適当に作った arrow.png、star.pngを使って説明します。
まずは、この画像をUnityのProjectに追加、
HierarchyからCreate > 3D Object >  QuadでQuadを作成
Quadを選択し、Projectに追加したarrow.pngをドラッグアンドドロップで追加
QuadをArrowに名前を変更後、HierarchyからProjectにドラッグアンドドロップでPrefabに
HierarchyのArrowは削除してください。
HierarchyのCubeを選択、InspectorのDirectionIndicator
Cursor Indicator ObjectにPrefab化したArrowをセット

同じ手順でStar.pngをQuadに追加、StarのPrefabを作成
SphereのDirectionIndicatorほうにはCursor Indicator ObjectにPrefab化したStarをセット
これでUnityを実行すると、こんな感じでです。

画像があまりに適当すぎて、わかりずらいのですが (;^_^A アセアセ・・・
Cube、Sphereにそれぞれ、独自のマーカーが適用され
それぞれのオブジェクト方向に向きます。

マーカーが青色に変わるのは、DirectionIndicator.csの
DirectionIndicatorColorが適用されているためでこちらの色はInspectorで変更可能です。

HoloToolkit > Utilities > Tests > Scenesに
HeadsUpDirectionIndicator.unityというサンプルがあり、
こちらは、HeadsUpDirectionIndicator.csを利用しています。

HeadsUpDirectionIndicator.csは、HeadsUpDirectionIndicator.prefabにも
利用されているスクリプトでDirectionIndicator.csとの違いは
HeadsUpDirectionIndicator.csのTargetに対してオブジェクトをアタッチします

こちらの手法でも、もちろん今回のようなサンプルでは大丈夫かと思いますが、
動的にコードでオブジェクトをInstantiateする場合は
オブジェクトに対してDirectionIndicator.csをアタッチし、
それをPrefab化したものをInstantiateする方法が適していると思います。