ども、ウラさんです。
HoloLensなんだから壁や床を利用したいよね?
って事で、空間認識ってか部屋認識をやってみましょ。
前回と同じでHoloToolkitを使って空間メッシュが表示されるまで作ります。
んで、空のゲームオブジェクトを追加。
自前のスクリプトとして
「MakePlanes.cs」
を作成&アタッチ。
HoloToolkitから
「SurfaceMeshesToPlanes.cs」
「RemoveSurfaceVertices.cs」
をアタッチ。
んで、MakePlanes.csを編集。
sing System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HoloToolkit.Unity.SpatialMapping;
using HoloToolkit.Unity.InputModule;
public class MakePlanes : MonoBehaviour, IInputClickHandler {
void Start () {
InputManager.Instance.PushFallbackInputHandler(gameObject);
SurfaceMeshesToPlanes.Instance.MakePlanesComplete += SurfaceMeshesToPlanes_MakePlanesComplete;
}
void Update () {
}
public void OnInputClicked(InputClickedEventData eventData)
{
SpatialMappingManager.Instance.StopObserver();
SurfaceMeshesToPlanes.Instance.MakePlanes();
}
private void SurfaceMeshesToPlanes_MakePlanesComplete(object source, System.EventArgs args)
{
RemoveSurfaceVertices.Instance.RemoveSurfaceVerticesWithinBounds(SurfaceMeshesToPlanes.Instance.
}
}
こんな感じ。
極力シンプルにしたのでNULLチェックとかしてないよ。
最初に気が済むまで空間をスキャンして、エアタップされたら「MakePlanes」を呼んでる。
これだけで壁、天井、床、テーブル、その他を認識してくれる。
ただ、白い壁しか無いので分かりづらいのでもうちょい手を入れてみる。
「SurfacePlane」Prefabで板を作ってるのでマテリアルをデフォルトから変更してあげる。
すげー分かりやすいマテリアル作ったった!
んで、「SurfaceMeshesToPlanes.cs」にセット。
実行すると
こんな感じで、分かりやすく壁と天井と床にポリゴン貼られる。
メッシュが邪魔なので
private void SurfaceMeshesToPlanes_MakePlanesComplete(object source, System.EventArgs args)
{
RemoveSurfaceVertices.Instance.RemoveSurfaceVerticesWithinBounds(SurfaceMeshesToPlanes.Instance.ActivePlanes);
SpatialMappingManager.Instance.DrawVisualMeshes = false;
}
こんな感じで消しちゃう。
綺麗になったっ!
って事で、動いてるのはこんな感じ。
天井にハリがあるので変な所をテーブルとして認識してたり、テーブルが床の下にあったりするようですが、まぁこんなもんですか?
今回も、HoloToolkitで簡単に空間認識が出来ました。
こーなると次は壁とか天井に何か置かないとですな。
さて、どうやって窓付けたりするのかしら?
調べましょ、調べましょ・・・
では、またっ!