Rectorを公開した
前回の記事で色々と書いた「Rector」というVJソフトをUnity向けのフレームワークとしてMITライセンスで公開した。
- GitHub: https://github.com/shivaduke28/Rector
- Scrapbox: https://scrapbox.io/Rector/
中身はdraw(tokyo);#2のプロジェクトから再配布ができないアセット類を抜いてコードを整理したもので、cloneしてきてカメラやパーティクルや背景シーンを追加したら、すぐにRectorでVJできるようになっている(はず)。
公開したかった理由はいくつかあるが、一番はdraw(tokyo);#2における開発の裏テーマとして「ソフトウェアを開発をした上でアセットを制作する」という立て付けがあり、フレームワークとして公開できる、というのはその裏テーマのPoCになるからで、割といい感じになってよかった。
以下、こだわりポイント
ライブラリではなくフレームワークにする
人々のVJ用UnityプロジェクトにRectorをインポートするのではなく、RectorというVJソフトがあり、VJ素材を仕込むようなノリでUnityエディタを使う、という立て付けにした。なので、UPMで公開せずに全てをAssets/Rector/に置いてプロジェクトごとcloneして使う。
概念やUXの理解度がもう少し深まるまでは、開発者向けにもAPIとかを公開せずに、必要に応じて内部のコードに自由に手を入れてね、というスタンスにするのが良いと思った。色々枯れてきたらあり方が変わりそうだけど、それは先の話だと思う。
使い捨てのコードを簡単に組み込めるようにする
Unityエディタ上でVJ素材を仕込む際に、作業の複雑さのグラデーションを考えていた。
- バニラの状態で使う
- ベースのシーンや背景シーンの見た目を変える
- カメラワークを自作する
- パーティクルを自作する
- UIの見た目を変える
- ノードのスロットを自作する
- ノードを自作する
- ノードの見た目を変える
- アプリの仕様を変える
4まではC#を書かなくてもできるようにしたので、Unityでの開発に慣れてない人でも3D制作を行って、それを使ってVJできるようにはなっていると思う。 UIの見た目については(ちょっと大変かもだけど)ussとuxmlを弄ればフォントを変えたりイベントのロゴを追加したりできるはず。
ノードのスロットを自作することについて書く。RectorにはSlot Behaviourという概念があり、オブジェクトへの入力や出力をSlot Behaviourとして定義すればノードにしたときに勝手にスロットとして使えるようになるという仕組みになっている。
たとえば、PositionInputSlotBehaviourという型がある。
[AddComponentMenu("Rector/Position Input Slot")]
public sealed class PositionInputSlotBehaviour : InputSlotBehaviour
{
[SerializeField] Vector3Input input;
Transform trans;
void Start()
{
trans = transform;
input.Value.Subscribe(p =>
{
trans.localPosition = p;
}).AddTo(this);
}
public override IInput[] GetInputs()
{
return new IInput[]
{
input,
};
}
void Reset()
{
input = new Vector3Input("Position", transform.localPosition);
}
}
}
これは "Position"という名前のVector3型のインプットスロットがあり、それに値が入るとtransform.localPositionを更新する、という振る舞いを定義している。同様にLightの明るさなどを変更するLightInputSlotBehaviourなどもある。こういうモジュラーなコンポーネントを色々作っておき、Node Behaviourというコンポーネントにつけることでノードがどういうスロットを持つかを決めるようになっている。
https://t.co/Yo0SNlKJ5u pic.twitter.com/BpClIf12hH
— shivaduke (@shiva_duke28) 2025年4月1日
たとえば、この動画でチカチカしているのは背景シーンに置いたPoint Lightが高速で円運動しているからだが、Point Lightがどういうノードになるかは以下のようにインスペクタ上で定義している。

Unityでオーディオビジュアルをやる人たちはRendererやAnimatorなどを制御する小さな(ワンオフの)C#を書くことがよくあるように思っていて、そういうノリでSlot Behaviourを書けばすぐにグラフから触れるようになるよ、ということがやりたかった。汎用的なものはビルトインで作っても良いと思うけど、こういうのは使い捨てのコードがサッと動くことの利点が大きいわけで、MonoBehaviourで挙動が完結する方がよい。
このSlot Behaviourの仕組みはカメラやVFX Graphに対しても同様に使われているので、Cinemachineの自作の拡張をグラフから制御したりとかも簡単にできる。VFX Graph用に作ったものをカメラに使ってみるとか色々できて楽しい。
ドキュメントをScrapboxで書く
とにかく更新が楽で良いし、ページがグリッド上に並ぶのもかわいくてよい。

これからやること
draw(tokyo);が終わった後も続けていた開発がようやくひと段落したので、そろそろのんびりするフェーズに移行したい。 開発にしろ制作にしろ、大変愉快で無限にやってられる感じがあるのだけど、休まないと心身の調子を崩しそうな気配がある。 あと、4月はRDC2025に行くのでキャンプの準備を再開しないとやばそう。
Rectorの開発はのんびり続けていこうと思っているので、触ってみた感想や困ったことなどのFBKがあれば、気軽に言ってくれるとたいへん喜びます。