Unityでスプライン曲線を簡単に扱う方法はないの~?
Unity 2022.1以降なら、Unity公式のスプラインツールが使えるわ!
Unity 2022.1 TECH ストリームがリリースされてから、Unity公式のスプラインツールが使えるようになりました。
Unity 2022.1以降では、次のようなことがサードパーティー製アセットなしで実現できます。
- ベジェ曲線、Catmull-Rom曲線などを作成する
- 曲線に沿ってオブジェクトを動かす
- 曲線に沿ってオブジェクトを配置する
- 曲線を描画する
Unity 2021 LTS以前では、これらのスプラインツールが使用できないことに注意する必要があります。
本記事では、ビルトインのスプラインツールの導入方法と基本的な使い方について解説していきます。また、スプラインに沿ってオブジェクトを動かす方法も紹介します。
- Unity 2022.1.0f1
- Splines 1.0.1
目次 非表示
前提条件
Unity 2022.1以降のUnity EditorでUnityプロジェクトが作成され、開かれているものとします。
本記事では、スプラインツールをインストールする手順から解説していきます。
Splinesパッケージのインストール
スプラインツールを使用するために、Splinesパッケージをインストールします。
トップメニューのWindow > Package Managerの順に選択し、Package Managerウィンドウを開きます。
ウィンドウ左上の+アイコン横のリストからPackages: Unity Registryを選択し、パッケージ一覧からSplinesを選択し、右下のInstallボタンをクリックします。
インストールが終わりチェックマークが付いたら成功です。
サンプルのインストール
必須ではありませんが、スプラインツールの実装サンプルを閲覧したい場合、Samples下のImportボタンからサンプルデータをインポートできます。
追加すると、UnityプロジェクトのAssets/Samples/Splines/[バージョン番号]ディレクトリ配下にサンプルデータが追加されます。
サンプルシーンはAssets/Samples/Splines/[バージョン番号]/Spline Examples/Scenesディレクトリ配下から参照できます。
スプライン曲線の作成
スプライン曲線を作成するために、まずスプライン情報を持ったゲームオブジェクトをシーンに配置します。
トップメニューのGame Object(またはヒエラルキーの+アイコン) > 3D Object > Spline > Draw Spline Tool…の順に選択します。
2022/5/15現在、公式リファレンスとメニュー位置が異なっているためご注意ください。Splines 1.0.1時点では上記の場所から選択できるようになっています。
すると、パス編集モードとなり、スプラインのポイントを左クリックで配置できるようになります。
曲線にしたい場合は、マウス左ボタンのドラッグ操作で曲率を調整できます。
編集モードはEscapeキーで解除できます。
Draw Spline Tool…ではなく、SquareやCircleを選択すると、予め作成されたパスのスプラインオブジェクトが配置されます。
既存のゲームオブジェクトにスプラインを適用する
Splineコンポーネントをアタッチすると適用できます。
該当するゲームオブジェクトを選択し、インスペクターのAdd ComponentボタンよりSplineコンポーネントを追加してください。
2022/5/14現在、公式リファレンスでは、Spline Containerコンポーネントを追加することとなっていますが、インスペクターから追加する場合はSplineオブジェクトとなっている事にご注意ください。 また、スクリプトからコンポーネントにアクセスする際は、SplineContainerクラスとなります。
編集の基本操作
スプラインオブジェクトを選択し、シーンビューの以下曲線アイコンをクリックすることで編集モードのON/OFFを切り替えられます。
また、以下ボタンでポイントに対する操作方法を選択できます。
上から順に次の操作ができます。
手アイコン | ビューモード。ポイントを選択したり編集はできない。 |
移動アイコン | 選択したポイントを移動させる。 |
回転アイコン | 選択したポイントを回転させる。 |
拡大アイコン | 選択したポイントを拡大させる。 |
追加アイコン | ポイントを新たに追加する。 |
スプラインのポイントは、複数選択して一括操作できます。
スプラインのプロパティ設定
スプラインオブジェクトを選択すると、インスペクターのSplineコンポーネントから各種設定ができます。
インスペクターから設定できる項目は次の通りです。
Edit Mode Type | スプラインの曲線の種類。ベジェ曲線、Catmull-Rom曲線、直線から選択可能。 |
Knots | スプラインの各ポイントの位置や回転等。ベジェ曲線の場合は方向点も設定可能。 |
Closed | スプラインの始点と終点を繋げて曲線をループさせるかどうか。 |
参考:Spline Container | Splines | 1.0.1
Edit Mode TypeをBezier以外にすると、方向点の情報が変わってしまうのでご注意ください。
スプラインに沿ってオブジェクトを移動させる
Spline Animateを使うと、スプラインに沿ってオブジェクトを動かすことができます。オブジェクトをほぼ一定の速さで移動させることが可能です。
参考:Class SplineAnimate| Splines | 1.0.1
次のようなキューブを動かすものとします。
動かしたい対象オブジェクトを選択し、Add ComponentボタンよりSpline Animateコンポーネントを追加します。
すると、次のようにインスペクター上にSpline Animateの設定項目が表示されます。
この中で設定必須の項目は、一番上のSplineとなります。ここに動く経路となるスプラインオブジェクトをアタッチしてください。
実行結果
パスに沿って動くようになります。
なお、オブジェクトはほぼ等速で動くように速さ調整されています。ポイントによって速さが変わってしまう動きにならないことが特徴です。
この辺の内部処理に興味ある方は、以下記事も参考にしていただければと思います。
動きの調整
スプライン上の動き方は、インスペクターの各種項目で設定します。
向きの設定(Animated Object Setup)
以下項目でオブジェクトがどちらに向きながら動くかを設定できます。
Up Axis | 上向きとする軸。6方向から指定可能。 |
Forward Axis | 前方とする軸。6方向から指定可能。 |
Align To | 回転方法を指定する。4種類のパターンから指定可能。 |
Align Toは、以下の4パターンから選択できます。
None | 全く回転しない。 |
Spline Element | スプラインの向きに沿って回転する。進行方向に向かせたい場合に指定する。 |
Spline Object | スプラインのゲームオブジェクトの向きに沿って回転する。 |
World | ワールド空間基準で回転する。 |
移動の設定(Movement)
以下項目で、オブジェクトの移動に関する設定を行います。
Play On Awake | Awake時に自動再生するかどうか。チェックが入っていたら再生。 |
Method | Timeなら一周どれくらいかかるか(Duration)を指定、Speedならどれくらいの速さ(Speed)で移動させるかを指定する。 |
Ease | イージング方法を指定する。 |
Loop Mode | 終端まで到達したときの繰り返し方法を指定する。 |
Easeでは、以下4パターンから選択可能です。
None | 開始・終了ともにイージングしない。急に動き、急に停止する。 |
Ease In Only | 開始時だけ緩やかに動く。 |
Ease Out Only | 終了時だけ緩やかに動く。 |
Ease In-Out | 開始・終了ともに緩やかに動く。 |
Loop Modeでは、次の4パターンを指定できます。
Once | 終端まで到達したら止まる。 |
Loop Continous | 終端まで到達したら、最初に戻って移動を繰り返す。 |
Ease In Then Continous | 最初の一周の動き出しだけ緩やかに加速し、その後は一定速度で繰り返す。EaseにEase In OnlyまたはEase In-Outが指定されていないと機能しない。 |
Ping Pong | 始点と終点を往復する動きになる。 |
調整後の実行結果
出だしだけ緩やかに動き、速さ20で動くようにした例です。
動きは次のようになります。
さいごに
Unity公式のSplinesパッケージを導入して、スプライン曲線を作成したり、曲線に沿って動かす方法を解説しました。
ほかにも、スプラインに沿ってオブジェクトを配置したり、スプラインを描画したりすることも可能です。
また、スクリプトからスプライン情報のやり取りすることで、活用の幅が広がります。スクリプトとの連携方法については、以下記事をご覧ください。