細い管を液体が上っていく「毛細管現象」など、
液体(流体)には様々な面白い現象があります。
これらの現象が簡単にUnityで実験できれば嬉しいですよね。
「NVIDIA Flex for Unity」を利用すると、
Unityで簡単に流体を扱えるようになります。
そこで、この「NVIDIA Flex for Unity」を使って、
流体で遊んでみましょう。
ここでは、下の動画のような毛細管現象を題材に、
Unity上での流体の遊び方を紹介します。
準備
流体をシミュレーションするために、
「NVIDIA Flex for Unity」
筒型のオブジェクトを簡単に作るために、
「ProBuilder」を利用するので、
それぞれ使えるように準備しておきます。
NVIDIA Flex for Unityのインポート
Asset Storeから、
「NVIDIA Flex for Unity」を検索して、
ダウンロード・インポートします。
※ 残念ながらMacには対応していないようです。
ProBuilderのインストール
Unityのメニューから、
「Window」→「Package Manager」を選択して、
「ProBuilder」を検索し、「Install」ボタンをクリックします。
※ インストール後Unityを再起動します。
オブジェクトの配置
それでは、オブジェクトを配置していきましょう。
液体を入れる容器
剛体場合は床を用意すれば良いのですが、
液体は、床だけだと流れ落ちてしまうので、
周りを囲んだ容器を作ります。
作り方は地味ですが、
薄く伸ばしたcubeを重ね合わせて、
中が空洞の容器を作ります。
あるいは、後で説明するProBuildeでpipeを作って、
cubeで蓋をする方が楽かもしれません。
筒の作成
液体を通す筒を作ります。
ProBuilderを使うと筒が簡単に作れるのでそれを利用します。
まずは、Unityのメニューから、
「Tools」→「ProBuilder」→「ProBuilder Window」を選択します。
(ProBuilderをインストールしたのに表示されない場合は、
Unityを再起動すると表示されることがあります。)
現れたウィンドウから「New Shape」をクリックして、
Shape Selectorから「Pipe」を選択し、
筒の幅や長さのパラメータを設定して、
「Build」ボタンをクリックします。
パラメータはそれぞれ下を意味しています。
- Radius : 筒の半径
- Height: 筒の長さ
- Thickness : 筒の厚み
- Number of Sides : 筒の形(3なら三角形)
- Height Segments : 筒の分割数
流体の配置
流体の配置は次のステップで行います。
- Container の用意
- Soft Asset の用意
- オブジェクト・コンポーネントの追加
基本的には、オブジェクトに流体としての属性を、
コンポーネントとして追加するのですが、
ContainerとSoft Assetはその部品になります。
Containerの生成
ProjectウィンドウのAssetsを右クリックして、
「Create」→「NVIDIA」→「Flex」→「Flex Container」を選択します。
生成されたContainerをクリックすると、
Inspectorウィンドウから粒子のサイズ等、
流体に関していくつかのパラメーターを設定することができます。
ここでは下の図のように設定しました。
Soft Assetの生成
ProjectウィンドウのAssetsを右クリックして、
「Create」→「NVIDIA」→「Flex」→「Flex Soft Asset」を選択します。
生成したSoft Assetをクリックして、
Boundary Meshとして「Cube」を選択します。
これが流体の形になります。
その他のパラメータは下の図のように設定しました。
オブジェクトとコンポーネントの追加
それではいよいよ流体のオブジェクトを配置します。
Hierarchyウィンドウを右クリックして、
「Create Empty」を選択します。
生成されたGameObjectに、
Inspectorウィンドウから「Add Component」で、
「Flex Soft Actor」と「Flex Fluid Renderer」を追加します。
上図のように、
Flex Soft Actorには、先ほど生成したContainerとSoft Assetを指定して、
いくつかの設定を行います。
「Self Collide」で粒子同士の衝突のオンオフが切り替えられ、
「Fluid」で流体として動作するかどうかを切り替えることができます。
また、「Draw Particles」では粒子の表示を行います。
筒を上下させるスクリプト
毛細管現象をシミュレーションするために、
液体に対して筒を出し入れする必要があります。
そのために、筒のオブジェクトに次のスクリプトを「Add Component」で追加します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class down : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(new Vector3(0, -0.1f,0)); }else if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(new Vector3(0, 0.1f, 0)); } } }
中身は単純で上下の矢印キー入力を受けて、
筒を上下に移動させるスクリプトです。
あとは「Play」でシミュレーションをスタートして、
液体が筒を這い上がってくる様子が見れます。
まとめ
毛細管現象を題材として、Unityで流体の動きをシミュレーションする方法を紹介しました。
流体の動きを一から書くとなると非常に大変ですが、
こうしたAssetが無料で提供されているのはありがたいですね。