このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。
またUnityに慣れてきている方でも、もう少し知識や技術を磨きたい方にとっても有益な情報も記載していますので、もしよろしければご参照ください。
3Dオブジェクトに Rigidbodyをジャンプをさせる方法、初回は基本的なジャンプ、2回目は空中ジャンプの制御、今回は3回目で2段階のジャンプに、それぞれアニメーションを指定する方法です。
下の動画は一分間Unity講座 3Dオブジェクトのジャンプ Step3 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!
空中ジャンプのアニメーション制御
最初のジャンプアニメーション
次の手順で、AnimationController を修正します。
- 事前に取得済みの素材から「JUMP00」という素材を AnimationController に取り込んでおきましょう。
- Trigger型の Parameter を1つ用意します。名前を「Jump1Trigger」などの任意の名前にしておきます。
- 「Any State」から「JUMP00」への Transition を作成、作成方法は遷移元のステート(AnimationClip)で右クリック、「Make Transition」をクリック、遷移先のステートでドロップ。 Inspector で次のようにパラメータを指定 ・Conditions:Jump1Trigger を指定
- 「JUMP00」から「WAIT01」へのTransition を作成します。 Inspectorでのパラメータはそのまま
補足
「JUMP00」は通常のジャンプのアニメーションです。他にもジャンプのアニメーションがありますので、任意のものを選択してください。 ジャンプアニメーションへは事前に用意してある複数のState(AnimationClip)、どこからでも遷移できるようにします。そこで水色の「AnyState」というステートから遷移を作成します。「AnyState」の上で右クリック、表示されたメニューから「Make Transition」を選択、「JUMP00」の上でドロップ&ダウンでトランジションを作成します。作成したTransitionの遷移条件には、ConditionsにでTrigger型のパラメータ「Jump1Trigger 」を指定します。また、Has Exit Time を false にしますが、AnyState から遷移した場合は、デフォルトで falseの状態になります。 「JUMP00」が終了したら、最初のStateの「WAIT01」に戻します。上と同じ要領でトランジションを作成します。Trigger型ので指定した場合、戻りのトランジションには何も指定しなくても大丈夫です。
スクリプトファイルを次のように修正します。
Animator animator; //Animator型の変数を宣言
void Start()
{
animator = GetComponent<Animator>(); //初期値を取得
}
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow) && jumpCount<=1)
{
rb.AddForce(transform.up * jumpPower);
if (jumpCount == 0) //もし最初のジャンプなら
{
//Parameter「Jump1Trigger」を呼び出す
animator.SetTrigger("Jump1Trigger");
}
jumpCount++;
}
}
Trigger型のパラメータを呼び出すには、Animatorコンポーネントが持つ SetTrigger()コンポーネントを使用します。引数には呼び出したいパラメーター名をダブルコーテーションで囲って入力します。ダブルクォーテーション内の文字列は間違えてもエラーを返しませんので、間違わないように注意しましょう。
二段ジャンプのアニメーション
さらに二段ジャンプ対応の Animation を作成します。
- 取得済みの素材から「UMATOBI00」という素材を AnimationController に取り込みます(任意のanimatorClipで結構です)
- Trigger型の Parameter を1つ用意します。名前を「Jump2Trigger」などの任意の名前にしておきます。
- 上の課題で作成した「JUMP00」から「UMATOBI00」への Transition を作成、Inspector で次のようにパラメータを指定 ・Has Exit Time:チェックを外し「false」に ・Conditions:Jump2Trigger を指定
- 「UMATOBI00」から「WAIT00」へのTransition を作成します。Inspectorでのパラメータはそのまま
二段ジャンプは最初のジャンプのアニメーションが発動している時のみ呼び出されます。従って「JUMP00」からのTransitionを作成します。
スクリプトファイルを以下のように修正します。
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow) && jumpCount<=1)
{
rb.AddForce(transform.up * jumpPower);
if (jumpCount == 0)
{
animator.SetTrigger("Jump1Trigger");
}
else //でなければ(二段ジャンプなら)
{
//Parameter「Jump2Trigger」を呼び出す
animator.SetTrigger("Jump2Trigger");
}
jumpCount++;
}
}
変数:jumpCount が 0 でない、つまり2段ジャンプなら 作成したparameter「Jump2Trigger」を呼び出します。
これで二段階のアニメーションを作ることが出来ました。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。