UnitySequencerSystem(以下、USS)はUnityでシンプルなシーケンス処理を実現するライブラリです。 汎用性が高いため、会話システムや敵弾の移動アルゴリズム、AIなどあらゆる分野で幅広く利用可能です。
下記コードのようにシーケンス、コンテナ、シーケンサを定義することで実行が可能です。
using System.Collections.Generic;
using UnitySequencerSystem;
using UnityEngine;
public class Test : MonoBehaviour
{
async void Start()
{
// シーケンスを定義する
var sequences = new List<ISequence>
{
new Log("Start Press Space Key"),
new WaitUntilLegacyInput(WaitUntilLegacyInput.InputKeyType.Down, KeyCode.Space),
new Log("Pressed Space!")
};
// シーケンスが参照するコンテナを定義する(今回は何も登録しない)
var container = new Container();
// シーケンサを定義する
var sequencer = new Sequencer(container, sequences);
// シーケンスを実行する(終了するまで待機可能)
await sequencer.PlayAsync(this.destroyCancellationToken);
Debug.Log("End");
}
}UPM Managerにて配布しています。
https://github.com/gif-hara/UnitySequencerSystem.git?path=Assets/Plugins/UnitySequencerSystem
また以下のプラグインに対応しています。各プラグインがUPM Manager経由でインストールされている場合は自動的に利用可能になります。
- UniTask
- UniTaskを利用しない場合はTaskを利用しています。
- 一部のUnity関連の操作をするシーケンスはとりあえずの対応は行っていますが基本的にUniTaskを利用するのをお勧めします。
- Unity-SerializeReferenceExtensions
- LitMotion
- TextMeshPro
- InputSystem
Unity-SerializeReferenceExtensionsを利用することでInspectorで定義をすることも可能です。

Resolverクラスは操作を行う対象の参照を解決するクラスです。 例えばTransformSetPositionはTransformの座標を設定しますが、そのTransformはResolverクラスを通して参照することができます。
// 直接Transformを参照する
var sequences = new List<ISequence>
{
new TransformSetPosition(
new TransformResolver.Reference(transform),
new Vector3Resolver.Constant(new Vector3(0, 0, 0))
)
};
var container = new Container();
var sequencer = new Sequencer(container, sequences);
await sequencer.PlayAsync(this.destroyCancellationToken);コンテナに登録されたTransformを参照することも可能です。
const string name = "Test";
var sequences = new List<ISequence>
{
new TransformSetPosition
(
new TransformResolver.Name(name),
new Vector3Resolver.Constant(new Vector3(0, 0, 0))
),
};
var container = new Container();
container.Register(name, this.target.transform);
var sequencer = new Sequencer(container, sequences);
await sequencer.PlayAsync(this.destroyCancellationToken);USSには基本的な機能として以下のシーケンスを用意しています(随時追加予定です)
与えられた文字列をDebug.Logに出力します。
コンテナに登録されているオブジェクトすべてをDebug.Logに出力します。
与えられた秒数待機します。
様々な型に随時対応しています。現在、以下のクラスの機能を提供しています。
- Float
- GameObject
- Forget
- If
- InputSystem
- Int
- Particle
- TextMeshPro
- Transform
- Update
- Vector2
- Vector3
- WaitUntil
- WhenAll
- WhenAny
USSは名前の通り、シーケンシャルな処理に特化しています。これはゲーム制作には欠かせないアルゴリズムであり、それを柔軟に組み立てることが可能です。以下にサンプルを用意しました。Unityにインポートする方法は以下となります。
- UnityメニューのWindow/Package Managerを選択する
- Package Managerウィンドウ内のUnitySequencerSystemを選択する
- 右側のSamplesタブから任意のサンプルをインポートする
シンプルにプレイヤー位置に弾を生成するシーケンスと弾の移動処理を担うシーケンス行います。 確認する場合はUPM ManagerのSamplesタグからSample01をImportしてください。
- TODO
- TODO


