クイックノート

ちょっとした発見・アイデアから知識の発掘を

Unityで流体を使って遊んでみる

細い管を液体が上っていく「毛細管現象」など、
液体(流体)には様々な面白い現象があります。

これらの現象が簡単に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」を検索して、
ダウンロード・インポートします。

f:id:u874072e:20191204103601p:plain
Asset Storeから「NVIDIA flex for Unity」をインポート

※ 残念ながらMacには対応していないようです。

ProBuilderのインストール

Unityのメニューから、
「Window」→「Package Manager」を選択して、
「ProBuilder」を検索し、「Install」ボタンをクリックします。

f:id:u874072e:20191205133115p:plain
ProBuilderのインストール

※ インストール後Unityを再起動します。

オブジェクトの配置

それでは、オブジェクトを配置していきましょう。

液体を入れる容器

剛体場合は床を用意すれば良いのですが、
液体は、床だけだと流れ落ちてしまうので、
周りを囲んだ容器を作ります。

作り方は地味ですが、
薄く伸ばしたcubeを重ね合わせて、
中が空洞の容器を作ります。

f:id:u874072e:20191205182114p:plain:h300
cubeを張り合わせた容器

あるいは、後で説明するProBuildeでpipeを作って、
cubeで蓋をする方が楽かもしれません。

筒の作成

液体を通す筒を作ります。

ProBuilderを使うと筒が簡単に作れるのでそれを利用します。

まずは、Unityのメニューから、 「Tools」→「ProBuilder」→「ProBuilder Window」を選択します。 (ProBuilderをインストールしたのに表示されない場合は、
Unityを再起動すると表示されることがあります。)

f:id:u874072e:20191205182451p:plain
ProBuilder Windowの表示

現れたウィンドウから「New Shape」をクリックして、
Shape Selectorから「Pipe」を選択し、
筒の幅や長さのパラメータを設定して、
「Build」ボタンをクリックします。

f:id:u874072e:20191205182938p:plain
pipeの生成

パラメータはそれぞれ下を意味しています。

  • Radius : 筒の半径
  • Height: 筒の長さ
  • Thickness : 筒の厚み
  • Number of Sides : 筒の形(3なら三角形)
  • Height Segments : 筒の分割数

流体の配置

流体の配置は次のステップで行います。

  1. Container の用意
  2. Soft Asset の用意
  3. オブジェクト・コンポーネントの追加

基本的には、オブジェクトに流体としての属性を、
コンポーネントとして追加するのですが、
ContainerとSoft Assetはその部品になります。

Containerの生成

ProjectウィンドウのAssetsを右クリックして、
「Create」→「NVIDIA」→「Flex」→「Flex Container」を選択します。

f:id:u874072e:20191206135226p:plain
Containerの生成

生成されたContainerをクリックすると、
Inspectorウィンドウから粒子のサイズ等、
流体に関していくつかのパラメーターを設定することができます。
ここでは下の図のように設定しました。

f:id:u874072e:20191206135436p:plain:h500
Containerの設定

Soft Assetの生成

ProjectウィンドウのAssetsを右クリックして、
「Create」→「NVIDIA」→「Flex」→「Flex Soft Asset」を選択します。

生成したSoft Assetをクリックして、
Boundary Meshとして「Cube」を選択します。
これが流体の形になります。

その他のパラメータは下の図のように設定しました。

f:id:u874072e:20191206141736p:plain:h400
Soft Assetの設定

オブジェクトとコンポーネントの追加

それではいよいよ流体のオブジェクトを配置します。

Hierarchyウィンドウを右クリックして、
「Create Empty」を選択します。

f:id:u874072e:20191206142801p:plain:h300
空のオブジェクトを生成

生成されたGameObjectに、
Inspectorウィンドウから「Add Component」で、
Flex Soft Actor」と「Flex Fluid Renderer」を追加します。

f:id:u874072e:20191206143105p:plain:h400
コンポーネントの追加

上図のように、
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」でシミュレーションをスタートして、
液体が筒を這い上がってくる様子が見れます。

f:id:u874072e:20191206144356p:plain:h300
毛細管現象

まとめ

毛細管現象を題材として、Unityで流体の動きをシミュレーションする方法を紹介しました。

流体の動きを一から書くとなると非常に大変ですが、
こうしたAssetが無料で提供されているのはありがたいですね。

プライバシーポリシー