【Unity】ゼロからわかるPlaymaker「超」入門 基礎知識

STYLYではPlaymakerというビジュアルスクリプティングツールが使用できます。

プレイヤーの動作に応えて変化する空間といった、複雑な作品の投稿を考えたときに役立つツールです。

STYLY MAGAZINEでは、既にいくつもの紹介記事が書かれていますが、今回は初めてPlaymakerを使う方を想定し、そもそもPlaymakerとは何なのかということについてまとめました。Playmakerの基本となる考え方を知り、これからPlaymakerを使う際の参考になれば幸いです。

 

Playmaker Core Concepts

Playmaker Core Concepts

 

Playmakerの基本概念

Playmakerの根幹は、個々のゲームオブジェクトに対してFinite State Machine (FSM)と呼ばれるモデルを組み立てるところにあります。FSMとは、複雑なふるまいを個々の状態に分解して捉えるもので、PlaymakerはFSMによってUnityを操作するツールともいえるでしょう(→Playmaker Core Concepts)。

これだけだと抽象的でわかりにくいと思うので、まずは具体例で考えてみます。

FSMとは何か

たとえば、家電の電源ボタンです。同じ「ボタンを押す」という動作でも、家電の応答(onになるか/offになるか)は場合によって異なります。

これを下図のように整理します。

 

スイッチのon/off切り替え(FSM)

スイッチのon/off切り替え(FSM)

 

onという「状態」でボタンを押すという「イベント」が発生すると、offという状態へ「遷移」します。逆に、offという「状態」でボタンを押すという「イベント」が発生すると、onという状態へ「遷移」します。

このような具体例を念頭に置いて、先ほどのFSMの説明を読み返すとわかりやすいのではないでしょうか。いくつかの(有限個の)「状態」と「イベント」「遷移」の組み合わせによって複雑なふるまいを記述するモデルとしてFSMを考えることができます。

これを踏まえて、実際のPlaymaker Editorも見てみましょう。

 

unity-chanゲームオブジェクトのFSM例

unity-chanゲームオブジェクトのFSM例

 

これはunity-chanが、Walkingという「状態」でCOLLISION ENTERという「イベント」が発生するとIdleという状態へ「遷移」するということを意味しています。

Playmakerは、この組み合わせをいくつも繋ぎ合わせることでゲームオブジェクトを操作します。次節では、Playmakerに則して、より詳細に見ていきます。

 

重要な3つの要素

前節ではFSMに触れながら、Playmakerの基本概念として「状態」「イベント」「遷移」の組み合わせがあるとまとめました。次は具体的に、その3つの要素について順番に触れていきます。

 

PlaymakerにおけるFSMの表示例「状態」「イベント」「遷移」

PlaymakerにおけるFSMの表示例「状態」「イベント」「遷移」

 

State:状態

上図の”Walking”, “Idle”, “Jump”がStateにあたります。複数のStateが同時にアクティブになることはなく、その時その時で1つのStateのみがアクティブになります。

そしてStateの中身となるのが、Actionです。

各々のStateがActionを持ち、Stateがアクティブになった時、Actionを実行します。

 

Actionの例:"Walking"Stateに"Animator Play"というActionを付与

Actionの例:”Walking”Stateに”Animator Play”というActionを付与

 

上図は、ゲームオブジェクト”unity-chan”に対してPlaymakerでFSMを作成している例で、”Walking”というStateに、”Animator Play”というActionが与えられています(赤枠)。このFSMが起動したとき、Start Event(後述)で”Walking”がアクティブになり、”Animator Play”が実行されるという流れです。

Playmakerには数多くのActionが用意されており、たとえばアニメーションを再生する、オブジェクトをターゲットに向けて移動させる、当たり判定を取る、といったActionがあります。こうしたActionの組み合わせで、State(状態)を記述しているともいえるでしょう。

 

使用目的からActionを探せるようまとめられた記事があるので、こちらも参照ください。

 

Event:イベント

上図の”Collision Enter”にあたるのがEventです。既にみてきたように状態遷移のトリガーとなるのがEventといえるでしょう。

Eventの中身としては、Collision, Trigger, Mouse InputのようにUnityから受け取るものと、distance checks, timeouts, game logicのようにアクティブなStateのActionによって発生するものがあります。

前者はわかりやすく、マウスからの入力やコライダーとの当たり判定をEventとするものです。後者としては、たとえばあるStateのActionでカメラとの距離と一定の距離を比較し続け、カメラとの距離がある数より小さくなった時にEventを起こすといった例が考えられます。たとえば次のような記事が参考になります。

 

 

また、それらとは異なるものとしてStart Eventがあります。これはPlaymaker Editorの初期状態から配置されているもので、FSMが起動する際に起こるイベントです。Start Eventによって最初にアクティブにされるStateはStart Stateと呼ばれています。

 

Start EventとStart State"Walking"

Start EventとStart State”Walking”

 

Transition:遷移

Transitionはエディター上の矢印にあたります。Transition Eventから次のStateへ向かって、ドラッグ&ドロップで簡単に作れます。

Transitionについては複雑な設定はありません。

ただし、基本的には特定のStateから特定のStateへの遷移をするのですが、遷移元のStateを指定せず、どんなStateからでも、あるEventによって特定のStateへの遷移を指示することが可能で、これをGlobal Transitionと呼びます。

下の例では、”Walking”であるか”Idle”であるかにかかわらず、Event “TRIGGER ENTER”によって”Jump”へと遷移します。

 

Global Transition:"TRIGGER ENTER"というEventによって直前のStateにかかわらず"Jump"へと遷移する

Global Transition:”TRIGGER ENTER”というEventによって直前のStateにかかわらず”Jump”へと遷移する

 

変数

上記の3つの要素に加えて、追記すべき概念として変数があります。

変数とは、値をいれることのできる名前の付いた箱のようなものです。アクションのパラメーターに変数を指定することで、動的な仕組みを作れます。

Timeに"1"を入力するのではなく、"fadeInTime"という変数を設定している

Timeに”1″を入力するのではなく、”fadeInTime”という変数を設定している

参考記事

STYLY MAGAZINEにはPlaymakerの様々な紹介記事があります。

インストールから基本操作まで

こちらの記事では、Playmakerのインストール方法から基本操作の解説まで、実際にゲームを作りながら解説しています。

 

作例:近づくと点灯するライト

VR空間の作成にあたって広く使うことのできる仕組みを作りながら、Playmakerの操作を解説しています。

 

作例:カメラの移動

こちらはSTYLYにおけるカメラの移動をPlaymakerを用いて実装する方法を解説しています。

 

この記事がPlaymakerを扱う一助となれば幸いです。