【Unity】数式からメッシュアセット生成くん

エフェクト作るときに単純なメッシュ形状を作りたくなることあると思います。 例えば円錐台とか…

こういうシンプルなメッシュ達のためにfbxやその元ファイルを管理するのが面倒…というお気持ちがあります。 そこで、今回はC#の式を評価して簡単なメッシュを生成するインポータを作りました。

↓の仲間みたいなやつですね

friendsea.hateblo.jp


Quaternion.Euler(0,-u*360, 0)*(Vector3.forward*(1 + v*0.5f) + Vector3.up*v)

こんな式を…

こういうメッシュとしてインポートします。

できたもの

コード

C#の式からメッシュ作るくん

つかいかた

上記のスクリプトは適当なEditorフォルダに入れてください。 あと、Code Analysisパッケージが必要なのでパッケージマネージャから入れてください。

Create Asset MenuからSuface Mesh Generatorを作ると…

なんかうねうねのメッシュとしてインポートされます

デフォルトのファイルの中身をそういう数式にしてるからです。 アセットのファイルはmeshgeneratorという拡張子のテキストです。 この中身にいい感じのC#式を書いて曲面形状を定義してください。

Inspectorのインポート設定では曲面→メッシュ化の分割数を指定できます。

記述する式について

書く式は次のようなものです

  • Vector3として評価される
  • ふたつのfloat変数uvを使える
  • UnityEngine名前空間がusingされてる

つまり…

using UnityEngine;
Vector3 Position(float u, float v){
    return (ここに入る中身を書くってことです);
}

uvは[0, 1]の曲面座標系です。 例えばファイルの中身がnew Vector3(u,v,0)の場合ただの平面ができますね。

もうちょっと凝った例だと、こういうタツマキ系のエフェクトのメッシュとかもできます。

Quaternion.Euler(0,-u*360*1, 0)*Vector3.forward*(v/2f+1+u-Mathf.Abs(0.5f-v)) + Vector3.up*(v+u*3)

おしまい

これも前回同様Unity上でしかメッシュとして取り扱えない上に、現状式の記述に何もエディタ補助が効かなくて辛いです。 個人開発だとめちゃ重宝してるんだけどね…