ARあるある言いたい

VR・ARについて書いていきます

Klakを使いUnityのモーションをパッチプログラミングする

Klakとはなにか。引き継いだプロジェクトに入ってたんですが面白そうなので触ってみましょう。

github.com

まずここからダウンロード

Releases · keijiro/Klak · GitHub

Latest ReleaseのUnity 2018.3 updateからKlak.unitypackageをダウンロードしましょう。

Unityは2018.3.14fを使用。

何はともあれプロジェクトにインポート。中身はこんな感じです。

f:id:mojo_nobu:20191110221733p:plain
Klak

Motion

まずはMotionフォルダを見ていきます。Motion/Runtime以下にあるスクリプトを任意のオブジェクトにアタッチすると決められた動きをしてくれます。

SmoothFollow

f:id:mojo_nobu:20191111092018p:plain
smoothFollow

常にTargetに指定されたオブジェクトに向かっていきます。

f:id:mojo_nobu:20191111093409g:plain
smoothFollow

ConstantMotion

f:id:mojo_nobu:20191111093606p:plain
Constant Motion
指定した動きをし続けてくれます。画像の設定ではアタッチしたオブジェクトをスピード1でx軸に沿って移動させ続けてくれます。

f:id:mojo_nobu:20191111094849g:plain
Constant Motion

Cubeに設定した場合の動きです。プレイ中でも設定を変えると反映されます。

BrownianMotion

f:id:mojo_nobu:20191111095316p:plain
BrownianMotion

この設定にして動かすと、

f:id:mojo_nobu:20191111095614g:plain
Brownian Motion

えーっと、これはブラウン運動ってやつをしてくれてるみたいです。詳しくは

ブラウン運動 - Wikipedia

を参照で…

Patching

Klakを使えばUnity上でモーションのパッチプログラミングができます。

まず適当なオブジェクトにKlak/Wiring/Runtime/System/Patchをアタッチ。するとInspectorにOpen Patchのボタンが表示されるのでこれをクリック。

f:id:mojo_nobu:20191111102119p:plain
Patch

するとパッチプログラミングの画面が表示されます。ここで右クリックしてノード追加し、ノード同士をパッチでつなぎ、させたいモーションをプログラミングすることができます。

f:id:mojo_nobu:20191111102235p:plain
Patchプログラミング

基本的な流れとしてはInputから入ってくる値をパッチで変化させてOutputで指定したオブジェクトのパラメータを変えていくことができます。パッチは多数用意されていますが、ここではシンプルなものを流れに合わせて紹介します。

Patcherの作り方

まずPatcherウィンドウで右クリックして、Create/Input/Mouse Position Inputを選択してノードを作成します。続いてCreate/Conversion/From To Vector、Create/Output/Component/Transform Out作り、それぞれをパッチで結線します。

f:id:mojo_nobu:20191111104047p:plain
Patch1

次にFrom To Vectorを選択してInspectorで画像のように設定します。

f:id:mojo_nobu:20191111105059p:plain
From To Vector

これは入力(Mouse Positionのx軸の値)が変化すると、ここで設定したFromからToの値への各Vector値の変化が、続くノードに伝えられます。

次にTransform Outを選択してインスペクタで動かしたいオブジェクトをTarget Transformにアタッチします。

f:id:mojo_nobu:20191111105142p:plain
Transform Out

結果、こういう動きになります。(キャプチャの都合上見えないけどマウスのX軸の動きに連動)

f:id:mojo_nobu:20191111110032g:plain
Patcher1Movie


もう少し動かしてみましょう。次はConversion/Axis Rotationを使って次のように繋げます。

f:id:mojo_nobu:20191111110244p:plain
Patcher2

Inspectorの設定はこう。

f:id:mojo_nobu:20191111110406p:plain
Axis Rotation

動かすとこうなります。マウスのX軸の動きがCubeのX軸の動き、マウスのY軸の動きがCubeのY軸回転に対応するようになりました。

f:id:mojo_nobu:20191111110626g:plain
Patcher2Movie


大体こんな感じです。PatcherのInputにはゲームコントローラーやキーボードのキー入力なども用意されているので、それらを使ってインタラクションを使うのに便利そうです。Patcherのノードを作ったりの拡張もできるんだろうか?できそうな雰囲気。