【Unity / PlayMaker入門】よく使われる変数の基礎から応用まで vector型編

PlayMakerを使うとよく「Vector」というワードが出てきます。

これはPlayMakerで用いられる変数の型の一つで、PlayMakerを使う上で非常に重要なものです。

本記事ではそのvector型の変数について、実際にどのように応用されるかを紹介します。

また、本記事は以下の記事の続きになっています。

上の記事では変数についてを基礎から説明しているので、変数を使うのが初めての方は上の記事を先に読むことをお勧めします。

サンプルシーン

本記事を読めばPlayMakerを使って以下のようなシーンを制作することができます。

赤いCubeと動きや向きや形が連動するスケールが5倍の青いCube

赤いCubeと動きや向きや形が連動するスケールが5倍の青いCube


赤いCubeと動きや向きや形が連動するスケールが5倍の青いCube

赤いCubeと動きや向きや形が連動するスケールが5倍の青いCube

事前準備

UnityのプラグインであるPlayMakerをあらかじめインストールしておきましょう。

はじめてPlayMakerを使用するひとは、あらかじめ以下の記事を一読することで、理解を深めることができます。

Vector編

Vectorとは

Vectorとは座標や方向や角度などを値として一つだけ保持することができる変数の型で、その値はよくベクトルと呼ばれます。

Unityにおいて座標や方向や角度などのさまざまな要素がX成分、Y成分、Z成分に分けて扱われます。

座標や方向や角度はX成分、Y成分、Z成分に分けて扱われる

さまざまな要素がX成分、Y成分、Z成分に分けて扱われる

それら一つ一つをfloat型の変数で管理するのは大変ですが、Vector型の変数を使えばそれらをまとめて管理することができます。

Vector型の変数のイメージ図

Vector型の変数のイメージ図

そして、PlayMakerで扱えるVectorにはVector2とVector3があります。

Vector2にはX成分、Y成分を含む2次元の値を代入できます。

Vector3にはX成分、Y成分、Z成分を含む3次元の値を代入できます。

Vector2・Vector3のイメージ図

Vector2・Vector3のイメージ図

また、Vector型の変数の初期値はすべての成分が0になっています。 

VectorのAction

PlayMakerのvector型を使うActionの中でも特に重要なものを紹介します。

基本的な使い方は同じなので、Vector3用のActionをもとに説明します。

Set Vector3 XYZ

Set Vector3 XYZ

Set Vector3 XYZ

このアクションはVector3型の変数に値を代入することができます。

①代入先の変数を選択できます。

②代入する値をVector3型の変数で選択できます。

③代入する値のX成分を入力できます。
また、入力欄の右のイコールを押すことで値に変数を選択することもできます。

④代入する値のY成分を入力できます。
また、入力欄の右のイコールを押すことで値に変数を選択することもできます。

⑤代入する値のZ成分を入力できます。
また、入力欄の右のイコールを押すことで値に変数を選択することもできます。

⑥チェックを入れると、このStateにとどまっている間に、毎フレームこのActionが実行されます。

また、代入される値は③、④、⑤の値が優先され、③、④、⑤でNoneに設定されている箇所の値に②の値が代入されます。

②にNoneが設定されている場合は、③、④、⑤でNoneに設定されている箇所には何も代入されません。

Get Vector3 XYZ

Get Vector3 XYZ

Get Vector3 XYZ

このアクションはVector3型の変数の値をX成分、Y成分、Z成分ごとにfloat型の変数に代入できます。

①代入する値をVector3型の変数で選択できます。

②X成分の代入先のfloat型の変数を選択できます。

③Y成分の代入先のfloat型の変数を選択できます。

④Z成分の代入先のfloat型の変数を選択できます。

⑤チェックを入れると、このStateにとどまっている間に、毎フレームこのActionが実行されます。

Vector3 Operator

Vector3 Operator

Vector3 Operator

このアクションはベクトル同士のさまざまな計算が行えます。

①計算に使われるベクトル(Vector1)を入力することができます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

②計算に使われるベクトル(Vector2)を入力することができます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

③Dot Product(内積)、Cross Product(外積)、Distance(距離)、Angle(角度)、Project(射影)、Reflect(反射)、Add(足し算)、Subtract(引き算)、Multiply(掛け算)、Divide(割り算)、Min(最小値)、Max(最大値)を選択できます。

※Add(足し算)、Subtract(引き算)、Multiply(掛け算)、Divide(割り算)、Min(最小値)、Max(最大値)はX成分、Y成分、Z成分ごとに分けて計算されます。

④計算の結果がVector3で返される場合での保存する先の変数(Vector3型)を選択できます。

⑤計算の結果がFloatで返される場合での保存する先の変数(Float型)を選択できます。

⑥チェックを入れると、このStateにとどまっている間に、毎フレームこのActionが実行されます。

Reflect(反射)

Vector2に垂直な平面でVector1を反射したベクトルを求めます。

Reflectのイメージ図

Reflectのイメージ図

※Reflectを行うときは長さが1のベクトルをVector2に入力してください。

Vector3 Multiply

Vector3 Multiply

Vector3 Multiply

このアクションは倍率を入力して、Vector3型の変数のベクトルの長さにその倍率をかけることができます。

①変数を選択できます。

②倍率を入力できます
また、入力欄の右のイコールを押すことで値に変数を選択することもできます。

③チェックを入れると、このStateにとどまっている間に、毎フレームこのActionが実行されます。

ベクトルの反転

マイナスの倍率を設定することで、ベクトルの方向を反転させることができます。

ベクトルの反転のイメージ図

ベクトルの反転のイメージ図

Vector3 Normalize

Vector3 Normalize

Vector3 Normalize

このアクションはVector3型の変数のベクトルの長さをおおよそ1にします。

①変数を選択できます。

②チェックを入れると、このStateにとどまっている間に、毎フレームこのActionが実行されます。

Vector3 Clamp Magnitude

Vector3 Clamp Magnitude

Vector3 Clamp Magnitude

このアクションはベクトルの長さの最大値を入力して、選択したVector3型の変数のベクトルの長さが最大値より大きい場合に、そのベクトルの長さを最大値に短縮して、Vector3型の変数のベクトルの長さが最大値以下になるように揃えます。

①変数を選択できます。

②ベクトルの長さの最大値を入力できます。
また、入力欄の右のイコールを押すことで値に変数を選択することもできます。

③チェックを入れると、このStateにとどまっている間に、毎フレームこのActionが実行されます。

Select Ramdom Vector3

Select Random Vector3

Select Random Vector3

このアクションは自分で設定したいくつかのベクトルからランダムに選ばれた一つのベクトルを変数に代入することができます。

①ベクトルの数を入力することができて、ここに入力した数に対応して②と③の組み合わせの数が決まります。

②ベクトルを入力できます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

③0~1でそのベクトルがランダムに選ばれる割合を入力できます。
また、入力欄の右のイコールを押すことで値に変数を選択することもできます。

④代入先の変数を選択できます。

Vector3 Lerp

Vector3 Lerp

Vector3 Lerp

このアクションは始点のベクトルと終点のベクトルを選択して、始点から終点にどれだけ近いかを0~1の値で入力することで、始点と終点を端点にもつ線分上の点のベクトルをとることができます。

実際の動作

実際の動作

①始点のベクトルを入力できます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

②終点のベクトルを入力できます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

③始点から終点にどれだけ近いかを0~1の値で入力できます。
また、入力欄の右のイコールを押すことで値にFloat型の変数を選択することもできます。

④ベクトルを代入する変数を選択できます。

⑤チェックを入れると、このStateにとどまっている間に、毎フレームこのActionが実行されます。

Vector3 Interpolate

Vector3 Interpolate

Vector3 Interpolate

このアクションは時間をかけてFrom VectorのベクトルからTo Vectorのベクトルまでの線分上を推移するベクトルをVector3型の変数に代入することができます。

①値が時間に対してどのように推移するかを、LinearまたはEase In Outで選択できます。
LinearとEase In Outの推移の違いは以下のようになります。

実際の動作

実際の動作

Linear:最初から最後まで同じ速さでベクトルが推移します。

Ease In Out:最初と最後のベクトルが推移する速さが遅くなります。

②推移前のベクトルを入力できます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

③推移後のベクトルを入力できます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

④どのくらいの時間をかけて値を推移させるか入力できます。
また、入力欄の右のイコールを押すことで値にFloat型の変数を選択することもできます。

⑤ベクトルを代入する変数を選択できます。

⑥このアクションが終わったときに発生させるイベントを選択できます。

⑦チェックを入れると推移する時間の長さがシーン内の時の流れ(TimeScale)に影響されなくなります。

Vector3 Rotate Towards

Vector3 Rotate Towards

Vector3 Rotate Towards

このアクションはCurrent DirectionのベクトルをTarget directionのベクトルに向かって回転させて、同時にCurrent Directionのベクトルの長さをTarget Directionと同じ長さになるように伸縮させます。

実際の動作

実際の動作

①Current Directionのベクトルを入力できます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

②Target directionのベクトルを入力できます。
また、入力欄の右のイコールを押すことでベクトルに変数を選択することもできます。

③回転のスピードを入力できます。
また、入力欄の右のイコールを押すことで値にFloat型の変数を選択することもできます。

④ベクトルの伸縮の速度の最大値を入力できます。
また、入力欄の右のイコールを押すことで値にFloat型の変数を選択することもできます。

Vectorの応用

Vector3型の変数を使うことで、int型の変数やfloat型の変数だけを使うよりも簡潔にギミックを作ることができます。

今回は応用として、赤いCubeと動きや向きや形が連動するスケールが5倍の青いCubeをVector3型の変数で作って、さらにそれと同じものをVector3型の変数なしで作って比較することで、Vector3型の変数がどれだけギミックを簡潔にしてくれるかを見てみたいと思います。

まずはCubeを二つ設置します。

Cubeを二つ設置する

Cubeを二つ設置する

さらに各Cubeにそれぞれ赤色のMaterial、青色のMaterialを適用します。

※赤いCubeを座標(0,0,0)に置いていると、ギミックを実際に動かしたときに青いCubeと重なって見づらくなってしまうので、赤いCubeの座標を(0,0,2)ぐらいにしておくことをおすすめします。

わかりやすいように二つのCubeの名前を「Red Cube」と「Blue Cube」に変更しました。

Cubeの名前を変更する

Cubeの名前を変更する

次にRed CubeにPlayMakerFSMを追加します。

Red CubeにPlayMakerFSMを追加

Red CubeにPlayMakerFSMを追加

Action Browserを開いて、State1に「Get Position」「Get Rotation」「Get Scale」を追加します。

State1に「Get Position」「Get Rotation」「Get Scale」を追加

State1に「Get Position」「Get Rotation」「Get Scale」を追加

Get Position、Get ScaleのVectorに新しい変数としてそれぞれPosVec、ScaVecを選択します。

Get RotationのEuler Anglesに新しい変数としてRotVecを選択します。

Get Position、Get Rotation、Get ScaleのEvery Frameにチェックを入れます。

Actionを編集する

Actionを編集する

Action Browserを開いて、State1に「Vector3 Multiply」を二つ追加します。

※Actionは上から順に実行されるので、「Get Position」「Get Rotation」「Get Scale」の下に二つの「Vector3 Multiply」が来るようにしてください。

State1に「Vector3 Multiply」を二つ追加

State1に「Vector3 Multiply」を二つ追加

2つのVector3 MultiplyのVector3 VariableにそれぞれPosVec、ScaVecを選択します。

2つのVector3 MultiplyのMultiply Byに5を入力して、Every Frameにチェックを入れます。

Actionを編集する

Actionを編集する

Action Browserを開いて、State1に「Set Position」「Set Rotation」「Set Scale」を追加します。

※Actionは上から順に実行されるので、二つの「Vector3 Multiply」の下に「Set Position」「Set Rotation」「Set Scale」が来るようにしてください。

「Set Position」「Set Rotation」「Set Scale」を追加

「Set Position」「Set Rotation」「Set Scale」を追加

Set Position、Set Rotation、Set ScaleのGame ObjectをすべてSpecify Game Objectに変更して、対象のオブジェクトにBlue Cubeを選択します。

Set Position、Set ScaleのVectorにそれぞれPosVec、ScaVecを選択します。

Set RotationのEuler AnglesにRotVecを選択します。

Set Position、Set Rotation、Set ScaleのEvery Frameにチェックを入れます。

Actionを編集する

Actionを編集する

※Actionの順番は最終的に以下の並びになるようにしてください。

Actionの順番

これで赤いCubeとスケールが5倍の青いCubeの動きや向きや形が連動するギミックが完成しました。

実際の動作

実際の動作


実際の動作

実際の動作

そして、このギミックをVector3型の変数有り無しで比較した場合の画像が以下です。

Vector3型の変数有り無しでのActionの数の比較

Vector3型の変数有り無しでのActionの数の比較


Vector3型の変数有り無しでの変数の数の比較

Vector3型の変数有り無しでの変数の数の比較

画像のようにVector3型の変数を使ったほうがActionや変数の数が少ないので見てわかりやすく、管理しやすいことがわかると思います。

どうしてもfloat型の変数のほうが直感的にわかりやすいので頼りがちになってしまいますが、作るギミックが複雑であればあるほどVector3型の変数を使えるかどうかが効率に大きく影響してくるので、ぜひ皆さんもVector3型の変数の活用に挑戦してみてください。

終わりに

本記事ではvector型の変数の基本と応用を説明しました。

今回紹介したように、PlayMakerを使えばUnityで使用するプログラミング言語(C#)を学習しなくても、Unityコンテンツを簡単に作成できます。

今回紹介した応用以外にも、PlayMakerで変数を使いこなせばさまざまなことを表現できるので、皆さんもぜひPlayMakerを使ったシーン制作に挑戦してみてください。

STYLYにアップロードする方法

3DモデルをSTYLYにアップロードしてみましょう。

STYLYアカウントを作成する

アカウント作成方法

STYLYにアップロードする方法

UnityからSTYLYにアップロードする方法

STYLYに関する質問、バグ報告、改善してほしい要望はSTYLY FORUMまで
https://jp.forum.styly.cc/support/discussions