Unityアセット 水の球を操る

 

 

今回は、Unityアセットストアのアセットを使用して、水の球を自在に操るようなシーンを作成してみます。

 

 

 

おー💨超能力や魔法みたいでかっこいいね。

 

 

 

アセットについては、「Piloto Studio」様の「Water RPG Spell Pack (41 VFX)」を購入し、使用させていただきました。

 

 

 

 

 

 

 

 

「Water RPG Spell Pack (41 VFX)」は、正しく設定すれば、ビルトイン 、URP、HDRP、URP(WebGL)で基本的に使用可能のようです。

 

 

 

今回は、Unityのバージョン2021.3.33f1のURP(WebGL)で作成していきます。

 

 

 

 

ステージ、Humanoidのキャラクターオブジェクトやそれを動かすスクリプトは、以下のようにあらかじめ準備していたものを使用します。

 

 

 

 

 

 

 

 

 

 

 

まず、「Water RPG Spell Pack (41 VFX)」のアセットをUnityにインポートします。

 

 

 

 

 

 

 

 

 

 

「Assets\Piloto Studio\Elemental VFX Mega Bundle\Water Spells Bundle」 にある

「VFX_WaterGuard」をHierarchyウインドウにドロップします。

 

 

 

 

 

 

 

何か紫?ピンク?だね。

 

 

 

どうやらShaderが「URP」に対応していないようですね。

 

 

 

「Assets\Piloto Studio\Elemental VFX Mega Bundle\Water Spells Bundle」にある「readme.pdf」を読んでみますと。

 

 

 

以下のサイトから、Shaderをダウンロードして、該当のShaderを適用すれば直るとのことです。

 

 

 

 

https://assetstore.unity.com/packages/vfx/shaders/piloto-studio-shaders-258376

 

 

 

 

マイアセットに追加して、シーンへインポートします。

 

 

 

 

 

 

 

 

「Assets\Piloto Studio\Shaders」にある、環境に適したunitypackageファイルをダブルクリックします。

 

 

 

 

今回は、URP(WebGL)の環境で作成しているので、「URP_WEBGLFIX.unitypackage」をダブルクリックします。

 

 

 

 

 

 

 

 

 

 

 

 

 

おー、綺麗な水の球になった。

 

 

 

位置を少し上にずらして、ゲームを実行してみましょう。

 

 

 

 

 

凄い!大きくなった!シールドっぽいのもある!

 

 

 

水の球の魔法で防御する想定で作られているアセットなんでしょうね。

 

 

 

今回は、この球をキャラクターの周りに浮かせて、操作するようにしたいので、いくらかの設定変更をします。

 

 

 

 

そのためには、水の球が大きすぎるので小さくします。

 

 

 

「VFX_WaterGuard」のscaleをXYZ全て「1」から「0.05」にします。

 

 

 

 

 

 

 

 

これだけでは、実行時のアニメーションで既定の「1.2」のサイズに戻されてしまいますので、「Animator」の「Remove Component」で今回はアニメーションを無効にします。

 

 

 

 

 

 

 

 

 

 

 

 

大分、小さくなりましたね。それでは、今回は、この水の球をキャラクターの周りに旋回するコードを作ってみましょう。

 

 

 

【masterObj.cs】

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

public class WaterController001 : MonoBehaviour
{
    public GameObject masterObj;
    float initialDistanceF;
    float initialHeight;
    Vector3 distance3;

    void Start()
    {
        //初期の水球と3DキャラクターのZ軸(forward)の距離を定義
        initialDistanceF = 1.0f;
        //初期の水球の高さを定義
        initialHeight = 0.8f;
        distance3 = new Vector3(0, initialHeight, initialDistanceF);  
    }

    void Update()
    {
        var masterObjPoji = masterObj.transform.position;
        //水球の高さは、masterObjPojiに加算するdistance3の値のままとするため、
        //masterObjPojiの高さは、0に調整
        masterObjPoji.y = 0f;
        //3Dキャラクターの位置にdistance3を足し、水球の位置を設定
        transform.position = masterObjPoji + distance3;
        //RotateAround関数は、第一引数(masterObjPoji)から現在の自分の位置までの距離を
        //半径として、第二引数の軸を第三引数の値のスピードで移動させる。
        transform.RotateAround(masterObjPoji,new Vector3(0, 1.0f, 0), 0.5f);
        //自分(水球)の位置から3Dキャラクターの位置の現在の差を
        //新たな距離(distance3)として設定して続ける
        distance3 = transform.position - masterObjPoji;      
    }
}

 

 

上のスクリプトを「VFX_WaterGuard」にアタッチします。

また、publicとしている「masterObj」に、旋回の中心としたい3Dキャラクターを指定します。

 

 

 

 

 

 

 

それではゲームを実行してみましょう✨

 

 

 

 

 

 

 

 

くるくる~

 

 

 

 

 

少し解説を✨

旋回にはRotateAround関数を使用しています。

 

 

【Unity 公式ドキュメント】

Transform.RotateAround

 

 

RotateAround関数は、第一引数(masterObjPoji)から現在の自分の位置までの距離を半径として、第二引数の軸を第三引数の値のスピードで移動させます。

 

 

 

 

【masterObj.cs(抜粋)】

transform.RotateAround(masterObjPoji,new Vector3(0, 1.0f, 0), 0.5f);

 

 

このコードの第二引数「 Vector3(0, 1.0f, 0)」はYを軸として回転させています。

 

 

ここを変更すると回転の軸が変わります。言葉で言っても伝わりにくいと思いますので、実際に変更して、動作を試してみます。

 

 

 

【※Vector3(1.0f, 0, 0)の場合】

 

 

 

 

【※Vector3(0, 0, 1.0f)の場合】

 

 

 

【※Vector3(1.0f, 1.0f, 0)の場合】

 

 

【※Vector3(1.0f, 1.0f, 1.0f)の場合】

 

 

 

 

 

【※Vector3(0.3f, 1.0f, 0)の場合】

 

 

 

このように色々回転の角度等を変えられます。「initialDistanceF」も調整して、気に入った回転にしておきましょう。

 

 

 

 

また、旋回している水の球をもっと目立たせたいので、周りの泡沫をもっと大きくして、多く放出するようにします。

 

 

 

 

これらの設定を行うために「ヒエラルキウィンドウ」の「Bubbles」を選択します。

 

 

 

 

 

 

 

泡沫を大きくするため、scaleのXYZの値を「2」に変更します。

 

 

 

 

 

 

 

 

次に泡沫の数を多くするため、Emissionの「Rate Over Time」の値を「300」に増やします。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

結構、存在感がでてきたのではないでしょうか。

 

 

 

イイ感じ💨

もっと色々動かしたいね!

 

 

 

 

そうですね✨

次回は、もっと色々なことができるように作っていきましょう。

 

 

 

 

 

 

 

 

 

 

お名前


削除キー(必須)

コメント(必須)


サイト内検索

twiter

CONTENTS

 

 

 

くるくるサンプルコード

 

 

 

【↓広告↓】