スプラインとは?

スプラインは、複数の点を滑らかな曲線で結ぶ数学的な手法です。

元々は船舶設計や建築で使われていた物理的な道具(薄い木材や金属の棒)から名前が来ており、

これを複数の点に固定して自然な曲線を描いていました。 数学的には、スプラインは区間ごとに定義された多項式関数を繋げて作られる曲線で、

接続点で連続性と滑らかさを保つように設計されています。

最も一般的なのはベジェスプラインとB-スプラインです。

Splinesパッケージを導入する

Unityでは、公式にSplinesパッケージが提供されています。

UnityEditorのメニューからWindowPackageManagerを選択し、PackageManagerを開きます。

左側のUnity Registryを選択し、検索欄に「Splines」と入力して検索します。

Splinesパッケージを選択しInstallボタンを押します。

しばらく待つと導入が完了します。

スプラインを作成する

Splinesパッケージを追加したことによって、

ヒエラルキーの右クリックメニューにSplineが追加されています。

Squareなどのプリセットスプラインも選択できます。

SceneViewCreate Splineボタンが増えています。

これによりSceneView上で複数の座標を指定し、スプライン曲線で結ぶことができるようになります。

ヒエラルキーにもSplineオブジェクトが作られ、

SplineContainerコンポーネント中で設定した座標が確認できます。

SplineContainerと経過時間から、その時間のスプライン曲線上の座標を取得できます。

以下のようなスクリプトだと、5秒間かけてスプライン曲線上を移動する形になります。

EvaluatePosition の引数は0〜1に正規化された値である必要があります。(0=始点、1=終点)

public class SplineTest : MonoBehaviour
{
    [SerializeField] private SplineContainer _splineContainer;
    
    private float _time = 0f;

    private void Update()
    {
        
        _time += Time.deltaTime;
        _time %= 5f;

        var position = _splineContainer.EvaluatePosition(_time / 5f);
        
        transform.position = position;
    }
}

動かすと以下の様になります。

その他のスプラインの使い道

今回スプライン上を移動するようなサンプルを作成しました。

このようにキャラクター、カメラ、パーティクルなどの移動経路として使用できます。

他にもスプライン上に等間隔でオブジェクトを配置したり、

レースゲームのNPCの走行ラインを指定したり、

滑らかな曲線が必要な場面で役に立つかもしれません。

今回はSplinesパッケージについて簡単に解説しました。

スプラインを活用することで、滑らかな曲線を簡単に表現できるようになります。

その曲線の上をキャラクターを移動させたり、

カメラ演出用のパスとして使用したり、使い道は沢山ありそうです。

開発中のゲームなどに活かせそうなら導入してみてください。

📣おしらせ!

Unity Asset Storeで GROW YOUR GARDEN セール が開催中です。

農業関係のアセットなどが最大50%OFFでセール中です。