作業ログ GASP-ALSに伏せ・ほふく状態を追加中

※本サイトはアフィリエイト広告を利用しています。

yossi40-100/GASP-ALS at Cover

よっしー
よっしー

作業中メモ。解説記事は別途投稿予定

匍匐 prone 状態を追加

  • E_Stance : Stand, Crouch, Prone
  • E_Gait: Walk, Run, Sprint, Prone ← いらないかも

匍匐 prone 関連パラメタを追加

  • CBP_SandboxCharacter
    • Is Proned
    • ProneSpeeds
      • TBD: RootMotionだとアニメーションシーケンスの速度依存で効かない
    • CapsuleHalfHeight/Radius
      • 通常時とprone時だけでなくしゃがみ時も必要だった
        • prone解除時に通常サイズに戻してもCrouch考慮したサイズに勝手になったりはしない模様
        • しゃがみ時のカプセルサイズってどういう計算?とりあえず実測で
  • ABP_SandboxCharacter
    • IsProned ←Stanceがあるのでいらないかも

操作

  • キー入力イベントを作る
    • とりあえずデバッグキー「Z」でProne / Unproneをトグル

キャラクター本体の状態変更処理

Prone / Unprone関数

  • Crouchの真似
  • IsProneで分岐
    • IsCrouchは勝手にやってくれてるがIsProneは自作なので自分で切り替える必要あり
    • 状況的に切り替えたくない場合の考慮も必要
      • トラバース中など
  • カプセルを小さくする
    • Crouch状態で小さめになっている場合のケア
      • 戻したときにしゃがみ姿勢のままカプセルがでかい不整合状態になる
      • IsCrouch変数が制御できないのでIsCrouchにしつつIsProneとするか、IsCrouchを解除して1フレーム後にIsProneにするか?
      • Unprone時にIsCrouchだったらCrouch用のカプセル高にする分岐を追加した
        • → IsCrouchが遅延処理でうまくいかないのでやめ
      • しゃがみ関数はC++で実装されていそうでいじるのが難しい上に次のフレームで処理されるので扱いがさらに面倒
      • Prone時に一旦Crouch状態にして1フレーム待ってから伏せる。伏せからはCrouchにしか遷移しない(IsProneがTrueのときはIsCrouchもTrue)仕様とする
  • すばやく2連続C押せば立てる。
    • TODO: 長押しで立てるようにとかはちょっと工夫すりゃできる
      • ボタンの数とやること考えると、
        • 専用のZボタンではなく
        • しゃがみボタン長押しで伏せるほうがいいかも
  • 立ちから直接伏せるとカプセルが1回中に浮く
    • 浮かないようにサイズ変更と同時にオフセット移動し回避

Crouch入力イベント

  • 匍匐中にしゃがみ解除できて不整合
    • IsProneだったらUnproneで解除する分岐を追加

移動速度

  • 下記はGaitを見ているのでProne状態の加速度を設定(0じゃ動かないかもしれんので)
    • CBP_SandboxCharacter
      • CalculateMaxAcceleration
      • CalculateGroundFriction
      • CalculateMaxSpeed
    • 極端に低く設定しても効かない
      • おそらくルートモーションなアニメーションシーケンスの速度で決まっている
      • CBP_SandboxCharacter > GetDesiredGait
        • Proneを返す条件の追加が必要そうなのでIsProneだったらGait=Proneを返してみた
        • → その後の処理でCalculateMaxSpeedやCalculateMaxCrouchSpeedを変えてみたが効果なし
          • MaxWalkSpeedを20まで下げてみたが、おそらくアニメーション自体の速度である150で動けてしまう。
      • TBD: アニメーションシーケンスの再生速度とかを変える?
        • Mixamoアニメ初期値だとちょっと早すぎて右足が滑っている感

アニメーション

ロコモーション

  • ABP_SandboxCharacter
    • UpdateStates
      • is ProneでStanceをProneにする分岐を追加
    • AnimGraph
      • 浮く問題
        • FootPlacementとLegIKで立っている前提の足の位置補正がされるせい
        • Stance(or IsProned)でSelect Float(0, 1)を切り替えてAlphaに刺すことでProne時は無効化する
          • とりあえずカプセルの位置までは下がる
        • TODO: 匍匐状態専用のIK補正追加
          • とりあえずカプセル接地面の法線でRootの角度をいじるのが簡単かな?
          • コントロールリグか、TwoBoneIK/FABRIKあたりか
  • CHT_PoseSearchDatabases_Dense
    • Prone/Prone Moving行追加
    • StanceとMovementStateで追加条件を追加
  • PSD_Dense_Prone
    • Stand_to_ProneとProne_idleを追加
    • Prone_idleはルートモーション+ループに
    • Stand_to_Proneはルートモーションだけ
      • 変な上下動が発生する
        • → アニメーションシーケンスの通知に PoseSearchBlockTransitionを追加し再突入を回避
  • PSD_Dense_Prone_Moving
    • Prone_Forwardを追加
      • Mixamoから取り込んだものをさらに足の接地を編集したもの
        • TBD: 直接的再配布じゃないからOK? グレーゾーンか?
        • TBD: tatoolrigにないVBが変な位置になっているが多分影響ないと思うので一旦放置
      • ループの接続がおかしい
        • スキーマをPSS_SM_LocoLoopsに置き換え(このへんあまりわからない)
          • なんとなくよくなった感
        • まだ完璧じゃない
          • ForceRootLockにチェック入れ忘れ→入れたら治った(ルートモーションが移動後開始位置にワープしてしまうのを修正)

武器のオーバーレイ

  • そのままでもとりあえず構えて撃ててる
    • ほぼ腕だけの加算なのである程度はいけてるのかな?
  • 左右のエイムオフセットは可能
    • TODO: 上下はできない
      • 既存のGASP-ALSの仕組みでは無理なんじゃないか説。。。
  • Prone時用のオーバーレイアニメーション追加
    • Complex側のクラスでも無理なのでMoreComplexを作る
      • 通常としゃがみの分岐をまねてProne時用分岐を追加
        • TBD: うまく動いているのかどうやってデバッグすればいい???
        • TODO: そういえばアニメーションにALS用のカーブを入れてないからまだ何も加算されてないのか。。。

参考情報

ほぼない。。。GASPにProne追加する手順みたいな情報はまだない?

カバーもないけど、PSDでやるのを諦めてStateMachineに分岐させることで何とかなりそうなのでそれはまた別記事で。

コメント

タイトルとURLをコピーしました