norablog-techのブログ

このブログは、自分の忘備録的にアウトプットするためのブログとなっております。

【Unity】「VRoidをUnityで動かす【Mixamo】#7

 


www.youtube.com

 

前回作成したTerrain上で、VRoidベースのキャラクターを動かします。 カメラの制御がまだおぼつきませんが、野原や丘を右に左に駆け巡ります。

 

 

こちらが今回のソースコードです。

AnimationStateController.cs

 

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

public class AnimationStateController : MonoBehaviour
{
    Animator animator;
    int isRunningHash;
    int isRunningRightHash;
    int isRunningLeftHash;
    int isMoveHash;
    int isJumpingHash;

    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
        isRunningHash = Animator.StringToHash("isRunning");
        isRunningRightHash = Animator.StringToHash("isRunningRight");
        isRunningLeftHash = Animator.StringToHash("isRunningLeft");
        isMoveHash = Animator.StringToHash("isMove");
        isJumpingHash = Animator.StringToHash("isJumping"); 
    }

    // Update is called once per frame
    void Update()
    {
        bool isRunning = animator.GetBool(isRunningHash);
        bool isRunningRight = animator.GetBool(isRunningRightHash);
        bool isRunningLeft = animator.GetBool(isRunningLeftHash);
        bool isMove = animator.GetBool(isMoveHash);
        bool isJumping = animator.GetBool(isJumpingHash);
        bool runPressed = Input.GetKey("w");                // 走る
        bool runRightPressed = Input.GetKey("d");                // 走る(右)
        bool runLeftPressed = Input.GetKey("a");                // 走る(左)
        bool jumpPressed = Input.GetKey("space");           // Jumpする

 

        //
        if (isRunning || isRunningRight || isRunningLeft)
        {
            // "isMove"ブール値を"true"に設定(動いている))
            animator.SetBool(isMoveHash, true);            
        } else
        {
            // "isMove"ブール値を"false"に設定(動いてない)
            animator.SetBool(isMoveHash, false);
        }

        // "w"キーが押された場合
        if (runPressed)
        {
            // "isRunning"ブール値を"true"に設定(走る)
            animator.SetBool(isRunningHash, true);
        }

        // "w"キーが押されていない場合
        if (!runPressed)
        {
            // "isRunning"ブール値を"false"に設定(止まる)
            animator.SetBool(isRunningHash, false);
        }

        // "d"キーが押された場合
        if (runRightPressed)
        {
            // "isRunning"ブール値を"true"に設定(走る)
            animator.SetBool(isRunningRightHash, true);
        }

        // "d"キーが押されていない場合
        if (!runRightPressed)
        {
            // "isRunning"ブール値を"false"に設定(止まる)
            animator.SetBool(isRunningRightHash, false);
        }

        // "a"キーが押された場合
        if (runLeftPressed)
        {
            // "isRunning"ブール値を"true"に設定(走る)
            animator.SetBool(isRunningLeftHash, true);
        }

        // "a"キーが押されていない場合
        if (!runLeftPressed)
        {
            // "isRunning"ブール値を"false"に設定(止まる)
            animator.SetBool(isRunningLeftHash, false);
        }

        // プレーヤーがJumpしていない状態、かつ、スペースキーが押された場合
        if (!isJumping && jumpPressed)
        {
            // "isJumping"ブール値を"true"に設定(Jumpする)
            animator.SetBool(isJumpingHash, true);
        }

        // プレーヤーがJumpしている状態、かつ、スペースキーが押されていない場合
        if (isJumping && !jumpPressed)
        {
            // "isJumping"ブール値を"false"に設定(Jumpをやめる)
            animator.SetBool(isJumpingHash, false);
        }
    }
}