スポンサーリンク

【Unity】Anima2DのTrex調査してみた①【Anima2D】【編集中】

2019年6月9日Anima2D, Unity, 編集中, 開発

Anima2Dで今回調査する対象は以下になります(きっしーのUnityエディタの動画です)

https://youtu.be/7C4orkRM4gI

このSceneがどのような構成で成り立っているか調べていきます。
Anima2Dを利用してスケルタルアニメーションを作成するまでの解説は別で行う予定です。

Hierarchyの構成

このSceneはざっくり以下で構成されています
①Main Camera(今回はTrexを追従するためのスクリプトをアタッチしています)
②Trex(今回のメインGameObjectであるTrex。スケルタルアニメーションの設定がされており、とKey入力を受け付けるコントローラーをアタッチしています)
③Jungle(背景の遠近感を出すためにSpriteをTrexより前のレイヤーに1、後ろのレイヤーに3設定してそれぞれ独立して移動しています)

Game画面のみの動画を作成しました。レイヤーの動きに注目してください。すごく感動しました。

https://youtu.be/66CFNdJRCZQ

Main Camera

今回のMainCameraはFollowスクリプトをアタッチしています。
ざっくり説明すると、メインカメラをTrexに追従するようにしています。
以下、Followスクリプトになります。その後もう少し解説します。

ソースを説明すると、targetにTrexのTransformコンポーネントをアタッチしており、offsetにはInspectorで設定した値が格納されており、MainCameraのポジションをTrex基準で調整できるようになっています。
Followスクリプトの説明は以上になります。
簡単なスクリプトなので説明することはほどんどありません。

Trex

以下、Trex配下のGameObject一覧です

①SpriteMeshes
 ⒈t_rex_leg_l
 ⒉t_body
 ⒊t_rex_jaw_open_back
 ⒋t_rex_jaw_open
 ⒌t_rex_leg_r
②Controls
 ⒈Control Hips
 ⒉Control Jaw
③IKs
 ⒈Head Ik CCD
 ⒉Tail Ik CCD
 ⒊R Foot Ik Limb
  ・R Toes Ik Limb
 ⒋L Foot Ik Limb
  ・L Toes Ik Limb
④Hips
 ⒈Tail 1
  ・Tail 2
   ・Tail 3
    ・Tail 4
 ⒉Upper Leg R
  ・Leg R
   ・Foot R
    ・Fingers R
 ⒊Upper Leg L
  ・Leg L
   ・Foot L
    ・Fingers L
 ⒋Spine 1
  ・Neck
   ・Head
    ・Jaw
     ・Jaw 2


見てわかる通り数が多すぎるので親要素であるTrexと、①〜④の親要素のみ今回は解説します。

Trex

Trex本体のObjectは以下で構成されています。

  • Animator
  • CharacterMotionスクリプト
  • PoseManagerスクリプト
  • IkGroupスクリプト

がアタッチされています。

Trex-Animator

TrexのAnimatorは今回TrexのIdleアニメーションとWalkアニメーションが設定されておりAnimationコントローラーで制御されています。
設定詳細は以下になります。(待機状態のアニメーションとアニメコントローラーです。)

基本的にIKのポイントで制御しており、通常状態としゃがんでいる状態の2点のみ設定されていますね。
思っていたよりもポイントは少なめでした。
こちらはFloat型で条件を設定している以外はよく見る設定になっています。

Trex-CharacterMotionスクリプト

こちらのスクリプトはキー入力された時にIdleアニメーションとWalkアニメーションを切り替えるために利用しています。
以下、CharacterMotionスクリプトになります。その後もう少し解説します。

ソースを説明すると、Updateで水平方向のキー入力を検知して、animatorのForwardに値をセットしてIdleアニメーションとWalkアニメーションを切り替えています。
また、検知した値が0<x,0>xを判断してTrexを左右どちらに向けるか制御しています。

Trex-PoseManagerスクリプト

PoseManagerは以下のプログラムが記述されており、Pose型のスクリプタブルオブジェクトを保持しています。

Poseクラスの定義は以下になります。

対応するパスと各パラメーターが定義されています。
この定義でbone位置を記録しています。
※Posesスクリプトの利用方法は別の記事で解説する予定です。

Trex-IkGroup

IKコンポーネントが設定されているGameObjectをまとめて管理しており、
毎フレーム最新の位置情報に更新しています。
以下、プログラムになります。

①SpriteMeshes

SpriteMeshesにはTrexを構成するためのSpriteが設定されています。
正確には、各部位毎のGameObjectにSpriteMeshInstanceコンポーネントがアタッチされており
そのコンポーネントにTrexを構成するためのSpriteの設定と対応するBoneのbind設定がされています。
 ※Anima2Dで必要なSpriteMeshのbind等は別記事で説明します。

②Controls

Controlsは空のGameObjectになっており、子であるControl HipsとControl JawともにControlスクリプトがアタッチされています。
処理は、毎フレームboneの位置を最新の位置に更新しているだけです。
以下、プログラム記載。

③IKs

IKsは空のGameObjectになっており、子階層にIKコンポーネントがアタッチされてあるObjectを配置しているだけです。

④Hips

Trexの全boneを親子階層で配置しています。
※親子階層にboneを組み立てbindする方法は別に記事を作成する予定です。

Jungle

【編集中】

※編集中の記事はお問い合わせ件数により更新順を優先させていただくことがあります。
 この記事、早く!って場合は、以下からお問い合わせください。

今回はざっくり説明しましたので、詳しく知りたい部分がありましたら
お問い合わせから連絡いただけると助かります。
以下、問い合わせ例一覧

  • 足一本が動かせるところまでを説明してほしい
  • 歩けるようになるまでを説明してほしい
  • 背景がループで移動するロジックを説明してほしい
  • アニメーションの切り替え方法を詳しく説明してほしい
  • Posesスクリプト(スクリプタブルオブジェクト)の説明をしてほしい

 

 

スポンサーリンク