【Unity】「VRoidをUnityで動かす【Mixamo】#7
前回作成した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);
}
}
}