PlayMakerで乱数と条件分岐のシンプルな例

# はじめに

QiitaにPlayMakerの記事が少ない（特に初心者向けの記事がない）ので、超基本的な乱数と条件分岐のシンプルな例を書いてみました。

# 前提情報

- Unity 2018.3.0f2
- PlayMaker 1.9.0.p5
- [公式のアクションリファレンス](https://hutonggames.fogbugz.com/default.asp?W2)

# 要件定義

- 乱数で1～6の整数値を取得（ダイスロール）
- 取得した値が「3以下か」「4以上か」の条件分岐
- Debug Logで「3以下」「4以上」と出力する
- 「Replay」ボタンで乱数取得に戻る（リプレイ）

# 配置したObject

![hierarchy.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/42a67240-f50c-1c9b-9085-88983735d2a1.jpeg)

### ① PlayMakerManager

EmptyのGameObject→「PlayMakerManager」にリネーム。
このオブジェクトにメインのFSMを作成します。

### ② ReplayButton

UI > Button→「ReplayButton」にリネーム。
このボタンをクリックすると乱数取得に戻ります。
クリックイベントを発火させるFSMを作成します。
（あと必須ではありませんが、子オブジェクトのTextを「Replay」と変更しておきます）

![text.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/466651d5-50bc-d91a-131e-c0411a7ebf1d.jpeg)


# PlayMakerManagerのFSM

![PmFsm.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/bbf5573f-062a-8389-dfd5-ab037ee976ee.jpeg)

### 1.「GetDiceRoll」ステート

「START」と新たに作ったグローバルイベント「ReplayButtonClick」から遷移します。

![GetDiceRoll.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/0e536080-1449-e87c-9d76-716928557bd4.jpeg)


#### 1-1.「Random Int」アクション

1から6の整数値で乱数を求め、変数「randInt」に格納します。
※Inclusive Max：Max値を含めるか含めないか（チェックすると含める）

#### 1-2.「Debug Log」アクション

求めた乱数値をコンソールにデバッグ出力します。

### 2.「CheckDiceRoll」ステート

![CheckDiceRoll.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/7273d6ba-31c7-9ee1-ad51-5f2cecf674f5.jpeg)

#### 2-1.「Int Compare」アクション

変数「randInt」と数値「3」で比較します。

- Equal（randInt = 3）：SmallNumberイベント
- Less Than（randInt < 3）：SmallNumberイベント
- Greater Than（randInt > 3）：BigNumberイベント

### 3.「OutputSmallNumber」ステート

![small.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/cc1faf8f-e9c1-7cf6-abd2-1f95ff243bdd.jpeg)

#### 3-1.「Debug Log」アクション

「3以下が出た」をコンソールにデバッグ出力します。

### 4.「OutputBigNumber」ステート

#### 4-1.「Debug Log」アクション

「4以上が出た」をコンソールにデバッグ出力します。

# ReplayButtonのFSM

![ReplayButton.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/6eb76bf6-3119-93be-3f9e-fb2be43af0c6.jpeg)

※「State 1」は空です。

### 5.「SendButtonClick」ステート

「UI CLICK」イベント（このボタンをクリックした時に発火）から遷移します。

![SendEvent.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/4e2f275f-fac0-7e02-406a-980e0c420037.jpeg)

#### 5-1.「Send Event」アクション

「PlayMakerManager」オブジェクトにグローバルイベント「ReplayButtonClick」を送ります。
※ターゲットを「Broadcast All」（みんなに送る）にしてもOK。

# イベント

### PlayMakerManagerのイベント

![イベント.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/93bf8c84-67a4-8b8e-fa8c-fd8ccfa1ab72.jpeg)

作成したイベントは以下の通りです。

- BigNumber：CheckDiceRollステートで「4以上」の場合に「OutputBigNumber」ステートへ遷移させる
- ReplayButtonClick：ボタンクリック時にボタン側で発火させるイベント。FSMをまたぐためチェックボックスにチェックを入れてグローバルイベントに設定
- SmallNumber：CheckDiceRollステートで「3以下」の場合に「OutputSmallNumber」ステートへ遷移させる

### ReplayButtonのイベント

![ボタンイベント.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/624f05b3-a94d-07c2-6844-5825af78814e.jpeg)

- ReplayButtonClick：同上（グローバルなのでこっちにもある）

# 変数

### PlayMakerManagerの変数

![変数.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/e64b6dfa-29b5-73d6-ad93-80b314846057.jpeg)

- randInt：Int型（取得した乱数値を格納する）

※ReplayButtonの変数はなし

# コンソール出力例

![Console.jpg](https://qiita-image-store.s3.amazonaws.com/0/166815/75e39049-1ec8-9e40-b3ca-fa002ee56406.jpeg)

2回ダイスロールして、1回目に3、2回目に4が出た。

# おわりに

PlayMaker（ほんとに）チョットデキルレベルですが、自分の勉強も兼ねて書いてみました。
記事に間違いや修正の必要がありましたら、優しく教えていただければと思います。
また、初心者の方から「ここがわからない」などありましたら、お気軽にコメントいただければと思います。