DungeonEater_GridMove仕様

GridMove仕様


  • Start()
ムーブベクター初期化
ディレクション Vector.Forward
ポーズはNONE

  • Onリスタート
ムーブベクター初期化
ポーズはNONE

  • Onゲームスタート
ムーブベクター初期化
ポーズはNONE

  • Onステージスタート
ムーブベクター初期化
ポーズはNONE

  • Onデッド
ポーズはGAME_PAUSE

  • Onステージクリア
ポーズはGAME_PAUSE

  • Onリボーン
ポーズはNONE

  • Update()
ポーズ状態がNONEならムーブベクターを0にしてreturn(以降はキャンセル)
デルタタイムが0.1以下ならMoveを実行、それ以上ならMove処理を複数回分割実行

  • Move()
このスクリプトのコア部分。
posに更新移動後の座標位置を記憶し、現在位置とposをintに型変換して小数点切捨てを行う
型変換後の各軸x,zを比較して値が違えば現フレーム内でグリッドの境界を越えたと判断できる事を利用してグリッドフラグを立てる
near_gridとm_current_gridに四捨五入したposの値を入れて一番近いグリッド交差点を記憶する
xz各軸、グリッド0.0~0.4999の前半ユニット移動中の際は進行方向前方に1ユニット長のレイを飛ばして壁が無いか探る。もし壁があればグリッドフラグを立ててnear_gridの値へ移動する(事実上グリッドの交差点へ位置補正される)敵やプレーヤーキャラクタはCharacter_layerに、壁や床などはdefaultレイヤーに収められている。判定ではHITCHECK_LAYER_MASKによりDefaultレイヤーのみに反応するようになっている。

ここまでの処理でグリッドフラグが立っているかもしくはpos-near_girdが極小であればクロス位置と判断。derection_saveに移動情報を記憶させプレーヤーコントローラーやモンスターコントロールのOnグリッドを通知起動する。関数から帰ってきたらOnGrid内の移動情報書き換えが以前の情報derection_saveと比較して逆方向もしくは静止した状態の場合、near_grid + m_direction * 0.001fとしてグリッド交差位置からわずかに動かした状態にする(グリッド交差位置から移動量が0.0の場合、次もOnグリッドが起動してしまうのを防ぐ為???コメントアウトしても正常に動く???これは保険装置らしい)

最期にムーブベクターに今回移動した移動差分を保存
自分のポジションにposを反映させる。

  • セットディレクション

  • ゲットディレクション

  • イズリバースディレクション
入力された引数と現ディレクションの内積を求め-1以下(正反対方向の入力)の場合、真を返す

  • チェックウォール
隣接するグリッドの交点を原点にして1.0f長のレイを進行方向へ飛ばしレイヤーマスクを適用する。
レイヤーマスクはDefaultレイヤーのみ受付。判定結果をリターンする。

  • イズランニング
m_move_vectorの長さを調べて0.01f以上の長さがあればtrueを返す
親のオブジェクトがこれにより移動中であるかどうかがわかる

  • ヒットストップ
ビット操作によりPAUSE_TYPEの状態を遷移させる。
引数が真の場合、HITSTOPビットに対して和(どんな状態であろうがHITSTOPがONになる)
偽の場合、HITSTOPビットに対して補数(0)の積(GAME_PAUSE、NONEなら保持、HITSTOPが立っていた場合はオフに)やや判りにくい動作なので、このコードをあまり真似する必要性を感じない



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

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

認証パスワード