Unityでゲーム、アプリ開発

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

Unity 移動、攻撃、ジャンプをアニメーションで動かしてみよう Unity学習16

どうもこんばんはゆうきやんです!
最近ずっとパソコンを使っているので
目がしょぼしょぼしています。

目が疲れてきた時はスマホ
ゲームをしています。
逆効果ですね!!笑笑

冗談は置いといて、本題に入っていきましょう!


移動、攻撃、ジャンプをアニメーションで動かしてみよう!

f:id:Phoenix9056:20200229224458j:plain

まず3Dでプロジェクトを開いてください。


f:id:Phoenix9056:20200326041803j:plain

次に、エディタ上にあるWindow⇨Assets Storeより
Warrior Pack Bundle 2 FREEをダウンロードしてインポートしてください。
※アセットの使い方が分からない方は下記記事を参考にしてください。
phoenix9056.hatenablog.com


f:id:Phoenix9056:20200326042822j:plain

エディタ画面に戻って、①のHierarchyの+から3D Objectより②の>b>Paneを作成してください。
次に③と④の▶︎をクリックしてファイルを開いていき、
⑤のPrefabs内にある⑥をドラッグしながらScene内のPlaneの上に
設置しましょう。


f:id:Phoenix9056:20200326044047j:plain

Project内にある①のAssetをクリックして②のAnimator Controller
マウスの右クリックCreateAnimator Controllerをクリックして作成します。
今回名前はMoveとしますが好きな名前で構いません。


f:id:Phoenix9056:20200326044558j:plain

作成したAnimator Controllerをダブルクリックすると
次の様な画面になります。

Animator Controllerとはキャラクターやオブジェクトのアニメーションクリップや
関連するアニメーション遷移のセットを配置し管理できます。
※Unity引用

次に①の何もない所で右クリックを押して、①のCreate Stateを選択。
②のEmptyをクリック。


f:id:Phoenix9056:20200326050225j:plain

①の様に四角いボックスが現れます。名前を変えたいので、
②の部分をIdleに変更してください。
Inspector内にあるMotionの③の◉をクリックして
Idleで続いている3番目のIdleを選択してエンターキーを押してください。
コレで止まった状態の時のアニメーションが設定されます。


f:id:Phoenix9056:20200326090520j:plain

同じ様な手順で①にWolkを作って、Motionには上から3番目のRunをつけます。
②はJumpと作りますがMotionがインポートしたアセットには無いので色々と理由があって最後に追加します。
③にAttackと作り、Motionは同じく上から3番目のAttack1を追加してください。


f:id:Phoenix9056:20200326091657j:plain

次に、①のParametersをクリックして、②のをクリックし、
Triggerを選択して名前を②のAttackにします。
次に、同じ手順でFloatを選択して名前を③のWolkにします。
最後に、またTriggerを選択して名前を④のJumpにします。

※この部分の名前は後でアニメーションを動かすスクリプト
影響してくるので間違えない様にしてください。


f:id:Phoenix9056:20200326092726j:plain

今度は①のIdleをマウスの右クリックを押して、
Make Transitionをクリックすると②の矢印が表示されるので
③のWolkまで持っていき、クリックしてください。


f:id:Phoenix9056:20200326093148j:plain

上記の画像の様に、Wolkを右クリック⇨Make Transition
Idleでクリックして返ってくる矢印など同じ様に作ってください。


f:id:Phoenix9056:20200326095552j:plain

今度は、①のIdleからWolkに伸びる矢印をクリックしてください。
Inspector内にある②のHas Exit Timeチェックボックスをクリックして
空白にしてください。

Has Exit Timeとは簡単に説明します。
アニメーションの動作が終わるまで、
次のアニメーショには変わりません。
例えば、止まってる時のアニメーション、歩いている時のアニメーションは、
roopしてずっと再生している設定に基本的になっているのですが、
Has Exit Timeを使用していると動作が終わらないので
アニメーションは変わりません。
そんな状態でもチェックを外す事で別のアニメーションに変えれますよって事ですたい。

次に③の+を押して④にWolkを選択、⑤は間違えて付けたので気にせずに、
⑥にGreaterとLessがあるのですが、Greaterを選択。
⑦に0.1と記入してください。

続いて、同じ様な手順でWolk⇨IdleはHas Exit Timeチェックボックス外して
+⇨Wolk⇨Less⇨0.1と記入。

WolkからJumpHas Exit Timeのチェックを外して+⇨Jumpを選択。

IdleからJumpHas Exit Timeのチェックを外して、Jumpを選択。

JumpからIdleはそのままで、Has Exit Timeにチェックを入れたまま、ありのまま。

IdleからAttackHas Exit Timeのチェックを外して、Attackを選択。

AttackからIdleはそのまま、ありのままでお願いします。


f:id:Phoenix9056:20200326103051j:plain

前に設定を伸ばしていたJumpのモーションなのですが、
アセットをダウンロードして追加します。
こんな形でアセットからアニメーションをインポートして
好きなアニメーションをつけて頂けたらと思います。

エディタ上にあるWindow⇨Assets Storeで開いて、
検索窓よりHuge FBX Mocap Library part1と入力して
ダウンロードとインポートをしてください。

アニメーションの量がとても多いのでダウンロードと
インポートに時間がかかると思います。

そんな時は必要なものだけインポート!!

f:id:Phoenix9056:20200326104520j:plain

①のNoneをクリックして全てのチェックボックスを外します。
そして②の90_08.fbxにチェックを入れてインポートすると一瞬です。

申し訳ないことに普通のジャンプじゃつまらないと思って
変化球入ったアニメーションになってます。

先程の手順を踏んでJampのMotionにこの90_08を選択してください。


f:id:Phoenix9056:20200326105940j:plain

④のKnightをクリックしてInspector内にある
①に先程作ったAnimator ControllerのMoveを
ドラッグ&ドロップするか、選択してください。

②のCharacter ControllerをInspector内の一番下にある
Add Componentから追加してください。
追加の方法がよく分からない方は下記記事を参考にしてください。
phoenix9056.hatenablog.com

画像に表示されている数字と同じ様にしてください。
慣れている人は自分なりに設定してもいいのですが、
小さすぎたり、大きすぎたりするとキャラクターのアニメーションも
おかしくなるわでてんわやんわになります。

次に③のActionという名前でProject内のAssetの所で
右クリック⇨Create⇨C#Scriptで作成してください。

次のコードをコピー&ペーストするか、自分で記述して覚えてください。
上手くいかない時はコピペしましょう!
僕は間違いに気づかずコピペを結局した時ありました笑笑
スクリプトの作り方が分からない方は下記記事を参考にしてください。
phoenix9056.hatenablog.com

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

public class Action : MonoBehaviour
{
    //CharacterController型を変数characterControllerで宣言します。
    private CharacterController characterController;
    //Animator型を変数animatorで宣言します。
    private Animator animator;
    //Inspctorで変える事のできるpublicでスピードを宣言します。
    public float wolkSpeed;
    //Vector3型を変数velocityで宣言します。
    private Vector3 velocity;

    void Start()
    {
        //GetComponentで変数にCharacterControllerを取得するよ。
        characterController = GetComponent<CharacterController>();
        //以下同文
        animator = GetComponent<Animator>();

    }


    void Update()
    {
        //もしcharacterControllerがisGroundedな場合
        if (characterController.isGrounded)
        {
            //元々UnityにInputされている前後左右のプログラムを使うよ。
            velocity = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
            //重力が0.1。
            if (velocity.magnitude > 0.1f)
            {
                //アニメーターのWolkを使って動きます。
                animator.SetFloat("Wolk", velocity.magnitude);
                transform.LookAt(transform.position + velocity);
            }
            else
            {
                //もし歩いてなければスピード0でIdleに戻るよ。
                animator.SetFloat("Wolk", 0f);
            }
            //もしマウスの左クリックをされたらアニメーションのTriggerで設定したAttackを実行するよ。
            if (Input.GetMouseButtonDown(0))
            {
                animator.SetTrigger("Attack");
            }

            //もしUnityのInputにある スペース= Jumpが押されたら
            //アニメーターのJumpを実行します。
            if (Input.GetButtonDown("Jump"))
            {
                animator.SetTrigger("Jump");

            }

        }
    }
}

作ったスクリプト③のActionを
ドラッグして④のKnightにドロップ(アタッチ)してください。
Inspectorからスピードを好きな数字で変えてください。

さあ疲れましたよね!成功の時です!!

再生してみましょう!
上手くいかなかった場合お問い合わせから連絡をお願いします。
僕にもスペルミスや間違いはもちろんあります。
参考にもなるので是非!



ちなみにgif動画で。
移動。

f:id:Phoenix9056:20200326120032g:plain

攻撃。
f:id:Phoenix9056:20200326120119g:plain

ジャンプ。
f:id:Phoenix9056:20200326120216g:plain
まあ最後は落ちてしまってチーンですねw



※キャラクターがカメラを追いかける方法はこちらから
phoenix9056.hatenablog.com


※Unityを学習していきたい方は下記カテゴリを。
phoenix9056.hatenablog.com

※初心者編はこちら。
phoenix9056.hatenablog.com

※Assetなどのオススメエラー解消はこちらら。
phoenix9056.hatenablog.com