【Unity / PlayMaker入門】変数とは?よく使われる変数の基礎から応用まで int・float型編

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

これは日本語では変数と呼ばれていて、PlayMakerを使う上で非常に重要なものです。

本記事ではPlayMakerを使うときに必要な変数のうちint型とfloat型について、実際にどのように応用されるかを紹介します。

サンプルシーン

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

箱の中に球が入った回数で動作が分岐するシーン

箱の中に球が入った回数で動作が分岐するシーン


オブジェクトが直線運動するシーン

オブジェクトが直線運動するシーン


オブジェクトが回転するシーン

オブジェクトが回転するシーン


オブジェクトが円運動するシーン

オブジェクトが円運動するシーン

事前準備

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

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

変数とは

変数とは、数字や文字などを保持することができる名前付きの箱のようなものです。

PlayMakerでは数字や文字などの保持が必要な状況が多々ありますが、そんな時に自分で変数として名前を付けることで、そこに数字や文字などを入れられます。

そして、変数の中に数字や文字などの値を入れることを代入といいます。

また、変数が保持できる値は一つだけなので、代入する際にすでに変数の中に値がある場合は、代入する値に上書きされます。

変数のイメージ図

変数のイメージ図

今回説明するintやfloatは変数の型の一つで、その型ごとに保持できる値や使い道が違います。

次項からはint型の変数とfloat型の変数の保持できる値や使い道についてを詳しく説明します。

int編

intとは

intとは-2147483648から2147483647までの整数を一つだけ保持することができる変数の型です。

int型の変数のイメージ図

int型の変数のイメージ図

後述の通り、float型での計算は必ずしも厳密ではなく誤差が生じることがありますが、int型同士の計算では厳密に値が求められます。

なので、厳密性が必要な計算を行うときはfloat型よりもint型のほうが適しています。

また、PlayMakerでのint型の変数の初期値は0です。

intのAction

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

Set Int Value

Set Int Value

Set Int Value

 

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

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

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

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

Int Operator

Int Operator

Int Operator

このアクションは整数同士の四則演算と最大値と最小値の答えをint型の変数に代入できます。

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

②計算に使われる整数を入力することができます。
また、入力欄の右のイコールを押すことで整数に変数を選択することもできます。
引き算、割り算の場合はInteger 2が引く数、割る数になります。

③Add(足し算)、Subtract(引き算)、Multiply(掛け算)、Divide(割り算)、Min(最小値)、Max(最大値)を選択できます。

④計算の結果を保存する変数を選択できます。

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

Int Clamp

Int Clamp

Int Clamp

このアクションは最小値と最大値を設定して、選択したint型の変数の値が最小値より小さい場合はその変数に最小値を代入して、選択したint型の変数の値が最大値より大きい場合はその変数に最大値を代入することで、変数の値を最小値以上かつ最大値以下の値にします。

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

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

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

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

Random Int

Random Int

Random Int

このアクションは最小値と最大値を設定して、最小値以上最大値未満のランダムな整数をint型の変数に代入します。

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

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

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

④チェックを入れるとランダムな整数に最大値が含まれるようになります。

⑤チェックを入れると、Random Intを繰り返したときに連続して同じ値が出ないようになります。

Int Changed

Int Changed

Int Changed

このアクションは選択したint型の変数の値が変動した時に、選択したイベントを発生させるか、選択したbool型の変数の値をTrueにすることができます。
※bool型とは、TrueかFalseの2類の値を取る型です。条件分岐をする場合などで活用します。

①変動が検知される変数を選択できます。

②選択した変数が変動した時に発生させるイベントを選択できます。

③選択した変数が変動した時に値をTrueにするbool型の変数を選択できます。

Int Compare

Int Compare

Int Compare

このアクションは整数二つ(Integer1, Integer2)を比較して、Integer1がInteger2と等しいとき、Integer1がInteger2より小さいとき、Integer1がInteger2より大きいとき、の三パターンそれぞれに発生するアクションを選択できます。

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

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

③Integer1がInteger2と等しいときに発生させるイベントを選択できます。

④Integer1がInteger2より小さいときに発生させるイベントを選択できます。

⑤Integer1がInteger2より大きいときに発生させるイベントを選択できます。

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

Int Switch

Int Switch

Int Switch

このアクションはint型の変数の値によって異なるイベントを発生させることができます。

①変数を選択できます。

②イベントを発生させる整数の数を入力できて、この値を大きくするとCompare IntとSend Eventの組み合わせの数が増えます。
上記の画像では数が1になっているのでCompare IntとSend Eventの組み合わせは一つですが、数を大きくすると下記の画像のように変化します。

Int Switch

Int Switch

③イベントが発生するときの整数を入力できます。

④どのイベントが発生するかを選択できます。

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

intの応用

int型の変数は、上記で説明したInt CompareやInt Switchを使って、数を条件に動作を分岐させることと非常に相性が良いです。

そこで今回は応用として、箱の中に球が入った回数を条件にInt Switchで動作が分岐するギミックを紹介します。

まずはCubeを複数個組み合わせて上面のない箱を作ります。

実際に作った箱 Hierarchy上ではbottomが底面で、side1~4が側面になっています。

実際に作った箱 Hierarchy上ではbottomが底面で、side1~4が側面になっています。

箱に収まるようにCubeを入れます。

箱に収まるようにCubeを入れる

箱に収まるようにCubeを入れる

今作ったCubeのMesh Rendererを無効化して、Box ColliderのIs Triggerにチェックを入れます。

Mesh Rendererを無効化して、Box ColliderのIs Triggerにチェックを入れる

Mesh Rendererを無効化して、Box ColliderのIs Triggerにチェックを入れる

作ったCubeにPlayMakerFSMを追加します。

PlayMakerFSMを追加する

PlayMakerFSMを追加する

Action Browserを開いて、State1に「Trigger Event」を追加します。

Actionを追加する方法

Actionを追加する方法

Tagを新しく作成して、Trigger EventのCollide Tagに選択します。

新しくTagを作成する方法

新しくTagを作成する方法


Trigger EventのCollide Tagに作ったTagを選択

Trigger EventのCollide Tagに作ったTagを選択

Trigger EventのSend Eventに新しいイベント「entry」を追加します。

State1のTransitionにentryを追加します。

新しいStateとしてState2を作成して、State1のentryからState2につなげます。

新しいStateとしてState2を作成して、State1のentryからState2につなげる

新しいStateとしてState2を作成して、State1のentryからState2につなげる

以上で、新しく作ったTagが設定されたオブジェクトがCubeに侵入すると、イベントのentryが発生するようになりました。

Tagが設定されたSphere

Tagが設定されたSphere


実際の動作

実際の動作

Action Browserを開いて、State2に「Int Operator」と「Int Switch」を追加します。

※Actionは上から実行されるので、Int OperatorがInt Switchの上にくるようにしてください。

Int OperatorのInteger1に新しい変数「counter」を選択して、Integer2に1を入力します。

Store Resultに変数counterを選択します。

Int Operatorを設定する

Int Operatorを設定する

次にInt SwitchのInt Variableに変数counterを選択して、Int Switchesに2を入力します。

一つ目のCompare Intには3を入力して、Send Eventに新しいイベント「3」を選択します。

二つ目のCompare Intには6を入力して、Send Eventに新しいイベント「6」を選択します。

Int Switchを設定する

Int Switchを設定する

State 2のTransitionに3と6を追加します。

新しいStateとしてState3とState4を作成して、State2の3からState3につなげて、State2の6からState4につなげます。

State2とState3とState4のTransitionにFinishedを追加して、すべてのFinishedからState1につなげます。

Transitionを設定する

Transitionを設定する

以上で球が箱に入った回数が変数counterに代入されるようになり、特定の回数(今回は3回目と6回目)で分岐が発生するようになりました。

実際の動作

実際の動作

次に分岐先で起こる部分を作ります。

Action Browserを開いて、State3に「Random Float」を三つと「Set Color RGBA」と「Set Material Color」を追加します。

※Actionは上から実行されるので、上からRandom Float、Set Color RGBA、Set Material Colorの順番になるようにしてください。

Random Floatは三つともMinに0、Maxに1を入力して、Store Resultにそれぞれ新しい変数「R」、「G」、「B」を選択します。

Random Floatを設定する

Random Floatを設定する

Set Color RGBAのColor Variableに新しい変数「RandomColor」を選択します。

Red、Green、Blueにはそれぞれ新しい変数「R」、「G」、「B」を選択します。

Alphaには0.5を入力します。

Set Color RGBAを設定する

Set Color RGBAを設定する

Projectウィンドウを右クリックしてCreate → Materialを選択します。

作ったMaterialのInspectorのRendering ModeをFadeに変更します。

Materialを作る

Materialを作る

作ったMaterialを箱に適用しておきます。

Materialをオブジェクトに適用する

Materialをオブジェクトに適用する

Set Material ColorのMaterialに作ったMaterialを選択します。

Set Material ColorのColorに変数RandomColorを選択します。

Set Material Colorを設定する

Set Material Colorを設定する

Action Browserを開いて、State4に「Activate Game Object」を追加します。

Activate Game ObjectのActivateのチェックを外します。

Activate Game ObjectのGame Objectに箱の底面を選択します。

Activate Game Objectの設定をする

Activate Game Objectの設定をする

これで箱に球が三つ入ったときに箱の色が半透明のランダムな色に変化するように、箱に球が六つ入ったときに箱の底が抜けるようになりました。

実際の動作

実際の動作

このようにint型の変数を使って数を条件に動作を分岐させれば、状況に応じてシーンに変化をもたらすことができます。

では次にfloat型の変数を使ってできることを見ていきましょう。

float編

floatとは

floatとは有効桁数7桁程度の精度で実数を一つだけ保存することができる変数の型です。かなり噛み砕いて言うと、小数などの整数以外の数字も含む型ということです。

float型の変数のイメージ図

float型の変数のイメージ図

int型と違って少数にも対応しているので、座標や角度などの値も入れることができます。

float型はPositionやRotationの値としてそのまま使用できるので、PlayMakerで非常に役に立ちます。

ただ、仕様上float型を使った計算は必ずしも厳密ではなく、誤差が生じることがあるので、厳密な計算が必要な場合はint型を使います。

また、PlayMakerでのfloat型の変数の初期値は0です。

floatのAction

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

Set Float Value

Set Float Value

Set Float Value

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

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

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

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

Float Operator

Float Operator

Float Operator

このアクションは実数同士の四則演算と最大値と最小値の答えをfloat型の変数に代入できます。

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

②計算に使われる実数を入力することができます。
また、入力欄の右のイコールを押すことで実数に変数を選択することもできます。
引き算、割り算の場合はFloat 2が引く数、割る数になります。

③Add(足し算)、Subtract(引き算)、Multiply(掛け算)、Divide(割り算)、Min(最小値)、Max(最大値)を選択できます。

④計算の結果を保存する変数を選択できます。

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

Float Abs

Float Abs

Float Abs

このアクションはfloat型の変数を選択して、選択した変数の値の絶対値を選択した変数に代入します。

①変数を選択できます。

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

Float Clamp

Float Clamp

Float Clamp

このアクションは最小値と最大値を設定して、選択したfloat型の変数が最小値より小さい場合はその変数に最小値を代入して、選択したfloat型の変数が最大値より大きい場合はその変数に最大値を代入することで、変数の値を最小値以上かつ最大値以下の値にします。

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

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

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

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

Random Float

Random Float

Random Float

このアクションは最小値と最大値を設定して、最小値以上最大値以下のランダムな実数をfloat型の変数に代入します。

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

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

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

Float Interpolate

Float Interpolate

Float Interpolate

このアクションは時間をかけてFrom Floatの値からTo Floatの値まで推移する値をfloat型の変数に代入することができます。

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

Float Interpolate

Float Interpolate

Linear:最初から最後まで同じ速度で値が推移します。

Ease In Out:最初と最後に値が推移する速さが遅くなります。

②推移前の値を入力できます。

③推移後の値を入力できます。

④どのくらいの時間をかけて値を推移させるか入力できます。

⑤値を代入する変数を選択できます。

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

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

Float Changed

Float Changed

Float Changed

このアクションは選択したfloat型の変数の値が変動した時に、選択したイベントを発生させるか、選択したbool型の変数の値をTrueにすることができます。

①変動が検知される変数を選択できます。

②選択した変数が変動した時に発生させるイベントを選択できます。

③選択した変数が変動した時に値をTrueにするbool型の変数を選択できます。

Float Compare

Float Compare

Float Compare

このアクションは実数二つ(Float1, Float2)を比較して、Float1がFloat2と誤差の範囲内で等しいとき、Float1がFloat2より小さいとき、Float1がFloat2より大きいとき、の三パターンそれぞれに発生するアクションを選択できます。

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

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

③Float1とFloat2を等しいと判定する際にどのくらいの誤差を許容するかを入力できます。

④Float1がFloat2と等しいときに発生させるイベントを選択できます。

⑤Float1がFloat2より小さいときに発生させるイベントを選択できます。

⑥Float1がFloat2より大きいときに発生させるイベントを選択できます。

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

Float Switch

Float Switch

Float Switch

このアクションはfloat型の変数の値によって異なるイベントを発生させることができます。

①変数を選択できます。

②イベントを発生させる値の範囲の数を入力できて、この値を大きくするとLess ThanとSend Eventの組み合わせの数が増えます。
上記の画像では数が1になっているのでLess ThanとSend Eventの組み合わせは一つですが、数を大きくすると下記の画像のように変化します。

Int Switch

Int Switch

③どの値未満の時に④のイベントが発生するか入力できます。

④どのイベントが発生するかを選択できます。

※Less ThanとSend Eventの組み合わせを複数個使いたい場合は、組み合わせが上にあるほど分岐の優先順位が高いので、Less Thanの値は上から昇順に並べてください。

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

Float Sign Test

Float Sign Test

Float Sign Test

このアクションは選択したfloat型の変数の値が正または0であるか、負であるかで異なるイベントを発生させることができます。

①変数を選択できます。

②変数の値が正または0であるときに発生するイベントを選択できます。

③変数の値が負であるときに発生するイベントを選択できます。

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

floatの応用

Float型の変数は少数をとれるので、PositionやRotationの値として使うことができます。

そこで、今回はfloat型の変数を使ってオブジェクトの座標や回転を連続的に動かすギミックを三つほど紹介します。

オブジェクトの直線運動

まずは動かしたいオブジェクトにPlayMakerFSMを追加します。

Action Browserを開いて、State1に「Get Position」と「Float Operator」と「Set Position」を追加します。

※Actionは上から実行されるので、上からGet Position、Float Operator、Set Positionの順に並べます。

Get PositionのXを新しい変数「PositionX」を選択します。

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

Get Positionの設定をする

Get Positionの設定をする

Float OperatorのFloat 1に変数PositionXを選択して、Float 2に0.01を入力します。

Float OperatorのStore Resultに変数PositionXを選択します。

Float OperatorのEvery Frameにチェックを入れます。

Float Operatorの設定をする

Float Operatorの設定をする

Set PositionのXに変数PositionXを選択します。

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

Set Positionの設定をする

Set Positionの設定をする

以上でオブジェクトが直線運動するようになりました。

実際の動作

実際の動作

オブジェクトの回転

まずは回転させたいオブジェクトにPlayMakerFSMを追加します。

Action Browserを開いて、State1に「Get Rotation」と「Float Operator」と「Set Rotation」を追加します。

※Actionは上から実行されるので、上からGet Rotation、Float Operator、Set Rotationの順に並べます。

Get RotationのYを新しい変数「AngleY」を選択します。

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

Get Rotationの設定をする

Get Rotationの設定をする

Float OperatorのFloat 1に変数AngleYを選択して、Float 2に1を入力します。

Float OperatorのStore Resultに変数AngleYを選択します。

Float OperatorのEvery Frameにチェックを入れます。

Float Operatorの設定をする

Float Operatorの設定をする

Set RotationのYに変数AngleYを選択します。

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

Set Rotationの設定をする

Set Rotationの設定をする

以上でオブジェクトが回転するようになりました。

実際の動作

実際の動作

オブジェクトの円運動

空のオブジェクトを作ります。

動かしたいオブジェクトを空のオブジェクトの子オブジェクトにします。

動かしたいオブジェクトのPositionのXに2を入力します。

動かしたいオブジェクトのPositionのXに2を入力する

動かしたいオブジェクトのPositionのXに2を入力する

前項「オブジェクトの回転」を空のオブジェクトに適用します。

空のオブジェクトを回転させる

空のオブジェクトを回転させる

以上でオブジェクトが円運動するようになりました。

実際の動作

実際の動作

これらの動きはシーン制作でもよく使われるので、ぜひ試しに作ってみてください。

終わりに

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

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

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

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

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

STYLYアカウントを作成する

アカウント作成方法

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

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

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