カルバンスブログ

Unityでのゲーム制作全般(イラスト・BGMは除く)をやってます。イベント参加・運営について書くかも?

HoloLensの開発を始めてみた 琉大情報工学科(知能情報コース) Advent Calendar 2018 12日目

この記事は琉大情報工学科(知能情報コース) Advent Calendar 2018の12日目の記事です。

ブログ作って2つ記事投稿して見たものの、やるやる詐欺で結局ブログやらないのよくないですよね... (目標を高く設定しすぎたとも言う)

さて、気を取り直して本題に入っていきましょう!


HoloLensを買ってみた

と言うわけで、この夏HoloLensを買いました。 ゚+.(・∀・).+゚ お値段なんと33万です!(開発用のデスクトップも購入したので45万ぐらいかかった)

f:id:riono210:20181212233121p:plain

見てくださいよ!この近未来的でクールなデザインを!! HoloLensはAR(もしくはMR)デバイスです。壁や天井、机、椅子などの現実にある物体を認識して同期することで、よりリアリティのあるAR体験ができます。(例えば、AR上でボールを投げたとすると、実際に壁がある位置で跳ね返るなどです) 電脳コイルの時代も近づいてきましたね!

HoloLensの他の機能としては、

  • 見つめることで物体を操作するGaze
  • 指の動作を取得しHoloLensを操作できるGesture
  • 音声コマンドを利用できるVoice
  • 現実空間にあるものを赤外線で取得し壁や天井などの物体をHoloLen上で同期するSpatial mapping

などここでは説明しきれないほど多くの機能が搭載されています! 詳しくはHoloLensのチュートリアルを流し読みするといいかもしれません。

そして、買ったからには何か作らないといけませんね!


ゲームを作ってみた

上で紹介したようにHoloLensには様々な機能があります。そこでHoloLensで開発するにあたって、基本的な開発手法を学ぶ目的で簡単なゲームを作って見ました。

f:id:riono210:20181212233328p:plain

ずばりタイトルは、「Shot Ball」です!なんて安直な...

AR空間上に現れたShot Target(ゴミ箱ともいう)に向けて、指を使ったクリック動作でボールを投げ入れるゲームです。

HoloLensは高価ですから、触ったことがある人は少ないと思います。そこで説明すると、HoloLensを利用するにしろ開発するにしろ、最も大切なことはクリックになります。

普通マウスやトラックパットを使えるPCとは異なり、HoloLensは指を使ったジェスチャによりクリックや、ホームに戻るなどといった操作が可能になります。 一応Bluetoothを使ってマウス接続できますがそんなのはナンセンス!

と言うわけでクリック動作の実装を第一に開発していきました!!


調べてみた

とはいえチュートリアルは少し触ったものの、何をどうしていいかさっぱりわかりません。ここはHoloLensがクリック動作を認識したときに、どの関数を呼び出すかを調べるべきでしょう。ちなみに環境構築はHoloToolkit-UnityというMicrosoftが出しているアセットにて完了済みです。

5分くらい調べていると、見つけました。

qiita.com

ふむふむ、なるほど。つまりIInputClickHandlerというインターフェースとそのイベントを実装すれば、クリックした時の処理が行えると。

以下が実装したコードになります!

using HoloToolkit.Unity.InputModule;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Click : MonoBehaviour, IInputClickHandler{

    public GameObject throwBall;
    public GameObject ballParent;
    public GameObject camera;


    public void OnInputClicked(InputClickedEventData eventData)
    {
        Debug.Log("クリック");
        Vector3 ballParentPos = ballParent.transform.position;

        //  インスタンス生成
        var ball = Instantiate(throwBall, ballParentPos, Quaternion.identity);

        ball.GetComponent<Rigidbody>().AddForce(camera.transform.forward * 150 + camera.transform.up * 50);
    }
}

ちょこっと解説をします。

まず

using HoloToolkit.Unity.InputModule;

をしないとIInputClickHandlerを実装できないので注意。必須です。
クリックした時に呼ばれる関数は、

 public void OnInputClicked(InputClickedEventData eventData){}

なので後はその中にやりたい処理を書けば完璧です!OnClick同じですね。 OnInputClickedの中身はcamera、つまりHoloLensの向いている方向(camera = HoloLens)の前にボールを生成して飛ばすというようなコードです。

Unity上でやってみるとこんな感じ。

f:id:riono210:20181212233549g:plain

実機でやるとなぜかパーティクルが発生せず寂しい雰囲気になってしまいました。

感想を述べてみた

今回簡単なHoloLensのゲームを作ってみて、調べて行くうちに、意外とHoloLensに関する情報が多いなと感じました。チュートリアルにして見ても、実機ビルドの方法にして見てもきちんと日本語訳や丁寧な解説が載っていたりと、情報にあまり苦労したイメージはありませんでした。

この調子でHoloLensを触っていきたいですね! まずはチュートリアルの制覇から...!!

明日(と言ってものこり20分)の担当はmayutsunaさんです。