Help us understand the problem. What is going on with this article?

uStateでシーンの状態管理をしよう!ゆるふわゲームジャムの事例ちょこっと紹介

More than 5 years have passed since last update.

はじめに

この記事はUnity アセット真夏のアドベントカレンダー 2014 Summer!18日目の記事となります。

uStateとは?

ウダサンコウボウさんが配布しているスクリプトベースのステートマシンアセット

今回話すこと

自分がGameJam中によく使うuStateを使ったシーンの状態管理を紹介します。
#ゆるふわゲームジャムでの結果演出の際の事例と合わせて紹介します。

使い方

(詳しくはウダサンコウボウさんを参照して下さい!)

必要なもの

uStateでは状態管理を実現する為に以下のものが必要となります
* uStateMachineを継承したHogeStateMachineクラス
* uStateGenericを継承したFooStateクラス

基本的にはuStateMachine直下に各Stateのゲームオブジェクトを配置し、
uStateMachineはそれを見に行く感じ

ゆるふわゲームジャムでの実例 戦闘演出

ゆるふわゲームジャムで作成したけのじゃ!では入力後に、自分と相手のプレイヤーが同時に選択した行動を行い、各段階にて演出をさせる事をやりました。

まず戦闘演出に必要なステートを考える。

ざっくり列挙
* 初期化
* 準備演出
* 戦闘演出
* 結果演出

これらをシーンに配置したらこんな感じ
Battle_unity_-_unity_-_PC__Mac___Linux_Standalone.png

BattleStateMachine

インスペクタはこんな感じ

  • DefaultStateName
    • シーンに遷移した直後の状態の名前
  • TransitionLimit
    • 使ってないのでわかってない…(ごめんなさい)

Battle_unity_-_unity_-_PC__Mac___Linux_Standalone_と_Gyazo_-_67c7663fc0300bff86cf380fbd8ae5ec_png.png

今回はbattleStateMachineにPlayerも含めてしまっていたけどこれはあまり良い方法ではなさそう(GameJamでオラオラした結果です。。。)

シーンのステータス制御の仕方

基本的にはuStateGenericを継承した各状態の中に書きます。

よく使うuStateGenericのメソッド

StateEnter

状態に遷移した直後のメソッド

StateStay

MonoBihaviourでいうUpdateみたいなもん

StateExit

現在の状態から抜ける時の処理

Reset

初期状態の設定等(初期のState名等を設定する)

状態遷移のやりかた

準備状態の時のコード
```csharp:battleStateReady.cs

protected override void Reset ()
{
    base.Reset();

    // 三秒後にShoot状態に遷移
    exitByTime = new ExitByTime(3.0f, "Shoot");
}
// すぐに遷移したい場合はこんな感じ
exitByTime = new ExitByTime(0.0f, "遷移したいState名");

外から状態を変更する場合

自分で用意したuStateMachineの参照をもって↓みたいにするとうまく動くかも

uStateMachine stateMachine;

stateMachine.TransitionState("遷移するState名");

つかってよかったこと

状態ごとの処理をクラスごとに分けて書くことができた。

  • 攻撃前の演出はReadyStateに
  • 戦闘演出に必要な事はBattleStateに
  • 戦闘結果演出に必要なことはResultStateに #### 動かすだけならすぐできる
  • スクリプトベースのなのでコードを読めば使い方がすぐわかる。

悪かったこと

状態の遷移が見えづらい

  • ノードベースと違って見えない

おわりに

uStateはスクリプトベースで管理できる為コレまでスクリプト上で状態管理をしていた人からするととても使いやすい気がします。
最近だとノードベースの状態管理のアセットなんかも最近は安価でかつ高機能ではあるのですが習熟に時間がかかる部分もあるため自分はuStateを推しています。

雑なまとめとなってしまいましたがuState是非お試し下さい〜

明日は束田 大介さんの記事となります!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした