MRが楽しい

MRやVRについて学習したことを書き残す

Unity Learnのビジュアルスクリプティング学習を試す その8(ビジュアルスクリプトを使ってVector3を用いた位置変更を行う)

本日はUnityの技術調査枠です。
Unity Learnのビジュアルスクリプティング学習を試した内容を記事にします。
今回はビジュアルスクリプトを使った基本プログラムの続きを試します。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

キー入力による分岐を増やす

前回作成したスクリプトを改修して、Wキーが押下されているタイミングではCubeを上昇させるようにしていきます。

初めにWキーが押下されているかどうかを判定するフローを追加します。
IfノードのFalseの出力ポートから先にGet KeyノードとIfノードを接続して追加します。

Get Keyノードの[Key]欄は W を設定します。
これでSpaceキーが押下されていない場合はWキーが押下されているかどうかの判定を行います。

位置変更の変数を作成する

次に位置変更の量を記録するGraph変数を作成します。
[Blackboard -> Graph]パネルから ChangePos という名前を入力して[+]ボタンで変数を作成します。

[Type]を[Vector3]、[Value]を[0,0,0]に設定します。
本変数にはCubeを現在の位置から移動させる相対的な移動距離を格納します。

移動距離を計算する

移動距離を計算するフローを作成します。
Graphウィンドウの何もないところを右クリックしてVector 3: Get Upノードを検索して追加します。

Vector 3: Get Upノードは X:0 Y:1 Z:0 の値を返します。
これはVector3.upと同じ値で上方向のベクトルを示します。
docs.unity3d.com

これをそのまま移動距離とすると単位が1mとなって値が非常に大きいので、0.01を乗算して1cmの移動距離に演算します。
Graphウィンドウの何もないところを右クリックしてFloat Literalノードを検索して追加します。

Float LiteralノードはFloat型の任意の値を出力できます。今回は0.01を設定します。
更に乗算を行うためのMultiply (in Math/Generic)ノードも追加して検索して追加します。

追加したノードを以下のように接続してGet Upノードの値を0.01で乗算します。

計算した値をChangePos変数に設定するため、Set Graph Variableノードを追加して接続します。
Set VariableノードにChangePosの参照を設定すれば計算した移動距離が反映されるようになります。

Wキー押下時にCubeオブジェクトを上昇させる

移動距離を計算する実行タイミングを指定するため、Wキーの判定を行うIfノードのTrue出力ポートからSet Variableノードにトリガーを接続します。
これでWキーが押下されたタイミングでChangePosの値が計算されるようになりました。

更に計算した値を使ってCubeオブジェクトを実際に移動させる必要があります。
Transform: Translate (Translation, Relative To)ノードを検索して追加します。

Translateノードは指定のVector3の値でオブジェクトを移動します。
Set Variableノードのトリガーと値の出力ポートをTranslateノードの入力ポートに接続すれば、ChangePosの値の分だけオブジェクトが移動するようになります。

最終的に完成したGraphは以下のようになります。

動作を確認する

シーンの再生ボタンを押して動作を確認します。
何もしない状態ではCubeオブジェクトは移動しません。

Wキーを押下するとCubeが上昇したら成功です。Wキーから手を離すと停止します。

次回はビジュアルスクリプトを使ってSwitchを用いた制御を試します。
bluebirdofoz.hatenablog.com