このツールについて

VCI Event Creator は、VirtualCast の VCI アイテムに搭載する Lua スクリプトを、 コードを一切書かずにビジュアル操作だけで作成できる Unity エディタ拡張ツールです。

RPGツクールのイベントエディタと同じような「コマンドを積み上げる」方式のインターフェースで、 「アイテムを掴んだら音を鳴らす」「ボタンを押したらアニメーションを再生する」といった動作を 直感的に組み立てることができます。

作成した設定は保存され、Unity から「スクリプト更新」ボタンを押すだけで VCI に必要な .lua ファイルが自動出力されます。

エディタウィンドウ全体

更新履歴

バージョン日付主な変更点
v1.0.0 2026-05-02 公開版リリース

必要なもの

補足 「VCToolKit プロジェクト版」とは、VirtualCast の公式開発ページで配布されている Unity プロジェクト形式のSDKです。unitypackage 版とは異なります。 公式ページ からダウンロードしてください。

インストール手順

1. unitypackage のダウンロード

Google Drive(配布フォルダ) からファイルをダウンロードしてください。

2. VCToolKit プロジェクトを Unity で開く

Unity Hub から VCToolKit のプロジェクトを開いてください。 すでに開いている場合はそのままで構いません。

3. unitypackage をインポートする

  1. unitypackageをインポート ダウンロードしたVciEventCreator.unitypackageをUnityにドラッグ&ドロップする。(Projectウィンドウにドラッグ)
  2. インポート確認ダイアログで「Import」を押す インポートするファイルの一覧が表示されます。すべてにチェックが入っていることを確認して、右下の Import ボタンを押してください。
    Importダイアログ
  3. コンパイル完了を待つ Unity がスクリプトのコンパイルを自動的に行います。画面下部のプログレスバーが消えたら完了です。
確認 インポート後、Unity の Project ウィンドウに Assets/VciEventCreator/ フォルダが作成されていれば成功です。
Import完了

基本的な使い方

Step 1 — VCI オブジェクトを作成する

Hierarchy ウィンドウの空白部分を右クリックし、 VCI Event Creator テンプレート作成空の VCI オブジェクト を選択します。

Hierarchyの右クリックメニュー

ファイル保存ダイアログが開きます。ファイル名がそのまま VCI の Title になるため、 アイテム名を入力して保存先を決めてください(日本語も使用できます)。

ファイル保存ダイアログ

保存すると、Hierarchy に以下の構成が自動で生成されます。

補足 EventGraphAsset(イベント設定の保存ファイル)も同時に作成され、VciEventCreator に自動で紐づけられます。 手動でコンポーネントを追加する必要はありません。

Step 2 — イベントエディタを開く

Hierarchy でルートオブジェクトを選択し、Inspector に表示される 「VCI Event Editor を開く」 ボタンをクリックします。

エディタウィンドウを開いた状態

Step 3 — イベントを作成する

左側の「イベント一覧」パネルから、対応するトリガーを選んでクリックします。 たとえば「OnUse」を選ぶと「サブアイテムをUseした時」のイベントになります。

イベント一覧とコマンドリスト

次に、対象となるサブアイテムを Hierarchy からドラッグ&ドロップして登録し、 そのサブアイテムの行を選択してコマンドを追加していきます。

Step 4 — コマンドを追加する

  1. コマンド欄を右クリックする コマンド一覧の空き領域(既存コマンドがない場所)を右クリックすると、メニューが表示されます。 既存コマンドを右クリックした場合は、そのコマンドの直後に挿入できます。 イベント一覧とコマンドリスト
  2. 「コマンドを追加」を選ぶ メニューから「コマンドを追加」を選ぶと「コマンド追加画面」が開きます。
    コマンド追加メニュー
  3. 実行したいコマンドを選ぶ 左側のカテゴリから絞り込んだり、右上の検索欄でキーワード検索したりして、 目的のコマンドをクリックして追加します。 詳しくは「コマンドリファレンス」を参照してください。
    コマンド追加ウィンドウ
  4. パラメータを設定する 追加されたコマンドをクリックすると右側にパラメータ設定パネルが開きます。 対象オブジェクトを Hierarchy からドラッグしたり、数値・テキストを入力したりして設定します。
    パラメータ

Step 5 — スクリプトを更新する

コマンドの設定が完了したら、「スクリプト更新」 を実行します。 以下のどちらかから実行できます。

スクリプト更新

実行すると、作業フォルダの main.lua と VCIObject の Scripts が同時に更新されます。 作業フォルダの main.lua を更新することで、VirtualCast アプリ上の VCI にスクリプトの変更が反映されます。

バックアップについて main.lua の更新時には、上書き前のファイルが自動的にバックアップとして保存されます。 バックアップは最大 10 件まで保持され、それを超えると古いものから自動削除されます。
Backup

VCI Event Editor ウィンドウの「Lua全体プレビュー」ボタンを押すと、生成される Lua コードをプレビューで確認できます。 スクリプト更新

注意 初回または VCI の内容を変更した場合は、Unity 上でアップロード作業(VCToolKit の Upload 手順)を行ってください。
なおホットリロードによるmain.luaの更新はVCIをサイトにアップロードしていなくても作成できます。

アイテムグループについて

「アイテムグループ」とは、同じ種類のオブジェクトを複数まとめて管理する機能です。 グループには「現在選択中のインデックス」があり、「次へ進む」「前へ戻る」「ランダム」などで インデックスを動かしながら、対象オブジェクトを順番に切り替えて操作できます。
複数の弾丸オブジェクトを順番に発射、スライドショーのページ切り替え、ランダムにおみくじを引くなど。

使用例:銃の発射(弾丸を順番に1発ずつ発射する)

弾丸オブジェクト(Bullet_1〜Bullet_6)を6個用意し、掴んだ銃を使うたびに 次の弾丸を取り出して発射するしくみを作る例です。

① アイテムグループに弾丸を登録する

  1. ツールバーの 「アイテムグループ」 ボタンを開き、グループを新規作成する(例:グループ名「Bullets」)。
  2. グループに弾丸オブジェクト(Bullet_1〜Bullet_6)を順番にドラッグして登録する。
    登録した順に弾丸番号 1~6 になる。
    アイテムグループの管理画面

② OnUse イベントにコマンドを登録する

銃の SubItem に OnUse トリガーのイベントを作成し、以下の2つのコマンドを順番に追加します。

  1. アイテムグループのアイテムIDを選択
    対象グループ:「Bullets」/変更方法:「次へ」を選択する。
    これで発射イベントのたびに使用する弾丸番号が 1→2→3→… と進む。
    アイテムグループのコマンド
  2. オブジェクトを発射 / スポーン
    発射するオブジェクトの欄で 「アイテムグループ」→「Bullets」 を選び、
    発射元には銃口オブジェクトを指定する。
    必要に応じて発射方向や発射速度などを設定します。 アイテムグループのコマンド

変数について

変数管理では2種類の変数を扱えます。
IFでの条件分岐や、テキストへの表示などに使用できます。

種類用途
独自変数 自分の処理内だけで使う一時的な値。
カウンターや計算の中間値など
共有変数(State) 全プレイヤー間で値を共有する変数。
スコアや残弾数など、みんなに見えるデータに使う

タイマーについて

「タイマー」パネルでタイマーを登録しておくと、OnTimerComplete(タイマー終了時)や OnTimerReached(指定秒数到達時)のイベントを使えるようになります。 カウントダウンゲームの制限時間管理などに利用できます。

イベントトリガー一覧

「イベント」とは、「どんなきっかけで処理を実行するか」を決めるものです。 以下の種類から選択してコマンドを組み立てます。

トリガー名 発火するタイミング SubItem
Initialize VCI がロードされた時に1回だけ実行される。初期設定に使う
UpdateAll 毎フレーム、全プレイヤーで実行される処理
OnSecondTick 1秒ごとに1回実行される処理(UpdateAll 内でカウント)
OnUse サブアイテムをUseボタンで使い始めた時 必要
OnUnuse Useボタンを離した時(Use終了時) 必要
OnGrab サブアイテムを掴んだ時 必要
OnUngrab 掴んでいたサブアイテムを離した時 必要
OnContactEnter
(初心者向け)
Collider 設定に関係なく、何かに触れた時。
OnTriggerEnter と OnCollisionEnter の両方で実行されます
必要
OnContactExit
(初心者向け)
Collider 設定に関係なく、何かから離れた時
OnTriggerExit と OnCollisionExit の両方で実行されます
必要
OnTriggerEnter IsTrigger が有効な Collider に他の Collider が触れた時 必要
OnTriggerExit IsTrigger が有効な Collider から他の Collider が離れた時 必要
OnCollisionEnter IsTrigger が無効な Collider に他の Collider が衝突した時 必要
OnCollisionExit IsTrigger が無効な Collider から他の Collider が離れた時 必要
OnPlayerJoined プレイヤーが入室した時(ルーム・スタジオ共通)
OnPlayerLeft プレイヤーが退室した時(ルーム・スタジオ共通)
共有変数の内容が変化した時 登録した「共有変数(State)」の値が変化した時。変数ごとに自動生成される
タイマー変数のタイムアウト CountDown タイマーが 0 秒になった時。タイマーごとに自動生成される
タイマー変数が指定秒数に到達時 タイマーが指定した秒数に到達した時
ログの内容が変化した時 ログ変数の内容が変化した時(管理方法が全員共有になっている場合のみ)
コメントを受信した時
わんコメOSCプラグイン
わんコメOSCプラグイン経由でコメントを受信した時
SubItem(サブアイテム)とは VCIアイテム内の個別の子オブジェクトのことです。 Use/Grab など「インタラクション系のトリガー」は、どのオブジェクトに対して操作した時か を指定するために SubItem の登録が必要です。 接触・衝突系のトリガーも、判定を持つ SubItem を指定して使います。
詳細は VCI公式リファレンス — SubItem を参照してください。

SubItem マッチングモード(接触・Use 系)

SubItem を持つトリガーでは、各 SubItem 行のマッチング方式を選べます。

モード動作
完全一致(デフォルト)指定した名前と完全に一致するアイテムのみ反応。
SubItem 欄に Hierarchy からドラッグして追加する
部分一致指定したパターンを名前に含むアイテムが反応。
SubItem 欄を右クリックして「アイテム名の部分一致を追加」から追加する
部分一致の使用例 Bullet1〜Bullet6 のいずれかに触れた時を1つのイベントでまとめて処理したい場合、 部分一致パターンに Bullet と入力します。 すると Bullet1Bullet2・… すべてが同じイベントのトリガーとして反応します。 完全一致で6件個別に登録する手間が省け、後からオブジェクトを増やした場合も自動的に対応されます。
部分一致のコマンド

IF 条件分岐について

「IF(条件分岐)」コマンドは、特定の条件を満たすときだけ後続のコマンドを実行する仕組みです。 RPGツクールの「条件分岐」と同じイメージです。

条件の入力方法説明
式で入力 左辺と右辺の値を演算子(==, !=, <, > など)で比較する。共有変数・ローカル変数・イベント専用の引数・直接入力値が使える
Grabしている 特定の SubItem を掴んでいるかどうかを判定する
Useしている 特定の SubItem をUse中かどうかを判定する
VCI 環境の判定 ルーム・スタジオ・ローカルなど、現在の実行環境を判定する
SubItem の Active 判定 特定のオブジェクトが表示状態かどうかを判定する
衝突オブジェクト名(hit) 接触・衝突系トリガー限定。衝突した相手の名前で分岐する(人体ボーン名・システムアイテムの判定も可)
変数名に含む 変数の値に指定テキストが含まれているかを判定する
直接入力 条件式をスクリプトで直接入力する

IF コマンドを選択したときのパラメータ欄で 「条件を満たさないときの分岐を作成」 にチェックを入れると、 条件を満たさなかった場合の処理(ELSE ブロック)を追加できます。

IFのコマンド

「全員に適用する」オプション

Transform 系・サウンド系・エフェクト系など多くのコマンドには、 「全員に適用する」(broadcastToAll)チェックボックスがあります。

VCI ではデフォルトでは自分の画面にしか反映されないアクションがあります。 このオプションをオンにすると、コマンドを実行したプレイヤーの操作が 部屋にいる全員の画面に同期されます。

補足 このオプションは VCI 標準 API の _ALL_ 系関数(例: ExportAudioSource._ALL_Play())と ほぼ同等の機能です。
内部処理では、_ALL_系関数の代わりにメッセージを1つ送って受信側で全員実行して少ない通信回数で処理します。
注意 「全員に適用する」は同期のための通信を発生させるため、 毎フレーム実行される UpdateAll の中での使用は推奨されません。
そのため、定期的に全員に適用する処理が必要な場合はsecondUpdate(1秒ごとの処理)内であれば「全員に適用する」処理が実行できます。

サンプルテンプレートから始める

一からセットアップするのが大変な場合は、付属のサンプルテンプレートを使うと すぐに動く VCI の雛形を配置できます。

Hierarchy の右クリックメニューから VCI Event Creator テンプレート作成 からサンプルを選んで サンプルを作成できます。
以下はテンプレートの一部です。

テンプレート名内容
弾丸発射サンプルUseボタンで弾を発射する銃のサンプル
スライドショーサンプルボタン操作でスライドを切り替えるサンプル
刀サンプル掴んで攻撃できる刀のサンプル
テンプレート作成 テンプレート作成