こんにちわ。今回は弊社が必ず使用しているUnityアセットの一つ、PlayMakerの紹介をしたいと思います。 Unityアセットの中でどれが一番おすすめかと聞かれたら「PlayMaker」と答えます。


 # PlayMakerとは

PlayMakerは一言で言うと、 プログラム中における状態遷移を可視化し、状態および状態間の遷移を簡単に作成・編集できるようにするためのツール です。

開発しているシステム・ゲームの規模が大きくなるにつれて、プログラムが取りうる状態、状態間の遷移の数はどんどん増えていきます。 これはそのままシステム・ゲームの複雑度に直結します。

膨れ上がった状態、状態間の遷移を全てプログラムで表現すると、非常にプログラムの可読性が悪くなり、 だれもメンテナンスができないシステム・ゲームが出来上がってしまいます。

これを防ぐのがPlayMakerです。

状態、状態間の遷移を可視化し、システム・ゲームが「今、どのような状態なのか」、「何をするとどの状態からどの状態へ遷移するのか」 が目に見えてわかるようになります。

これはシステム・ゲームの複雑さに対抗するための非常に有効な方法で、たとえばデバッグの際に現在の状態を知りたいとなった場合、今どのような状態なのか、従来であればプログラム中にログを仕込んで確認しなければなりませんでした。これはとても煩わしい事です。 


その点、PlayMakerを使うと状態は可視化されているので、今どのような状態なのかは一目瞭然です。

Playmaker - アセットストア

Playmaker - 公式ページ 
 # 状態遷移図のつくり 早速、PlayMakerを使ってどのようなことができるか見てみましょう。 PlayMaker Editorを使って、添付画像のような状態遷移図を作成します。(作成方法は割愛) 
 状態遷移図

では簡単に解説します。

状態を遷移させる

「State01」状態で「DO_NEXT」イベントが発行されると「State02」状態に遷移します。 「State02」では、「DO_POSITIVE」、「DO_NEGATIVE」イベントの2つが設定されていて、「DO_POSITIVE」イベントが発行されると、「PositiveState」状態へ、「DO_NEGATIVE」イベントが発行されると「NegativeState」状態へ遷移します。 ## 状態にアクションを持たせる ある状態に遷移した時に、その状態に設定している「アクション」が実行されます。 上図では、State01に「Invoke Method」アクションを設定しているので、State01に遷移した時に、「SceneHome」コンポーネントの「OnState01」メソッドが実行されます。 


アクションには「Invoke Method」のような特定のメソッドを実行する以外にも、通信をしたり、UIアニメーションをさせたりするようなものまで数多くのアクションが存在します。

それはそれで便利なのですが、弊社では「Invoke Method」、「Start Coroutine」以外のアクションは使わないようにしています。 理由は、ロジックの所在がどこにあるかわかりづらくなるからです。

例えば、特定の箇所で鳴っている音を鳴らないようにしたい場合、音を鳴らしている場所がPlayMaker内のActionなのか、コードなのか探しまわらなければならなくなります。 であれば、どちらで鳴らすかの統一さえとれていれば良いのではと思われるかもしれませんが、PlayMakerはそこまで柔軟性がないため、やりたいことを全てPlayMakerで実現しようとするとコードを書くよりも多くの時間を要することなります。これでは、本末転倒です。 
 # 動いているところを見てみる では、実際に動いているところを見てみましょう。

Playmakerの動いているところ その1

ボタンを押下すると、ボタンラベルに対応するイベントが発行され次の状態に遷移します。 これはかなり簡単な例ですが、案件で作成したバトルの状態遷移はこのようになっており、結構複雑です。

Playmakerの動いているところ その2


 # 終わりに

今となっては、弊社ではPlayMakerを使わずに開発することが考えられないくらい多用しています。 ただ、最近Unityを使って開発をしているプロジェクトはよく見かけるようになりましたが、PlayMakerを導入しているプロジェクトはあまりありません。日本では、Unityの普及は進んでいますが、有用なアセットの普及が進んでいないように思えます。なので、このブログを通して有用なアセットをどんどん紹介していきたいと思います。