Unity
初心者
playmaker

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


はじめに

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


前提情報


要件定義


  • 乱数で1~6の整数値を取得(ダイスロール)

  • 取得した値が「3以下か」「4以上か」の条件分岐

  • Debug Logで「3以下」「4以上」と出力する

  • 「Replay」ボタンで乱数取得に戻る(リプレイ)


配置したObject

hierarchy.jpg


① PlayMakerManager

EmptyのGameObject→「PlayMakerManager」にリネーム。

このオブジェクトにメインのFSMを作成します。


② ReplayButton

UI > Button→「ReplayButton」にリネーム。

このボタンをクリックすると乱数取得に戻ります。

クリックイベントを発火させるFSMを作成します。

(あと必須ではありませんが、子オブジェクトのTextを「Replay」と変更しておきます)

text.jpg


PlayMakerManagerのFSM

PmFsm.jpg


1.「GetDiceRoll」ステート

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

GetDiceRoll.jpg


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

1から6の整数値で乱数を求め、変数「randInt」に格納します。

※Inclusive Max:Max値を含めるか含めないか(チェックすると含める)


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

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


2.「CheckDiceRoll」ステート

CheckDiceRoll.jpg


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

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


  • Equal(randInt = 3):SmallNumberイベント

  • Less Than(randInt < 3):SmallNumberイベント

  • Greater Than(randInt > 3):BigNumberイベント


3.「OutputSmallNumber」ステート

small.jpg


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

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


4.「OutputBigNumber」ステート


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

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


ReplayButtonのFSM

ReplayButton.jpg

※「State 1」は空です。


5.「SendButtonClick」ステート

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

SendEvent.jpg


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

「PlayMakerManager」オブジェクトにグローバルイベント「ReplayButtonClick」を送ります。

※ターゲットを「Broadcast All」(みんなに送る)にしてもOK。


イベント


PlayMakerManagerのイベント

イベント.jpg

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


  • BigNumber:CheckDiceRollステートで「4以上」の場合に「OutputBigNumber」ステートへ遷移させる

  • ReplayButtonClick:ボタンクリック時にボタン側で発火させるイベント。FSMをまたぐためチェックボックスにチェックを入れてグローバルイベントに設定

  • SmallNumber:CheckDiceRollステートで「3以下」の場合に「OutputSmallNumber」ステートへ遷移させる


ReplayButtonのイベント

ボタンイベント.jpg


  • ReplayButtonClick:同上(グローバルなのでこっちにもある)


変数


PlayMakerManagerの変数

変数.jpg


  • randInt:Int型(取得した乱数値を格納する)

※ReplayButtonの変数はなし


コンソール出力例

Console.jpg

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


おわりに

PlayMaker(ほんとに)チョットデキルレベルですが、自分の勉強も兼ねて書いてみました。

記事に間違いや修正の必要がありましたら、優しく教えていただければと思います。

また、初心者の方から「ここがわからない」などありましたら、お気軽にコメントいただければと思います。