DungeonEater_PlayerController仕様

PlayerController仕様

特徴:状態遷移を一つのstring型のステータスネーム&複数のデリゲート変数、各ステータス状態の関数で構成して運用している

■Start()
GridMoveインスタンス取得
GameCtrlインスタンス取得
Weaponコンポーネント取得
GameCtrlコンポーネントのオブジェクトリストに自分自身のオブジェクトを加える
Map型のコンポーネント取得

  • Onステージスタート
ステータスチェンジ関数にて状態遷移
State_Normalをコルーチンに、State_NormalInitをイニシャライズデリゲート関数にセット
重複ステータスをチェック後、イニシャライズデリゲート関数実行後、コルーチンが走る
自分の位置をMapコンポーネントのプレーヤーリスポーン位置情報にセット
lastInputを0に
lastInputTimeを0に

  • Onリスタート
ステータスチェンジ関数にて状態遷移
State_Normalをコルーチンに、State_NormalInitをイニシャライズデリゲート関数にセット
重複ステータスをチェック後、イニシャライズデリゲート関数実行後、コルーチンが走る
自分の位置をMapコンポーネントのプレーヤーリスポーン位置情報にセット
lastInputを0に
lastInputTimeを0に

■Update()
アップデートファンクデリゲートを実行
ほぼ通常時はUpdate_Normal()関数が実行されると考えてよい

■ゲットムーブディレクション
縦横各軸の入力を得る。得た値を絶対数化する。値をTHRESHOLD閾値と比較する。閾値以下であれば入力無しとして扱い以上であれば入力有として扱う
入力無しの場合、タイマーを比較し最後の入力から0.2秒以内であれば最期に入力された値を代入しなおす
入力有の場合、最期に入力された値として記録しタイマーを0にする。
もう一度、更新された絶対値を比較する。入力された値が0.1f以下なら0に
入力された値をvector3の形式にしてノーマライズし、その値(ディレクション)として返す。結果的に4方向レバーの0か1、-1のデジタルな値を返す。

  • ゲットアドバタイズモードムーブディレクション
現移動方向に対して真後ろになる方向以外の4方向をランダムで返す。

■Onグリッド(これは外部のコンポーネントGridMoveからタイミング的にグリッドの交差点を通過した瞬間呼ばれる)
Mapコンポーネント内の宝石を拾う処理を行う関数を呼ぶ
現在のゲームモードを調べてアドバタイズモードであればゲットアドバタイズモードムーブディレクション関数を呼ぶ
通常モードであればゲットムーブディレクションを呼ぶ
返ってきた後ディレクションが0なら何もしないでリターン。
移動値が入っていた場合はGridMoveコンポーネント内の関数を使ってキー入力方向へオブジェクトのポジションを移動させる
この値は次フレームの最初でGridMove内のposに反映され検証される。

  • エンカウント
エンカウント用に割り当てたデリゲート関数に引数を渡して起動

  • ダメージ
ステータスチェンジ関数にて状態遷移
State_Deadをコルーチンに、State_DeadInitをイニシャライズデリゲート関数にセット
重複ステータスをチェック後、イニシャライズデリゲート関数実行、コルーチンが走る

■チェンジステート
このスクリプトのコアとなる状態遷移を司る関数
まず重複ステータスのチェック。同一であった場合returnして以下の処理はキャンセルされる。
同一でなければ処理が続き、現ステータス名のコルーチンを停止。
ステータスエンドファンクデリゲートに関数がセットされていた場合、実行する。
セットデフォルトファンク関数を実行。
ステータスエンドファンクデリゲートをnullにクリア。
エンカウントファンクデリゲートをエンカウントノーマル関数にセット。
アップデートファンクデリゲートをアップデートノーマル関数にセット。
引数イニシャライズデリゲート関数がnull出なければ実行。
引数ニューステータスをコルーチンとして起動する。

(大まかな流れ)

ステータス重複チェック
ステータスのコルーチン停止
エンドファンク起動
エンドファンク、エンカウントファンク、アップデートファンクを初期化及びディフォルトにセット
状態遷移の引数反映
イニシャライズ起動(ここで必要があればエンドファンク、エンカウントファンク、アップデートファンクを書きかえる)
ステータスのコルーチン起動(コルーチンなので関数内でウェイトなどが利用できる)



  • ステートノーマルイニット
デリゲート関数用。エンカウントファンク、アップデートファンクを通常状態にする

  • ステートノーマル
コルーチン用。なにもせずreturn。

  • エンカウントノーマル
デリゲート関数用。
Weaponオブジェクトが存在し、尚且つCanAutoAttackが真であればWeaponオブジェクト

のAutoAttack関数に引数を渡して起動。
そうでなければ、「Attack」メッセージを引数のオブジェクトに通知。

ウェポンのアタックは剣でのアタックで敵が死ぬ。
敵本体側の"Attack"メッセージの関数はプレーヤーを殺す。

  • アップデートノーマル
通常時、Update()内で実行される関数。
ジャンプボタンを監視し押されたらオンアタックメッセージを自分自身に発行する。
(オンアタック関数は、子コンポーネント内に存在しない。事実上無機能)
ゲットムーブディレクション関数の返り値を採取。プレーヤーの入力を受け付け無入力

なら以下の処理はキャンセル。
移動方向と真逆の入力なら方向転換をGridMoveのディレクションに即反映させる

  • ステートデッドイニット
デリゲート関数用。エンカウントファンクにエンカウントデッド、
アップデートファンクにアップデートデッドのデリゲート関数をセットする。

  • ステートデッド
コルーチン用。「オンデッド」メッセージを自分自身に通知。3秒待つ。ゲームコント

ロールのプレーヤーイズデッド関数を実行。


  • エンカウントデッド
return;

  • アップデートデッド
return;

  • プレーヤーステップサウンド
シーン内のオーディオチャンネルのインスタンスを拾ってワンショットオンを鳴らす




  • 最終更新:2013-09-07 14:23:36

このWIKIを編集するにはパスワード入力が必要です

認証パスワード