playMakerをちょっと使いやすくするTips

Unityのビジュアルスクリプトアセットとして有名なplayMakerですが、みなさん使っていますか！？

使っていますよね！？（あまり見かけない）

playMakerのちょっと便利なTipsをご紹介します。
確認したplayMakerのバージョン：1.8.5、1.8.9

## Templateをカテゴリ分けする
playMakerのウィンドウからテンプレートを選択しやすくする方法です。

![WS000103.JPG](https://qiita-image-store.s3.amazonaws.com/0/177227/237881b9-12aa-14d4-e9a7-30939ac9fbc4.jpeg)
よく使用するアクションはテンプレートに保存して使いまわすことができます。

![WS000105.JPG](https://qiita-image-store.s3.amazonaws.com/0/177227/34e33b54-9419-96fa-9983-362e36e3c7db.jpeg)
作成したテンプレートはplayMakerのウィンドウのタブから選択することができます。ちゃんと状態遷移タブでテンプレートの名前を付けておきましょう。
（デフォルトのFSMのままだと名前が被ってしまいます）

![WS000106.JPG](https://qiita-image-store.s3.amazonaws.com/0/177227/8591b13e-a718-73eb-597f-816d0feb4110.jpeg)
このとき、状態遷移タブの名前欄にスラッシュ（/）を挟むと階層構造ができます。カテゴリ分けしておくと選択しやすくなりますね。


## ステートマシン内にパラメーターを表示する
カスタムアクションを使用してステートマシン内にパラメーターを表示する方法です。
![WS000110.JPG](https://qiita-image-store.s3.amazonaws.com/0/177227/4dbdd787-573a-9e80-38b6-4a28b11e2a2e.jpeg)
例えばこのようなステートがあったとします。パターンAとBに分岐するのですが、変数 `randomValue` が具体的にどのような数値なのかは実行時に変数のタブを開いて見に行かないと確認できません。
ステート名の下にあるコメント欄はステートマシン内に表示されます。この性質を使ってカスタムアクションからコメント欄に突っ込んでやります。

```

namespace HutongGames.PlayMaker.Actions {

    public class CustomAction : FsmStateAction {

        [UIHint(UIHint.Variable)]
        public FsmInt fsmIntValue;

        public override void OnEnter() {
            State.Description = "fsmIntValue = " + fsmIntValue.Value;
        }        

    }
}

```
CustomActionという名前でアクションを作りました。
アクションの所属しているステートは `State`で参照できます。コメントを表す変数は `Description` です。そいつに表示したい変数を適当なフォーマットで入れてあげます。


![WS000111.JPG](https://qiita-image-store.s3.amazonaws.com/0/177227/e9d05f69-7869-c14a-e15f-4bda20d734c3.jpeg)

CustomActionを `randomValue` が変更された直後に実行されるように `State1` に配置しました。

![valueComment.gif](https://qiita-image-store.s3.amazonaws.com/0/177227/4bfb0a55-ccb9-fa7b-408e-fd771f65b8f3.gif)

こんな感じにゲーム実行中にコメントの部分で変数を出力してくれます。
カスタムアクション内の変数を表示したいときには便利だと思います。

## AutoNameでアクション名を付ける

アクション名をダブルクリックすればアクションの名前を変えることができます。
![WS000112.JPG](https://qiita-image-store.s3.amazonaws.com/0/177227/81037ac6-e586-2644-661f-b4b99c6c8a0c.jpeg)

毎回名前を入力するのはしんどいので、アクションを右クリックして `Auto Name` を選択し、自動で名前を付与することができます。

```
namespace HutongGames.PlayMaker.Actions {

    public class CustomAction : FsmStateAction {

        [UIHint(UIHint.Variable)]
        public FsmInt fsmIntValue;

        public override void OnEnter() {
            State.Description = "fsmIntValue = " + fsmIntValue.Value;
        }

        public override string AutoName() {
            return "変数" + fsmIntValue.Name + "の値をコメントに表示";
        }
    }
}
```
`Auto Name` で決定される名前は `AutoName関数` をオーバーライドしてstringを返した値になります。

![autoName.gif](https://qiita-image-store.s3.amazonaws.com/0/177227/50f380e0-ea4a-cabf-3df6-01971e7d0313.gif)


## 色とか矢印を見やすくする
ビジュアルスクリプトなんだから見た目が整っていたほうがいいですよね。
![WS000113.JPG](https://qiita-image-store.s3.amazonaws.com/0/177227/0f5b486d-b085-070a-6bf3-1d35e30ca0e6.jpeg)
イベント名を右クリックすると色や矢印の方向を変更できます。
色はカテゴリ分けに良いですね。（矩形のエリアとか配置できたらいいんですが）
リンクスタイルは矢印を曲線にするか直線にするか変更できます。ステートの配置によってベストなものを選びましょう。1.8.7からDirectというリンクスタイルが追加されました。他のスタイルと組み合わせると交差が少なくなって良い感じになると思います。

## 終わりに
せっかく処理が見やすくなるビジュアルスクリプトなので見た目もわかりやすいものにしたいですよね。（私のプロジェクトはごちゃごちゃです）
次はplayMakerでサブステートっぽいものを扱う方法を書きます。