引き続きUnity3回目です。
Unity3Dで2D物理シミュレーションゲームを作ってみよう – Mokosoft開発者ブログ
Unity3Dで2D物理シミュレーションゲームを作る:プログラム編 – Mokosoft開発者ブログ
2回目は人気なし。
キャラクタのアニメーションと衝突検知の方法を紹介します。
キャラクタのアニメーションは単純に考えれば、2枚以上の絵を用意して、交互に表示をすればよいだけですが、プログラムで制御するのはめんどいですよね。
ここではUnityのMecanimを利用します。
Sceneビューないしはヒエラルキビューからキーウィを選択して、AddComponentを行います。
Miscellaneousの中からAnimatorを選びましょう。
次にWindowからAnimationビューと、Animatorビューを選んで、画面内に表示させておきましょう。
キーウィを選択したままの状態で、Animationビューを開き、
空白のコンボボックスを選択すると、[Create New Clip]という選択肢が表示されるので、それを選択します。
Animationファイルを保存するダイアログが表示されるので、適当に名前をつけて保存してください。
その後、Add Curveを選択し、
Spriteを選択して、右の+を選択します。
Flash的なアニメーションタイムラインが生成されます。
最初のキーフレームと最後のキーフレームの間に、プロジェクトビューからSpriteを選んでドロッグアンドドロップすると、自動的に新しいキーフレームが作成されます。
この時点で自動的にAnimatorに作成したAnimationが設定されて、ゲームを開始すると、キャラクタがアニメーションするようになります。
rigidbody2DをComponentに設定している場合は、[Apply Root Motion]のチェックをOFFにしておきましょう。
これで動かしてみると、確かにアニメーションするのですが、この画像だと常に左向きにアニメーションしてしまいます。
右に移動するときには、右向きにしたいですよね。
ここでMecanimの本領発揮です。
先ほどと同様に、アニメーションを作成します。
今度は[kiwi@run_right]としました。
Spriteとアニメーションも同様に設定した上で、Transition→RotationをAdd Curveします。
展開して、Rotation.yのキーフレームを一つのみにして、180を設定しましょう。
するとAnimatorビュー上に、新しくkiwi@run_rightが現れます。
ここで、条件によるアニメーションを設定することができます。
今はkiwi@run(左向きの足踏み)がデフォルトアニメーションに設定されているので、オレンジ色で表示されています。
まずは、Animatorの中に条件分岐で利用する変数を作成します。
Animatorの左下にあるParametersの+ボタンからBoolを選択します。
Kiwi_Left という名前にして、デフォルトは左向きにしておくので、チェックを付けておきましょう。
kiwi@runを右クリックしてMakeTransionを選択
kiwi@run_rightへつなげます
矢印を選択するとインスペクタに上記画面が表示されます。
ここで、Conditions(条件)の所で、Kiwi_Leftがfalseになった場合、という条件をつけます。
これで、Kiwi_Left変数の如何によって、アニメーションがkiwi@runからkiwi@run_rightへ変わる、ということになります。
上のタイムライン部分では、Transitionにかかる時の時間軸が表示されています。
これが、最初はお互いのアニメーションをまたぐ形になっているので、クリンと回転するアニメーションが見えるようになります。
ここでは、さっと切り替えたいので、Transition時間はないように設定をしています。
さて、同様に、kiwi@run_rightからkiwi@runへ切り替わる時の条件を追加しましょう。
右向きから左向きに変わるときは、Kiwi_Leftがtrueになった時です。
簡単ですね。
後は、プログラムから、この変数をいじってやれば、そのタイミングでアニメーションが切り替わるという寸法です。
本当は、物理シミュレーションに関係ない処理をFixedUpdateに書くのはいけないと思うのですが、めんどくさいので、FixedUpdateに追記します。
Unityの基本を思い出しましょう。
オブジェクトに各種コンポーネントをあれこれつけて、処理をするわけなので、書くオブジェクトに紐付いているコンポーネントを取得する方法があります。
今回、変更したい変数はそのコンポーネントの中に存在するので、そこまで階層を掘るわけです。
kiwi.GetComponent<Animator>()
とすることで、kiwiオブジェクトに設定しているAnimatorコンポーネントを取り出すことができます。
あとは、Animatorコンポーネントがもつメソッドで変数の値を変更してやればOKです。
今回作成したものをFLASHに書き出して
今までの内容だけならキーウィは画面外へ飛び出していくのですが、壁をつくって落ちないようにしています。
空のオブジェクトにBoxColider2Dをつけて、こんな感じでかこってやればOK。
てか今回衝突検知やる余裕なかったですね。また次回。
コメント