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);
        }
    }
}

 

 

 

【Unity】Terrainで地面を作る


www.youtube.com

 

UnityのTerrainを使って、地面を作ります。
Freeのアセットを使い、少し見栄えをよくしたいと思います。

 

使用ソフトウェア:
Unity Ver.2021.3.15f1

使用アセット:
アセットストア
https://assetstore.unity.com/?locale=ja-JP

AllSky Free - 10 Sky / Skybox Set
https://assetstore.unity.com/packages/2d/textures-materials/sky/allsky-free-10-sky-skybox-set-146014

Nature Starter Kit 2:
https://assetstore.unity.com/packages/3d/environments/nature-starter-kit-2-52977

Realistic Tree 9 [Rainbow Tree]
https://assetstore.unity.com/packages/3d/vegetation/trees/realistic-tree-9-rainbow-tree-54622

Terrain Toolkit Re:
https://assetstore.unity.com/packages/tools/terrain/terrain-toolkit-re-192689

 

ご注意:
Unityはバージョンが変わると使い方が大きく変わる場合があります。
他バージョンではこの動画と動作が異なる場合があります。
アセットに関しても同様です。

 

Unityには「Terrain」という地面を作る機能があります。

 

今回はアセットを使って少し見栄えのいいものにしたいと思います。

アセットストアから上記のアセットをインポートしておいてください。

 

 

ヒエラルキーに「3Dオブジェクト」→「Terrain(地形)」で、Terrainを作ります。

 

 

 

原点が端になっています。

わかりにくいので位置と大きさを変えたいと思います。

設定のアイコンが小さくてわかりにくいんですが、一番右側の歯車が付いているものをの開きます

 

メッシュ解像度、ここで縦、横、高さを設定します。

大きすぎるので、50050060に設定しました。

 

 

さらに位置を調整しました。

X:-250Z:-250にして、原点を中央部持ってきます。

 

 

コンポーネントを追加」をクリックして、「Terrain tool Kit 」(C#)を追加します。

 

 

追加するとすると下にGUIが追加されます。

そしてこれを使うとある程度、自動的に地面をデザインすることができます。

 

 

※今回、具体的に何をどう設定したのかは、動画をご覧ください。

 かなりグダグダですが…。

 

樹木は2種類使いました。

真ん中のアイコンが、樹木をペイントするツールです。

 

 

次にスカイボックスを設定します。

これライトライティングの設定になるのですが、すごくわかりにくいところにあります。

 

 

環境のタブにスカイボックスのマテリアルを選ぶ場所があります。

 

 

インポートしたマテリアルを選びます。

 

 

ゲームの画面にするとこんな風に見えます。

 

 

以上、簡単に説明しました。

詳しくは動画をご覧ください。

 

ではでは。

 

 

【Unity】「VRoidをUnityで動かす」#6(Terrainとスカイボックス)【Mixamo】

youtu.be

今回は、Terrainとスカイボックスの設定を、Unityのプロジェクト上で行っていきます。

 

私もまだ勉強を始めたばかりなので、勘違いや間違いがあるかもしれませんが、ご容赦ください。

 

Terrain Toolkit Re:
URL:https://assetstore.unity.com/packages/tools/terrain/terrain-toolkit-re-192689

AllSky Free - 10 Sky / Skybox Set:
URL:https://assetstore.unity.com/packages/2d/textures-materials/sky/allsky-free-10-sky-skybox-set-146014

 

【Unity】「VRoidをUnityで動かす」#5(プログラムと状態遷移の連携)【Mixamo】

youtu.be

今回は、VRoideのキャラクターにMixamoで適用したアニメーションとキャラクタを操作するためのプログラムとの連携を、Unityのプロジェクト上で行っていきます。

☆この動画を作るにあたって、「iHeartGameDev」チャネル様を参考にさせていただいております。
素敵な動画をありがとうございます。
URL:https://www.youtube.com/c/iHeartGameDev

私もまだ勉強を始めたばかりなので、勘違いや間違いがあるかもしれませんが、ご容赦ください。

 

【Unity】「VRoidをUnityで動かす」#4(アニメーションの適用)【Mixamo】


www.youtube.com

今回はVRoideのキャラクターにMixamoで適用したアニメーションを、Unityのプロジェクト上に展開していきます。
なお、この動画内の説明、前半は少し間違っています。
間違いやすいところなので、そこはわざと残し、15分ごろから、訂正と説明を行っています。
ご注意ください。

☆この動画を作るにあたって、「iHeartGameDev」チャネル様を参考にさせていただいております。
素敵な動画をありがとうございます。
URL:https://www.youtube.com/c/iHeartGameDev


私もまだ勉強を始めたばかりなので、勘違いや間違いがあるかもしれませんが、ご容赦ください。

 

ソースコード(これだけです):

AnimationStateController.cs

 

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

public class AnimationStateController : MonoBehaviour
{
    Animator animator;
    int isRunningHash;
    int isFastRunningHash;
    int isJumpingHash;

    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
        isRunningHash = Animator.StringToHash("isRunning");
        isFastRunningHash = Animator.StringToHash("isFastRunning");
        isJumpingHash = Animator.StringToHash("isJumping"); 
    }

    // Update is called once per frame
    void Update()
    {
        bool isRunning = animator.GetBool(isRunningHash);
        bool isFastRunning = animator.GetBool(isFastRunningHash);
        bool isJumping = animator.GetBool(isJumpingHash);
        bool runPressed = Input.GetKey("w");                // 走る
        bool fastRunPressed = Input.GetKey("left shift");   // 早く走る
        bool jumpPressed = Input.GetKey("space");           // Jumpする

        // プレイヤーが走っていない状態、かつ、"w"キーが押された場合
        if (!isRunning && runPressed)
        {
            // "isRunning"ブール値を"true"に設定(走る)
            animator.SetBool(isRunningHash, true);
        }

        // プレイヤーが走っている状態、かつ、"w"キーが押されていない場合
        if (isRunning && !runPressed)
        {
            // "isRunning"ブール値を"false"に設定(止まる)
            animator.SetBool(isRunningHash, false);
        }

        // プレーヤーが速く走っていない状態、かつ、"w"キーと"左Shift"キー両方を押した場合
        if (!isFastRunning && (runPressed && fastRunPressed))
        {
            // "isFastRunning"ブール値を"true"に設定(早く走る)
            animator.SetBool(isFastRunningHash, true);
        }

        // プレーヤーが速く走っていない状態、かつ、"w"キー、または、"左Shift"キー、どちらかが"押されていない"場合
        if (isFastRunning && (!runPressed || !fastRunPressed))
        {
            // "isFastRunning"ブール値を"false"に設定(早く走るのをやめる。走るか、止まるかは押されているキー次第)
            animator.SetBool(isFastRunningHash, false);
        }

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

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

 

 

【Unity】「VRoidをUnityで動かす」#3(アニメーションの準備)【Mixamo】

youtu.be

今回はVRoideのキャラクターにMixamoで適用したアニメーションを、Unityのプロジェクト上に展開するための準備を行います。

私もまだ勉強を始めたばかりなので、勘違いや間違いがあるかもしれませんが、ご容赦ください。