お疲れ様です。 ZuQ9->Nnです
2017/08/22(日) fastlane勉強会 vol4 が開催されたので参加しました。
場所は株式会社Origami さん
実はこの勉強会は何度お参加しているのですが
今回の目的は勉強会の参加ってよりも、自分の発表です。
発表内容はFabricでfastlaneを使ってみるというもの
前から気になっていたので今回、自分の勉強もかねて
どこまでこのツールが使えるかを検証したかったのでこのテーマを選びました。
発表が久しぶりすぎて緊張しすぎてしまい。かなりグダグダになってしまいましたね。
発表中もFabricとfastlaneの話がまじってしまい。
自分の中で混乱してしまう感じでした。
あと、自分の発表に集中しすぎて、他の方の発表を集中して聞けなかった。orz..
特にmatchあたりは、現状きちんと使えて無いので
もう一度資料だけでも読み直しておきます。
あーなんだか悔しぃ。。リベンジしてぇって感じ。
あと、もう少し余裕も欲しいですね。
懇親会も料理の写真撮っておけばよかった。ここに載せられたのに。。
また、宣言して自分を追い込むかなぁ。
最近こんな感じでしか行動できてないけど。。
また、その時の気分、ノリで決めたいと思います。
最後に、今回の発表の機会をいただけて大変ありがとうございました。
これを糧に次のステップに進めるように精進します。
2017年8月23日水曜日
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の中身はこんな感じ
作成した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は情報も少なかったので
個人的に参考にした記事のリンクも張っておきます
久しぶりの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を作成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;
}
}
}
作成した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
HoloLens Tutorial – Spatial Understanding
El Bruno
#Hololens – Spatial Understanding vs Spatial Mapping, and a step-by-step on how to use it
#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/
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を選択
(今回は保存場所とプロジェクト名はデフォルトのままですが
こちらは自由に変更しても問題ありません。)
すでにGroundのPlaneとSphereがデフォルト表示されています。
XenkoのページにXenko for Unityという
Unityとの比較がのっていて、各種のビューの名前がのっていますので
今回は、説明を割愛します。(;^_^A
Asset EditorのSphereを選択すると、Grid Propertyが
Sphereのプロパティに切り替わります。
Add Componentボタンありますのでそちらをクリック
つづいてRigdbodyを選択
動画が見にくくて申し訳ないのですが、
Unityのようにゲームビューで実行されず、
いったんWindowsのアプリとして別のWindowが起動します。
これは、少し不便ですね。。
あと、特にGravityのx,y,zの値は入れなくても下に落ちましたし
逆にxに値をいれてみても、実行結果に変化はありませんでした。
3Dのモデルはデフォルトでは、
ToursやTeapodなどUnityにはないものが用意されています。
おそらく、Asset Storeでの資産が大きく、すぐにUnityから乗り換えて
実務でガッツリ使うぜってノリで使えなかと思いますが
今回のように、とりあえず、試すには面白いツールかと思いました。
まだまだ今後の進化に期待ってところも多いですが
新しいツールの登場により、開発者の選択肢が広がるのは良いですね。
今後触り続けるかは、僕的にも少し微妙かな。。
ゴールデンウイークは時間が許す限りお遊びしてみます。(;^_^A
最近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
XenkoのページにXenko for Unityという
Unityとの比較がのっていて、各種のビューの名前がのっていますので
今回は、説明を割愛します。(;^_^A
Asset EditorのSphereを選択すると、Grid Propertyが
Sphereのプロパティに切り替わります。
Add Componentボタンありますのでそちらをクリック
そうすると、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にはないものが用意されています。
実務でガッツリ使うぜってノリで使えなかと思いますが
今回のように、とりあえず、試すには面白いツールかと思いました。
まだまだ今後の進化に期待ってところも多いですが
新しいツールの登場により、開発者の選択肢が広がるのは良いですね。
今後触り続けるかは、僕的にも少し微妙かな。。
ゴールデンウイークは時間が許す限りお遊びしてみます。(;^_^A
2017年3月20日月曜日
HoloLensの開発効率化 ノーコーディングでオブジェクトにマーカーをつける方法
お疲れ様です。ZuQ9->Nnです。
HoloLensは、とても視野が狭く、
ホロがどうしても、視界の外に出てしまいます。
そこで、オブジェクトにマーカーをつけて
視界を誘導してあげたい場合があります。
こちらもHoloToolkit-Unityにすでに用意されています。
一番簡単なものは、HoloToolkit > Utilities > Prefabsの中にある
HeadsUpDirectionIndicator.prefabを利用する方法です。
こちらも、いつものように手順をおっていきます。
まずは、HoloToolkit-Unityのインストールとプロジェクトの設定
最初にMain Cameraを選択、右クリックでメニューを表示しDelelteで削除します。
同じ手順で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する方法が適していると思います。
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を
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に追加、
Quadを選択し、Projectに追加したarrow.pngをドラッグアンドドロップで追加
QuadをArrowに名前を変更後、HierarchyからProjectにドラッグアンドドロップでPrefabに
HierarchyのArrowは削除してください。
HierarchyのCubeを選択、InspectorのDirectionIndicator
SphereのDirectionIndicatorほうにはCursor Indicator ObjectにPrefab化したStarをセット
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する方法が適していると思います。
登録:
投稿 (Atom)



















































