HoloLensでのREPL開発を試してみる

コワーキングスペースHaLakeで開催しているLaketown.clj(Clojureもくもく会)を開催しました。
またニャンパスとして先月HoloLensを購入していましたので、HoloLensでClojureが動かないかなという好奇心を満たすため、HoloLens上で動くUnityアプリにArcadiaを導入してみたところ、ちょっと試した限りではREPLが動き、Clojureのコードを送り込むことが出来ましたのでその手順を記憶が新しいうちにまとめてみます。

Clojureもくもく会中、REPLから操作しているGameObject
この手順でやっていることは、HoloLensのHolographic Remotingアプリを使って、Windows機(Surface)からのUnityで繋いだ上で、そのWindows上でArcadiaを使ってREPLサーバを立て、そこにMacから(REPLクライアントとして)接続し、Unity上のGameObjectを操作するという方法です。
(Holographic Remotingを使わずに、UWPとして書き出してからのREPL接続までは試せていませんので、次に時間があるときに試してみます。)

  1. まずはHoloLensからのUnityアプリ開発環境を用意します。こちらの中村 薫さんの資料通りに設定しており、大変参考になります。
    Unityのプロジェクトを作成し、HoloLensへHolographic Remotingで簡単なGameObjectが表示されるところまで確認しておきます。
  2. 作成したプロジェクトのAssetへ、Arcadiaを導入します。

    cd <Unityプロジェクト>/Assets
    git clone https://github.com/arcadia-unity/Arcadia.git

    Unityを立ち上げるとAracadiaメニューが追加されていれば成功で、自動的にREPLサーバを起動してくれます。
  3. HoloLensからHolographic Remotingを起動、表示されるIPアドレスに対してUnityからのWindowメニューからHolographic Emulationから接続、UnityのPlayを押します。(このタイミングでREPLサーバが再起動されます。)
  4. Unityを動かしているWindowsマシンに対して、REPL接続を行います。(実際に試したのは同Windowsマシンからと、同じWifi上にあるMacからの接続です。 )
    接続を行うマシンにもArcadiaリポジトリをクローンしておき、ターミナル上からAssets/Arcadia/Editorディレクトリに移動してREPL接続を行います。

    ruby repl-client.rb <Unityの動いているマシンのIPアドレス>

    (Emacsからの接続も試しました。その方法はこちらです。)
  5. 接続後ようやくClojureのコードを送り込めます。
    予め作っておいたCubeという名前のGameObjectを回転させたり、サイズを変えたりするサンプルです。

    (ns clojureunity.core
      (:require [arcadia.core :refer [objects-named hook+]])
      (:import [UnityEngine Vector3]))

    (def cube (first (objects-named "Cube")))

    (set! (.localScale (.transform cube)) (Vector3. 0.5 0.5 0.5))

    (hook+ cube
           :update
           #(.. % transform (Rotate 0 1 0)))
少し試した程度ですが、HoloLensを通して浮かび上がる物体をREPL経由でダイナミックに操作できるというのは、かなりインパクトがありました。ぜひ実際に試し見てください!


コメント

人気の投稿