Unity2022で追加されたスプラインツールの使い方を簡単にまとめました。
- はじめに
- インストール
- スプラインを作る
- スクリプトから制御する
- アニメーションさせるSplineAnimateコンポーネント
- Spline上にGameObjectを生成するSplineInstantiateコンポーネント
- Splineに沿ってチューブ型のメッシュを生成する Spline Extrude
- 関連
- 参考
Unity2022.2.0b4
Splines 2.0.0-pre.2
はじめに
Unity2022で、Unity公式のスプラインツールがパッケージとしてリリースされました。
これを使うとシーン上に曲線を作成できます。
また、曲線の情報を使ってキャラを動かしたりモデルを配置したりといった使い方ができます。
Unity2022からのUnity公式スプラインツールhttps://t.co/wTh7X4OccM pic.twitter.com/JvL9lz2Vy0
— Haruki Yano / Haruma-K (@harumak_11) 2022年8月16日
本記事ではこのツールの使い方について簡単にまとめます。
(まだ仕様が変わりそうな予感もするので軽く触ります。)
インストール
インストールは Package Manager から行います。
Unity 2022以降で Package Manager を開き、Unity Registry から Splines をインストールします。
Package Manager の細かい使い方は省略しますが、以下の記事にまとめていますので必要に応じて参照してください。
スプラインを作る
それでは実際に使ってみます。
まずスプラインを作るには、Hierarchy から +ボタン > Spline > Draw Spline Tool… を選択します。
Spline という名前の GameObject が生成されるので、それを選択して Scene ビューのツールバーを以下のように設定します。
するとクリックでポイント(knotと呼びます)を配置し、スプラインを作成できるようになります。
ポイントは連続で配置することができ、配置を終了する際には Escape キーを押下します。
なおこのモードでは、GameObject に設定されているコライダーに沿って knot を配置することも可能です。
スクリプトから制御する
次に作成したスプラインをスクリプトから使ってみます。
後述の通り、あらかじめ用意されたコンポーネントも存在しますが、理解のためにまずは自分でスクリプトを記述してみます。
using System.Collections; using UnityEngine; using UnityEngine.Splines; public class Example : MonoBehaviour { [SerializeField] private SplineContainer _spline; [SerializeField] private Transform _target; [SerializeField] [Range(0.0f, 1.0f)] private float _progress; [SerializeField] private float _speed = 0.3f; private void Update() { if (Input.GetKeyDown(KeyCode.S)) StartCoroutine(MoveRoutine()); } private IEnumerator MoveRoutine() { _progress = 0.0f; while (_progress < 1.0f) { _progress += Time.deltaTime * _speed; // Splineに進捗を渡して、その地点の座標や向きの情報を得る _spline.Evaluate(_progress, out var position, out var tangent, out var up); // Transformに反映 _target.position = position; _target.up = up; _target.forward = tangent; yield return null; } _progress = 1.0f; } }
_target をスプラインに沿って移動させるスクリプトです。
再生してSキーを押すとスプラインに沿って対象の GameObject が移動することを確認できます。
(冒頭のツイートではこのスクリプトを使って動かしています。)
アニメーションさせるSplineAnimateコンポーネント
さて、前節では Spline を使ったアニメーションを独自で実装しましたが、アニメーション用のコンポーネントはあらかじめ用意されています。
これを使用するには、アニメーションさせたい GameObject に SplineAnimate コンポーネントをアタッチします。
Spline に作成した Spline Container をアサインし、再生するか Preview の Play ボタンを押下することで挙動を確認することができます。
Spline上にGameObjectを生成するSplineInstantiateコンポーネント
Spline上に GameObject を生成する SplineInstantiate コンポーネントも用意されています。
が、このバージョンでは不具合があるようでうまく生成されませんでした。(設定したPrefabがシリアライズされず、何も生成されない)
サンプルシーンでは挙動をみることができるので、修正前のバージョンを使う場合にはサンプルで挙動を確認するといいかもしれません。
機能としてはいくつかの Prefab を特定の割合で生成したり、一定間隔・ランダムな感覚で生成したり、各インスタンスの Transform にオフセットをかけたりすることができます。
Splineに沿ってチューブ型のメッシュを生成する Spline Extrude
Spline Extrude コンポーネントを使うと、下図のように Spline に沿ってチューブ型のメッシュを生成することができます。