Unityアセット 水の球を操る
今回は、Unityのバージョン2021.3.33f1のURP(WebGL)で作成していきます。

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

「Assets\Piloto Studio\Elemental VFX Mega Bundle\Water Spells Bundle」 にある
「VFX_WaterGuard」をHierarchyウインドウにドロップします。

以下のサイトから、Shaderをダウンロードして、該当のShaderを適用すれば直るとのことです。
https://assetstore.unity.com/packages/vfx/shaders/piloto-studio-shaders-258376





「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 公式ドキュメント】
【masterObj.cs(抜粋)】
transform.RotateAround(masterObjPoji,new Vector3(0, 1.0f, 0), 0.5f);
【※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)の場合】


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




それではBubble(Material)の設定を変更して、もっと目立たせるようにしましょう。

「Fresnel」にチェックを入れて、「Fresnel power」を「1.3」、を「3」にします。



イイ感じ💨
もっと色々動かしたいね!

そうですね✨
次回は、もっと色々なことができるように作っていきましょう。
お名前
