【UnityC#講座】無料アセットでユニティちゃんに剣を振らせる


Unity2018.1.5f1
Windows10

剣振りユニティちゃん/トップ

今回はユニティちゃんに剣を振ってもらいます。
以下の3つの無料アセットをインポートしてください。

■ユニティちゃんに剣を振らせる

剣を振るアニメーションをセットする

まずはとりあえずユニティちゃんをSceneに置き、剣を振るアニメーションクリップをセットしたAnimatorControllerをセットして再生してみましょう。

剣振りユニティちゃん/Sceneに置く

剣を振るアニメーションクリップはAttack1を使います。

Project > Assets > mode > WomanWarrior > Attack1

アニメーションクリップはWomanWarriorの三角マークをクリックするとその中にあります。

剣振りユニティちゃん/WomanWarrior

Attack1を見つけたらそれをAnimatorControllerのウィンドウの中にドラッグ&ドロップで放り込みます。

剣振りユニティちゃん/AnimatorController/Attack1

そのAnimatorControllerをユニティちゃんのAnimatorにセットしたら再生してみてください。

剣振りユニティちゃん/アニメーション出ない

そうするとこのような中腰の姿勢になります。
なぜそうなるかと言うとアニメーションクリップの問題なので修正しましょう。

アニメーションクリップを修正する

再びAttack1をクリックしてください。
そしてInspector右上のEditをクリックします。

剣振りユニティちゃん/アニメーションクリップ/Edit

続いてRigのタブをクリックし、Animation TypeをHumanoidにしてからApplyをクリックします。
そうするとUnityに適したボーンを設置された人間型のオブジェクトだと誰でもそのアニメーションを再生できるようになります。

剣振りユニティちゃん/アニメーションクリップ/Rig/Humanoid

Configureのボタンが出たらOKです。

剣振りユニティちゃん/アニメーションクリップ/Rig/Configure

こうして再生すると剣を振るアニメーションが出るはずです。

剣振りユニティちゃん/剣なしAttack1

剣をセットする

次は剣をセットします。

Project > Assets > Simple Medieval Sword > Mesh > Medieval Sward

普通に出すとこんなにサイズが違います。

剣振りユニティちゃん/剣のサイズ

サイズを変える前にまずユニティちゃんの右手の子オブジェクトにします。
右てを探すのが面倒なのですが頑張って探してください。

unitychan > Character1_Reference > Character1_Hips > Character1_Spine1 > Character1_Spine2 > Character1_RightShoulder > Character1_RightArm > Character1_RightForeArm > Character1_RightHand

剣振りユニティちゃん/Hierarchy/右手

位置を合わせるのは面倒なのですがこんな感じに落ち着きました。

剣振りユニティちゃん/剣の位置/Scene

剣振りユニティちゃん/剣の位置/Transform

さて、無事に剣を振ってくれたでしょうか?

剣振りユニティちゃん/剣ありAttack1

スポンサーリンク

■剣が当たるようにする

CapsuleColliderを付ける

さあ次は実際に剣が相手に当たるようにしましょう。
まずは剣にColliderを付けます。
Colliderの種類は何でも良いのですが私はCapsuleColliderにしました。

剣振りユニティちゃん/CapsulCollider設置

サイズはこのようにしました。
Is Triggerは物理判定をなくすためのものなので、敵に当たっても振りぬくためにチェックを入れてください。

剣振りユニティちゃん/CapsulCollider設定

そして次で紹介するアニメーションイベントでColliderを出し入れするためにチェックを外して消しておきます。

剣振りユニティちゃん/CapsulCollider消しておく

アニメーションイベントを設定する

アニメーションイベントはアニメーションクリップで設定しておくと、アニメーションの遷移中にAnimatorControllerを通じてスクリプトに値を送ることができます。

再びAttack1のInspectorで編集をします。
今回はAnimationタブです。

剣振りユニティちゃん/アニメーションクリップ/Animationタブ

Eventsという文字の下のボタンを押すと目盛りにマークが出るのでイベントを起こしたいところにそれを合わせ、下の空欄に値を入力します。
今回は最初と最後に設置し、FunctionにそれぞれAttack1Start、Attack1Endと入力してください。

剣振りユニティちゃん/アニメーションクリップ/アニメーションイベント/Attack1Start

セットできたら最後にApplyをクリックして終わりです。

剣振りユニティちゃん/アニメーションクリップ/アニメーションイベント/Attack1End

AnimatorControllerを作り直す

今度は待機状態からマウス左クリックで攻撃するようにするので新たにAnimatorControllerを作ります。
まずThe Woman WarriorのアニメーションクリップのIdle1、Attack1の順に放り込みTransitionを互いから出るようにします。

剣振りユニティちゃん/AnimatorController/Transiton

Transitionが分からない方はこちらをお読みください。

【UnityC#講座】AnimatorControllerの使い方

ParametersはBoolでAttackと名付けました。
+ボタンから作ります。

剣振りユニティちゃん/AnimatorController/Transiton

TransitionはどちらもHas Exit Timeのチェックを外し、Idle1から伸びる方はAttackのTrueを、Attack1から伸びる方はAttackのFalseになるようにします。

剣振りユニティちゃん/AnimatorController/Transiton/Has Exit Time

剣振りユニティちゃん/AnimatorController/Transiton/Conditions

そしてユニティちゃんにAnimatorControllerをセットしましょう。
Apply Root Motionはチェックが入れてあるとアニメーションに合わせて移動してしまうのでチェックを外します。

剣振りユニティちゃん/Animator設定

Idle1をループするようになる

Idle1がループしないようになっていたので、先ほどAttack1でしたようにEditしましょう。
先ほどと同じAnimationタブからLoop timeを見つけチェックを入れます。

剣振りユニティちゃん/アニメーションクリップ/Loop time

そうするとIdle1のアニメーションを繰り返すようになります。
そして右下のApplyボタンをクリックしてください。

スクリプトを書く

以下のスクリプトをユニティちゃんにアタッチしてください。

次にユニティちゃんのInspectorにCapsuleColliderをつけた剣をCapsuleColliderの空欄に入れてください。

剣振りユニティちゃん/スクリプト設定

さて、無事に左クリックで剣を振れたでしょうか?

剣振りユニティちゃん/Idle1からAttack1

■剣が当たったらのけぞる役を作る

最後にユニティちゃんが振るう剣に触れたらのけぞるユニティちゃんを作ります。
今回はThe Woman WarriorのIdle1とHitのアニメーションクリップをその順番でAnimatorControllerに入れ、Transitionを互いにつけます。
構造は先ほどのAttack1を使ったAnimatorControllerとほぼ変わりません。

剣振りユニティちゃん/AnimatorController/Hit

Parametersも先ほどとは名称が違うだけです。

剣振りユニティちゃん/AnimatorController/Parameters/Damage

Transitionの設定も同じようにして欲しいのですが、違うのはHit→Idle1のものはHas Exit Timeを外さないことです。
それはアニメーションを最後まで流してから遷移するというもので、ダメージを受けた様子は最後まで流します。
しかし、アニメーションイベントでアニメーションが終わってから遷移するようにするので結果は外しても結果は変わりませんでした。
すいません、これはどちらでも良いです(汗)

剣振りユニティちゃん/AnimatorController/Transiton/Has Exit Timeにチェック入れる

できたら新しいユニティちゃんにセットをします。
今回もApply Root Motionは外してください。

剣振りユニティちゃん/Animator/ダメージ役

アニメーションイベントはDamageEndの1つだけ作りましょう。
Damageのアニメーションが終わったら待機状態に戻るようにするためです。

剣振りユニティちゃん/アニメーションイベント/DamageEnd

さて、スクリプトを書きましょう。

スクリプトでCapsuleColliderとRigidbodyを入れました。
これがないと剣のColliderに反応しません。
今回はタグを設定していませんが、剣にタグを設定しておけばそれに触れた時だけダメージを受けるようにできます。

さて、書けたら斬られ役のユニティちゃんにセットし、剣が届く位置に並べてください。
そうするとこのようになります。

剣振りユニティちゃん/Idle1からAttack1、Hit

斬られる前に相手がリアクションしてしまうように見えますが、とりあえず剣で相手にダメージを与えることができました。

今回はこれで終わりです。

■関連記事

【UnityC#講座】ユニティちゃんでもっとAnimator Controllerを上手く使いたい

【UnityC#講座】ユニティちゃんの表情を替える【SetLayerWeight】

【UnityC#講座】AnimatorControllerの使い方

【Unity】SetBoolでNull???【エラー】

【UnityC#講座】ユニティちゃんにパンチさせる

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

スポンサーリンク

目次に戻る