はじめに
QiitaにPlayMakerの記事が少ない(特に初心者向けの記事がない)ので、超基本的な乱数と条件分岐のシンプルな例を書いてみました。
前提情報
- Unity 2018.3.0f2
- PlayMaker 1.9.0.p5
- 公式のアクションリファレンス
要件定義
- 乱数で1~6の整数値を取得(ダイスロール)
- 取得した値が「3以下か」「4以上か」の条件分岐
- Debug Logで「3以下」「4以上」と出力する
- 「Replay」ボタンで乱数取得に戻る(リプレイ)
配置したObject
① PlayMakerManager
EmptyのGameObject→「PlayMakerManager」にリネーム。
このオブジェクトにメインのFSMを作成します。
② ReplayButton
UI > Button→「ReplayButton」にリネーム。
このボタンをクリックすると乱数取得に戻ります。
クリックイベントを発火させるFSMを作成します。
(あと必須ではありませんが、子オブジェクトのTextを「Replay」と変更しておきます)
PlayMakerManagerのFSM
1.「GetDiceRoll」ステート
「START」と新たに作ったグローバルイベント「ReplayButtonClick」から遷移します。
1-1.「Random Int」アクション
1から6の整数値で乱数を求め、変数「randInt」に格納します。
※Inclusive Max:Max値を含めるか含めないか(チェックすると含める)
1-2.「Debug Log」アクション
求めた乱数値をコンソールにデバッグ出力します。
2.「CheckDiceRoll」ステート
2-1.「Int Compare」アクション
変数「randInt」と数値「3」で比較します。
- Equal(randInt = 3):SmallNumberイベント
- Less Than(randInt < 3):SmallNumberイベント
- Greater Than(randInt > 3):BigNumberイベント
3.「OutputSmallNumber」ステート
3-1.「Debug Log」アクション
「3以下が出た」をコンソールにデバッグ出力します。
4.「OutputBigNumber」ステート
4-1.「Debug Log」アクション
「4以上が出た」をコンソールにデバッグ出力します。
ReplayButtonのFSM
※「State 1」は空です。
5.「SendButtonClick」ステート
「UI CLICK」イベント(このボタンをクリックした時に発火)から遷移します。
5-1.「Send Event」アクション
「PlayMakerManager」オブジェクトにグローバルイベント「ReplayButtonClick」を送ります。
※ターゲットを「Broadcast All」(みんなに送る)にしてもOK。
イベント
PlayMakerManagerのイベント
作成したイベントは以下の通りです。
- BigNumber:CheckDiceRollステートで「4以上」の場合に「OutputBigNumber」ステートへ遷移させる
- ReplayButtonClick:ボタンクリック時にボタン側で発火させるイベント。FSMをまたぐためチェックボックスにチェックを入れてグローバルイベントに設定
- SmallNumber:CheckDiceRollステートで「3以下」の場合に「OutputSmallNumber」ステートへ遷移させる
ReplayButtonのイベント
- ReplayButtonClick:同上(グローバルなのでこっちにもある)
変数
PlayMakerManagerの変数
- randInt:Int型(取得した乱数値を格納する)
※ReplayButtonの変数はなし
コンソール出力例
2回ダイスロールして、1回目に3、2回目に4が出た。
おわりに
PlayMaker(ほんとに)チョットデキルレベルですが、自分の勉強も兼ねて書いてみました。
記事に間違いや修正の必要がありましたら、優しく教えていただければと思います。
また、初心者の方から「ここがわからない」などありましたら、お気軽にコメントいただければと思います。