Unity仮面が教える! ラクしてゲームを作るためのAssetStore超活用術

Track.1 ファーストコンタクト ~Playmaker編

この記事を読むのに必要な時間:およそ 5 分

Playmakerで簡単な状態遷移を作ってみる

Playmakerエディタ

画像

  1. まず,状態遷移を付けたいオブジェクトをヒエラルキーかシーンビューで選択します。
  2. そして,Playmakerエディタの左の画面内で,右クリックして「Add State/状態遷移を追加」を選択して,状態遷移を追加します。
  3. 「State 1」が作られます。これを選択して,右の画面で名前を「Initital」に変更しましょう。最初の状態,という意味です。
  4. 同様にもうひとつ状態を作ってみましょう。今度は名前を「Moving」にしましょう。つまり動いている状態を作ったわけですね。
  5. 「Moving」を選択し,⁠Action Browser/アクションブラウザ」をクリックすることで,アクションブラウザが立ち上がります。タブ動かして,適当なウィンドウに当てはめましょう。
  6. アクションブラウザで「Transform」というカテゴリの「Rotate」を選択し,下の「Add Action To State/状態をアクションに追加」をクリックして,アクションを追加します。⁠アクション」というのはその名の通り何らかのアクションを追加します。ここでは「回転」というアクションを追加しました。ちなみにアクションは複数登録することも可能です。
  7. PlaymakerエディタにRotateアクションが付加されます。その中で「Y Angle」「180⁠⁠,⁠Per second」をチェックしてください(つまり1秒間にY軸180度の回転しろ,という意味です⁠⁠。
  8. そして,次は遷移を作ります。⁠Initial」を右クリックし,⁠Add Transision / 遷移を追加⁠⁠→⁠System Events⁠⁠→⁠MOUSE DOWN」を選択すると,遷移が追加されます。これは「マウスを押されれば遷移するよ」という条件です。
  9. すると赤い「!」がつきます。これがあるというのは,何かどこかに間違いがあるということです。今回は「遷移があるけど,矢印で繋がっていない」ということですので,⁠MOUSE DOWN」をクリックして,矢印を「Moving」まで持っていき,そこでもう一度クリックしましょう。それで矢印が繋がり,赤い「!」がなくなるはずです。つまり,これで「初期状態⁠⁠→⁠ボタンを押す⁠⁠→⁠回転する」という一連の状態遷移が完成したということになります。

仮面:さあ,これで一番簡単な状態遷移はできた。さあプレイしてみよう。上の「▶」をクリックしてプレイしてくれ。

秋山:はい,クリックと。あれ? なんか何も出ませんけど。

仮面:あ,そうか。Cubeの位置は原点にしていなかったか。じゃあ一回止めて。

秋山:はい。これをクリックしてと……。

仮面:で,Cubeをヒエラルキーで選択して,インスペクターで一番上の方の「Transform」「Position」をXYZすべてゼロにするのだ。

秋山:はい。しました。

仮面:それでもう一回プレイしてみてくれ。

秋山:あ,四角が今度は真ん中に出ましたよ。

仮面:それをクリックすると……。

秋山:あ,回転した。すごーい,これだけでこんなことできるんですね。

仮面:じゃあ,次のアクションはアキヤマが決めろ。どうしたい? このCubeを。なんでもできるぞ。

秋山:そーですねー,じゃあフリック操作で左右に動かせて,上フリックでジャンプできるようにしてください。

仮面:お,おう……。できるにはできるが……。アキヤマ,モノは相談だが……。

秋山:はい?

仮面:クリックするとジャンプする,程度で手打ちにしてもらえないだろうか。

秋山:はあ……。

Playmakerで簡単な状態遷移を作ってみる(2)

Playmakerエディタ(その2)

画像

  1. ジャンプするということは,物理挙動が必要になりますし,地面が必要になります。というわけで,Cubeに「Component⁠⁠→⁠Physics⁠⁠→⁠Rigidbody」として,物理挙動を付けましょう。それとCubeのちょうど真下に地面のCubeを配置しましょう。
  2. Playmakerエディタで,新たに「Jumping」という状態を作ってください。
  3. そこに「Add Force」というアクションを追加して下さい。パラメータは「Y」「300」(右の「=」記号をクリックすることで編集が可能になります⁠⁠,⁠Force Mode」「Impluse」に変更してください。
  4. 「Moving」に遷移を追加して,先ほどと同様「MOUSE DOWN」の遷移条件で新たに作った「Jumping」に繋げましょう。
  5. 最後に「Jumping」から「Moving」に戻す遷移条件を「FINISHED」にすれば完了です。

仮面:ふう,なんとかできたぞ。って,アキヤマー!! 携帯メールしてる場合か!!

秋山:あ,終わりました? いやだって長いんですもん。

仮面:おのれ~!

秋山:あ,ほんとだ,ジャンプできますねー。こんな短時間で凄いですね!

仮面:お,おう……。

仮面:どうだ!? プログラミングできなくてもそれっぽくはできただろう?

秋山:一応それっぽくなりましたねー。

仮面:感動薄ッ! うすうすだぞ!

秋山:まあ,あんまりゲームっぽくないので。この後はゲーム作るところまで行くんですよね!?

仮面:そうだな。次回はもう少しイロイロなAsset Storeアイテムを紹介していきたいな。それとアキヤマはどんなゲームが作りたいかを決めてこい。

秋山:ああ,そうですね。⁠ハイスコアガール』ってマンガ面白いんですけど,それ読んでると2D格闘ゲームが良いですよね。

仮面:また,そういうハードルが高いことを……。

いかがだったでしょうか? すでにUnityを使っている人にとっては,ちょっと内容が初心者向けだったかもしれません。そういった方々の対象に「One more thing」も用意しています。

<One more thing> Playmakerでのスクリプトとの連動

Playmakerアクションによるスクリプト関数呼び出し

Unityのスクリプトの関数はPlaymaker側からSendMessage経由で呼び出すことができます。アクションの中から「Script Control」というカテゴリの「Send Message」を追加して,⁠Method Name」に関数名を直接入れれば,呼び出すことができます。また引数もひとつであれば渡すこともできます。

スクリプトからPlaymakerイベントトリガーの発生

Playmakerの状態遷移のイベントトリガーをスクリプト側からも呼び出すことができます。

PlayMakerFSM playMakerFsm = GetComponent<PlayMakerFSM>();
playMakerFsm.Fsm.Event("set_event"); // set_eventはイベントトリガー名

スクリプトからPLaymakerの変数を変更

次のようなコードで,直接変数を変更することができます。

// add point
playMakerFsm.FsmVariables.GetFsmInt("point").Value += 100;

最後にPlaymakerの注意点として一つ言及しておくと,すべてPlaymakerでやろうとしてはいけない,ということです。Playmakerはどんなことでもやれてしまうのですが,逆にその手間がかかってしまう場面が多くなります。

例えば,ステージギミック等の単純な状態遷移には向いていますが,ゲームのルールや敵のAIなどの複雑な動きなどには適していません。スクリプトで書けば数行のところが,アクションだらけになってしまうはずです。これでは簡単に作るつもりが,余計大変になってしまいます。要はバランスです。使いどころを間違えずに楽しく使いましょう。

著者プロフィール

伊藤周(いとうまこと)

株式会社セガでアーケードゲーム「頭文字D」「ガンダムカードビルダー」やモバイルゲーム「三国志コンクエスト」を開発。その後Unity Technologies Japan合同会社に転職し,Unityエバンジェリストとして今に至る。個人としてもiPhoneアプリ「ScouterCam」を開発。短時間でゲーム開発を競うWEG:ゲームクエスト市川チャレンジの初代優勝者。

Twitter:@warapuri