poi’s tech blog

3D多人数同時接続型球体アクション成人向けゲーム開発のためのアイデア、ナレッジ

Unityアクションゲー超簡易メモ

個人的なベストプラクティスの備忘録。

Q.アニメーションの再生途中に親GameObjectのTransformを更新したい

A.アニメーションイベントでメソッド起動してDOTweenで動かす

攻撃アニメーション中に突進する場合とか。

qiita.com


Q.攻撃アニメーションの状態遷移と制御

A.ここみる

条件が複雑になる場合は状態遷移のマネージャークラスとか作ったほうがよさそう。

gametukurikata.com


Q.物理的には作用しない攻撃時の当たり判定

A.ここらへんみる

ColliderのIsTriggerをONに、イベントハンドラはOnTriggerEnter()を使う。

プレイヤーの攻撃と敵の攻撃を区別したい場合はそれぞれPlayer、Enemyレイヤーを作る。

gomafrontier.com

qiita.com


Q.Timeline実行時のオブジェクトの現在位置で組技アニメーションを実行したい

デフォルト実行(Track OffsetsがApply Transform Offsets)の場合はワールドの原点にワープしてしまう。

Track OffsetsのApply Scene Offset使うと良さげ。
クリップごとに現在地点からのオフセット設定できたりもする。

tsubakit1.hateblo.jp

ただし、使用するアニメーションのRoot Motionを予め有効(Root Transformとか)にしておかないとメニューが出ない。
毎回設定するの面倒くさいので、基本的にはFBXに紐付いたアニメーションをそのまま使うのが良さそう。

light11.hatenadiary.com

また、あくまでTimeline開始地点からの相対位置で動かせるだけなので、
組技アニメーションする場合は位置や回転などを先にスクリプトとかから整えてあげる必要がありそう。

それぞれのキャラ用Animation TrackのTrack OffsetをApply Scene Offsetsにしたあと、
Override Trackを作成して0フレーム目にTransform、Rotationの値をゼロにしたキーを登録すると
Playable Directorを持つGameObjectの現在位置に初期化ができた。

ただしキャラクターがDOTweenアニメーション中の場合はうまく位置の初期化ができなかったので、
Timelineを実行する直前にDOTweenのKill()を呼んであげる必要があった。

f:id:poipoipoip:20210213011615p:plain
他のGameObjectごとPlayable Directorを持つGameObjectの位置・回転に揃える

現在位置での初期化が出来たら、あとはアニメーションクリップ内のClip Transform Offsetsで位置関係を更に調整したらよさげ。


Q.条件に応じて複数Timelineの組み合わせ、開始終了制御したい

??


Q.モーフの制御用ボーン(シェイプキーのドライバー)の状態管理、アニメーション内で変更された時の値の維持

ボーンは他のアニメーション再生すると初期化されてしまう(?)のでShape Keyが良さそう。


Q.服や装備の着脱

別々のモデルとして作ってParent Constraintでくっつける感じ?


Blender

Q.Blender<->Unity間のマテリアル取り回しベストプラクティス

それぞれ独自のマテリアルを作るしかない?わからん。


Q.Chinポのサイズ維持ベストプラクティス


1.シェイプキーでメッシュ拡大
2.シェイプキー+ドライバーボーンのTransform
3.ボーンの拡大

Unity上で他のアニメーション再生しつつChinボーンのTransformを維持し続ける方法が分からないので、シェイプキーの値で管理するのが一番ラクそう。


Q.Mirrorモディファイア残したいしShape Key使いたい

A.ミラー残したデータを退避しつつ、Apply ModifierしたデータをUnity Asset内に名前をつけて保存が無難そう。