Unityでゲーム、アプリ開発

Unityで初めてゲームやアプリを作る人のための支援ブログです。

Unity アニメーションで移動、ジャンプ、ローリングを追加しよう 3Dゲーム作り②  

どうも今日もご機嫌よう。
ゆうきやんです。

なんかYouTubeのどっかの
動画の挨拶みたいですね笑笑

右の人見ても左の人見ても
はたもや振り返ってみても
みんなYouTube見てます笑笑

どうでもいいですね!笑笑

さぁ本題に入っていきましょう!


アニメーションで移動、ジャンプ、ローリングを追加しよう

前回の続きからになるので前回の記事も参考にしてください。
www.unityprogram.info

3Dでプロジェクトを開いてください。
※今回はキャラクターコントローラーとAnimatorの
Apply Root Motionを使ったアニメーションと座標位置の
連動によって動かす説明になります。



f:id:Phoenix9056:20200401030547j:plain

エディタ画面上部にあるWindow⇨Asset Storeから
RPG Character Mecanim Animationを検索して、
ダウンロード、インポートしてください。

※アセットストアの使い方が分からない方は下記記事を参考にしてください。
www.unityprogram.info


f:id:Phoenix9056:20200401032541j:plain

前回の続きでQuery-Chanを使っている方は、①のBodyPartsをクリックして、
Inspector内にある、Animatorにある②の...をクリックして、
③のRemove Componentをクリックして削除してください。

これからAnimatorを作っていくのですが、先程の
Animatorが存在していると新しく作ったAnimatorが反映されなくなります。


f:id:Phoenix9056:20200401033833j:plain

project内の好きな所でいいので右クリックを押して
Create⇨Animator Controllerをクリックして作成してください。
名前はLocomotionとします。

ダブルクリックしてAnimatorにある①の所でCreate State⇨Empty
クリックして①を作ってください。
Inspectorから名前を変更してIdleにします。

次に、②のMotionにある◉をクリックすると、
Select Motionが開かれるので、Unarmed-Idleを選択します。


f:id:Phoenix9056:20200401044830j:plain

上の赤枠のように先程と同じ手順で6個作っていきます。
場所の配置は自分の好きな所で構いません。

Forwardと名前をつけてMotion2Hand-Sword-Strafe-Forwardを選択。



Leftと名前をつけてMotion2Hand-Sword-Turn-Left-Loopを選択。

Rightと名前をつけてMotion2Hand-Sword-Turn-Right-Loopを選択。

Backと名前をつけてMotion2Hand-Sword-Strafe-Backwardを選択。

Jumpと名前をつけてMotion2Hand-Sword-Jumpを選択。

Rollと名前をつけてMotion2Hand-Sword-Roll-Forwardを選択。

6個作れたでしょうか?
Motionは完成した後に自分の好きなMotionに変更してみてください。

次にAnimatorの左上にあるParametersをクリックして①の+をクリックし、
Float⇨名前をForward、続いてFloatで名前をLateral
Triggerで名前をJump、Triggerで名前をRollとつけて②のようにしてください。

※詳しい作り方は下記記事を参照してみるのもいいかもしれません。
www.unityprogram.info


f:id:Phoenix9056:20200401051016j:plain

次に赤枠のように⇨を作っていきます。
Idleの上で右クリックを押して、Make Transitionをクリックすると、
Idleから矢印が伸びます。
そのままForwardまで持っていき、クリックするとIdleからForwardMotion
移り変わりますよ!って事で⇨が繋がります。

簡単に説明します!

Idleから他の⑤個全部行って帰ってくる⇨を作ってください。
JumpRollIdle以外JumpRollに行くだけの矢印を作ってください。

今度はIdle⇨Forwardの矢印をクリックしてInspector内にある
①のHas Exit Timeのチェックを外します。
②の+をクリックして③のConditionsを左から順番に
Forward、Greater、0.1にします。

同じような手順で、Forward⇨Idleは、チェックを外してForward、Less、0.1。



Idle⇨Leftはチェックを外して、Lateral、Less、-0.1。
Left⇨Idleはチェックを外して、Lateral、Greater、-0.1。

Idle⇨Rightはチェックを外して、Lateral、Greater、0.1。
Right⇨Idleはチェックを外して、Lateral、Less、0.1。

Idle⇨Backはチェックを外して、Forward、Less、-0.1。
Back⇨Idleは変更なし。

他の5個⇨Jumpはチェックを外して、Jump。
Jump⇨Idleは変更なし。

他の5個⇨Rollはチェックを外して、Roll。
Roll⇨Idleは変更なし。

ちょっと細かくてめんどくさいですね!笑笑


f:id:Phoenix9056:20200401054614j:plain

Hierarchy内にあるQuery-Chanをクリックして、
Inspector内にある②のAdd Componentをクリック。
③のAnimatorを追加してください。

④のControllerに先程作成したAnimator Controller
⑤のLocomotionをドラッグ&ドロップします。

次に④にあるAvatarの◉をクリックして、
PQchan_ChristmasuAvatarを選択しましょう。

次の作業で最後です!


前回の記事の続きからやっている方は、Moveスクリプト
足りない部分を追加するか一回削除してコピペしてください。

初めての方はProject内の自分が分かりやすい所に
右クリック⇨Create⇨C# Scriptを作成して名前をMoveにしてください。

次のスクリプトをコピー&ペーストするか同じ記述にしましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{

    public float speed = 6.0F;          //歩行速度
    public float jumpSpeed = 8.0F;      //ジャンプ力
    public float gravity = 20.0F;       //重力の大きさ
    public float rotateSpeed = 3.0F;    //回転速度

    //CharacterController型を変数controllerで宣言します。
    private CharacterController controller;
    //Animator型を変数animatorで宣言します。
    private Animator animator;
    //キャラクターの移動速度情報。
    private Vector3 moveDirection = Vector3.zero;
    //float型を変数hとvを宣言します。
    private float h, v;

    void Start()
    {
        //GetComponentでCharacterControllerを取得して変数controllerで宣言します。
        controller = GetComponent<CharacterController>();
        //GetComponentでAnimatorを取得して変数animatorで宣言します。
        animator = GetComponent<Animator>();
    }

    
    void Update()
    {
        //入力値による移動処理
        h = Input.GetAxis("Horizontal");    //左右矢印キーの値
        v = Input.GetAxis("Vertical");      //上下矢印キーの値

        //もしCharacterContorollerが地面にいたら。
        if (controller.isGrounded)
        {
            //Animator内のFloatで設定されたForwardに"Vertical"上下キーの値を適用します。
            animator.SetFloat("Forward", Input.GetAxis("Vertical"));
            //Animator内のFloatで設定されたLateralに"Horizontal"左右キーの値を適用します。
            animator.SetFloat("Lateral", Input.GetAxis("Horizontal"));

            //もしスペースキーが押された時の処理。
            if (Input.GetButtonDown("Jump"))
            {
                //AnimatorのTriggerで設定したJumpを実行します。
                animator.SetTrigger("Jump");
            }

            //もしマウスボタンの右クリックが押された時の処理。
            if (Input.GetMouseButtonDown(1))
            {
                //AnimatorのTriggerで設定したRollを実行します。
                animator.SetTrigger("Roll");
            }
            //GameObjectの位置や動きを取得
            gameObject.transform.Rotate(new Vector3(0, rotateSpeed * h, 0));
            moveDirection = speed * v * gameObject.transform.forward;
            //もしスペースキーが押されたらInputされている
            //"Jump"を取得してスペースキーでジャンプする。
            if (Input.GetButton("Jump"))
                moveDirection.y = jumpSpeed;
        }
        //重力による加速
        moveDirection.y -= gravity * Time.deltaTime;
        //GameObjectの動き
        controller.Move(moveDirection * Time.deltaTime);

    }

}

前回の続きからの人はそのまま反映して
Inspector内のSpeedにしてください。

作成したスクリプトMove
Hierarchy内にあるQuely-Chanにドラッグ&ドロップして
Inspector内のMoveスクリプトにあるSpeedにしましょう。

さあいよいよ再生です!

操作方法は、上下左右矢印キーで移動して、
スペースでジャンプします。

右クリックで前方にローリング(前転)します。

今回なんでこのアニメーションかと言うと
次回剣を持たせて攻撃できるようにするからです。

ここまで作れたら好きなキャラに設定したり、
Motionを自分の好きなものに変えてみてください。

移動

f:id:Phoenix9056:20200401102410g:plain

ジャンプ

f:id:Phoenix9056:20200401102658g:plain

ローリング

f:id:Phoenix9056:20200401102842g:plain

女性キャラ使うとすごい天然女子みたいになりますが笑笑

ご視聴ありがとうございました。

※Unity学習をしていく方は下記カテゴリを参考にしてください。
www.unityprogram.info

※初心者編はこちら
www.unityprogram.info

※オススメアセットはこちら。
www.unityprogram.info