曲線で色々出来るCurvy Spline

この記事は「Unity アセット真夏のアドベントカレンダー 2019 Summer!」の8月11日の記事です。

前回、8月10日の記事は、Nakaji Kohkiさんの 【Unity】uGUIでバーチャルパッドが使える『Joystick Pack』を、もっと便利に拡張してみる でした。


Curvy Splines
Curvy Spline

アセット概要

ポイント同士を結んでパスを作ることができます。パスに沿って移動することもできるし、オブジェクトを配置したり、メッシュを生成することもできます。

パスの軌道は色々調整できます。

下の動画は公式のプロモーションです。大体何ができるか把握できるのではないかと。

基本の使い方~パスの作成~

アセットをインポートするとCurvyメニューが追加されます。


最初にパスを作ってみます。

メニューのGameObjectからCurvy➡Splineをクリック。

「CurvySpline」コンポーネントを持ったオブジェクトと、CurvyGlobalというオブジェクトが自動で生成されます。

そして、Hierarchy内のSplineオブジェクトを選択すると、シーンビュー内に以下画像のようなメニューが表示されているはずです。

DrawSplineをクリック。

Ctrl(MacならOption?)キーを押しながらクリックしていくと「CurvySplineSegment」コンポーネントを持ったオブジェクトを生成していきます。

このオブジェクトの座標同士を結んで曲線を生成していきます。

普通のオブジェクトを操作するように移動できます。オブジェクトを消せば自動でパスを補完してくれます。

パスのつながり方は、「CurvySpline」コンポーネントのInterpolationプロパティから色々変更できます。直線、曲線、ベゼル曲線。実際に触りながらやってみた方が分かりやすいかと。

基本の使い方~パスに沿って移動~

SplineControllerを使う

簡単な方法は用意されているコンポーネントを使うことです。

Hierarchyで右クリックしてCurvy➡Controller➡Spline。

「SplineController」コンポーネントのGeneralタブ➡Splineプロパティに、「CurvySpline」を持ったオブジェクトを設定します。

MoveタブのSpeedプロパティを変更すれば、パスにそって移動します(実行時のみ)。

スクリプトから動かす

スクリプトから自分で動かしたいときに使いそうなメソッド。

デモの11:RigidBodyシーンとRigidBodySplineController.csファイルが参考になると思います。


こんな感じで曲線にそって色々できたり、パスを簡単に作れるアセットなわけです。

でもこれだけじゃありません。


パスに沿ってメッシュ生成

パスにそってメッシュを生成することができます。

メッシュの形状もパスの形にすることができます。

Hierarchy内で右クリック➡Curvy➡Generatorでオブジェクトを作って、CurvyGeneratorインスペクタのノードっぽい絵が描かれているボタンをクリックするとGeneratorウィンドウが開きます。

ウィンドウ内で右クリック➡AddTemplate➡ShapeExtructionでメッシュ生成の処理をまとめてしてくれます。ノード(小さい枠)がいくつか作られるはずです。

ShapeExtructionノード内の「InputSplinePath」タブからSplineプロパティの「+」ボタンをクリックすると、パスが生成されます。生成されたパスを動かすと、その通りにメッシュが動きます。


マテリアルのUV値を設定するのがちょっと手間でした。

マテリアルを変更するときはVolumeMeshノードのMat0タブからMaterialプロパティを変更します。

ShapeのパスポイントごとにUVを調整したりできます。

ShapeExtrusionノードのCrossタブから、HardEdgesとExtendedUVプロパティにチェックを入れます。

InputSplineShapeノードに設定してあるパスのゲームオブジェクトを選択してインスペクタの「MetaCGOptions」コンポーネント内のExtendedUVカテゴリのUVedgeにチェックをいれて、FirstUとSecondUの値を調整します。

パスに沿ってオブジェクト生成

パスにそってオブジェクトを指定距離ごとに生成することができます。

Hierarchy内で右クリック➡Curvy➡CurvyGeneratorをクリック。

インスペクタのノードっぽいボタンをクリックしてGeneratorウィンドウを開く。

VolumeSpotsノード内のGeneralタブ➡Simulateプロパティにチェックを入れておくべきです。最高で10000個配置することができますが、大量にオブジェクトを生成しようとして低スペックのPCだと時が止まることがあります。

Generatorウィンドウ内で右クリック➡AddTemplateからSpotGameObjectsを選択。

ウィンドウ内で右クリック➡Add➡Input➡SplinePathでInputSplinePathノードを追加。

同じくAdd➡Build➡RasterizePathノードを追加。

InputSplinePathノード内でSplineプロパティの「+」ボタンをクリックしてパスを設定。

InputSplinePathーRasterizePath-VolumeSpotsみたいにノード同士を線でつなぎます。

あとはInputGameobujectsノードのSerializedPropertyに生成したいゲームオブジェクトのプレハブを設定すればパスにそってオブジェクトが生成されるはずです。



簡単な使い方をざっくり書いてみました!

他にもUIのテキストをパスにそって動かしたりもできます。

とても応用の利くアセットだと思いました。

今のところアップデートもばっちりされてるみたいですし。

レベルデザインにも便利。

パスにそって動くということに焦点を当ててゲームも作れそうな気がしてきます。予感はします。実際作ろうとしたら色々問題でてくると思いますが。

アセットのデモを見てみると他にも色々出来るみたいです。

是非購入して確認してみてはいかがでしょうか。

Curvy Splines

明日、8月12日の記事は、 ゆーじさんの 無料3Dモデルを爆活用してみたです。