読者です 読者をやめる 読者になる 読者になる

Mokosoft開発者ブログ

こんなブログ読んでも時間の無駄ですよ

【第3回目】Unityプログラミング講座?アニメーションと衝突検知

f:id:mad_ochi:20140331233525p:plain

引き続きUnity3回目です。

 

Unity3Dで2D物理シミュレーションゲームを作ってみよう - Mokosoft開発者ブログ

Unity3Dで2D物理シミュレーションゲームを作る:プログラム編 - Mokosoft開発者ブログ

2回目は人気なし。

 

キャラクタのアニメーションと衝突検知の方法を紹介します。

キャラクタのアニメーションは単純に考えれば、2枚以上の絵を用意して、交互に表示をすればよいだけですが、プログラムで制御するのはめんどいですよね。

ここではUnityのMecanimを利用します。

Sceneビューないしはヒエラルキビューからキーウィを選択して、AddComponentを行います。

Miscellaneousの中からAnimatorを選びましょう。

 

f:id:mad_ochi:20140331234850p:plain

次にWindowからAnimationビューと、Animatorビューを選んで、画面内に表示させておきましょう。

 

キーウィを選択したままの状態で、Animationビューを開き、

f:id:mad_ochi:20140331234936p:plain

空白のコンボボックスを選択すると、[Create New Clip]という選択肢が表示されるので、それを選択します。

Animationファイルを保存するダイアログが表示されるので、適当に名前をつけて保存してください。

 

その後、Add Curveを選択し、

f:id:mad_ochi:20140331235115p:plain

Spriteを選択して、右の+を選択します。

 

f:id:mad_ochi:20140331235145p:plain

Flash的なアニメーションタイムラインが生成されます。

最初のキーフレームと最後のキーフレームの間に、プロジェクトビューからSpriteを選んでドロッグアンドドロップすると、自動的に新しいキーフレームが作成されます。

この時点で自動的にAnimatorに作成したAnimationが設定されて、ゲームを開始すると、キャラクタがアニメーションするようになります。

f:id:mad_ochi:20140401000846p:plain

rigidbody2DをComponentに設定している場合は、[Apply Root Motion]のチェックをOFFにしておきましょう。

 

これで動かしてみると、確かにアニメーションするのですが、この画像だと常に左向きにアニメーションしてしまいます。

右に移動するときには、右向きにしたいですよね。

ここでMecanimの本領発揮です。

 

f:id:mad_ochi:20140401002542p:plain

先ほどと同様に、アニメーションを作成します。

今度は[kiwi@run_right]としました。

Spriteとアニメーションも同様に設定した上で、Transition→RotationをAdd Curveします。

f:id:mad_ochi:20140401002811p:plain

展開して、Rotation.yのキーフレームを一つのみにして、180を設定しましょう。

 

f:id:mad_ochi:20140401003122p:plain

するとAnimatorビュー上に、新しくkiwi@run_rightが現れます。

ここで、条件によるアニメーションを設定することができます。

今はkiwi@run(左向きの足踏み)がデフォルトアニメーションに設定されているので、オレンジ色で表示されています。

 

まずは、Animatorの中に条件分岐で利用する変数を作成します。

f:id:mad_ochi:20140401003324p:plain

 

Animatorの左下にあるParametersの+ボタンからBoolを選択します。

Kiwi_Left という名前にして、デフォルトは左向きにしておくので、チェックを付けておきましょう。

 

f:id:mad_ochi:20140401003553p:plain

 

kiwi@runを右クリックしてMakeTransionを選択

 

f:id:mad_ochi:20140401003913p:plain

 

kiwi@run_rightへつなげます

 

f:id:mad_ochi:20140401003936p:plain

 

矢印を選択するとインスペクタに上記画面が表示されます。

ここで、Conditions(条件)の所で、Kiwi_Leftがfalseになった場合、という条件をつけます。

これで、Kiwi_Left変数の如何によって、アニメーションがkiwi@runからkiwi@run_rightへ変わる、ということになります。

上のタイムライン部分では、Transitionにかかる時の時間軸が表示されています。

これが、最初はお互いのアニメーションをまたぐ形になっているので、クリンと回転するアニメーションが見えるようになります。

ここでは、さっと切り替えたいので、Transition時間はないように設定をしています。

 

さて、同様に、kiwi@run_rightからkiwi@runへ切り替わる時の条件を追加しましょう。

f:id:mad_ochi:20140401004329p:plain

f:id:mad_ochi:20140401004342p:plain

 

右向きから左向きに変わるときは、Kiwi_Leftがtrueになった時です。

簡単ですね。

 

後は、プログラムから、この変数をいじってやれば、そのタイミングでアニメーションが切り替わるという寸法です。

f:id:mad_ochi:20140401004642p:plain

 

本当は、物理シミュレーションに関係ない処理をFixedUpdateに書くのはいけないと思うのですが、めんどくさいので、FixedUpdateに追記します。

 

Unityの基本を思い出しましょう。

オブジェクトに各種コンポーネントをあれこれつけて、処理をするわけなので、書くオブジェクトに紐付いているコンポーネントを取得する方法があります。

今回、変更したい変数はそのコンポーネントの中に存在するので、そこまで階層を掘るわけです。

 

kiwi.GetComponent<Animator>()

とすることで、kiwiオブジェクトに設定しているAnimatorコンポーネントを取り出すことができます。

あとは、Animatorコンポーネントがもつメソッドで変数の値を変更してやればOKです。

 

今回作成したものをFLASHに書き出して

ここにおいておきます

 

今までの内容だけならキーウィは画面外へ飛び出していくのですが、壁をつくって落ちないようにしています。

f:id:mad_ochi:20140401005630p:plain

空のオブジェクトにBoxColider2Dをつけて、こんな感じでかこってやればOK。

 

てか今回衝突検知やる余裕なかったですね。また次回。