View Categories

CatsUdon Command 仕様書

8 min read

Version: 3.3.2
Last Updated: 2025-09-22

1. Command System Overview

CatsUdon には2つのコマンドシステムがあります:

  • Colonコマンド (:): プレイヤーステータス操作
  • Slashコマンド (/): システム・オブジェクト操作

2. Colon Commands (: prefix)

構文

:status_name=value [target_specifier]  # 数値または文字列の設定
:status_name+value [target_specifier]  # 数値の加算のみ
:status_name-value [target_specifier]  # 数値の減算のみ

注意: +-演算子は数値ステータスのみ対応。文字列パラメータには=のみ使用可能。

対象指定 (target_specifier)

  • tag:tagname – 指定タグを持つ全プレイヤー
  • name:charactername – 特定のキャラクター名
  • user:displayname – プレイヤーのディスプレイネームで指定
  • 指定なし – 自分自身

使用例

:HP=100                   # 自分のHPを100に設定
:HP+20 tag:warrior        # warriorタグを持つ全員のHPに20加算
:MP-10 name:Alice         # AliceのMPから10減算
:strength=15 tag:party    # partyタグの全員のstrengthを15に設定
:HP+10 user:Player123     # Player123のHPに10加算

3. Slash Commands (/ prefix)

3.1 System Commands

wait

構文: /wait seconds または /wait diceroll
説明: 指定秒数待機、またはダイスロール完了まで待機してから次のコマンドを実行

/wait 3.5       # 3.5秒待機
/wait diceroll  # ダイスロール完了まで待機

roll

構文: /roll diceString または /roll "system_name" diceString
説明: ダイスロールを実行。システム名を指定して特定のダイスシステムを使用可能

/roll 2d6+3                    # 2つの6面ダイスに3を加算
/roll 1d20                     # 20面ダイス1つ
/roll "CoC" 1d100              # Call of Cthulhuシステムで1d100をロール
/roll "DnD5e" 1d20+5           # D&D 5eシステムで1d20+5をロール

message

構文: /message 内容
説明: 指定した内容をメッセージとして表示

/message クエストを開始します
/message 戦闘が始まりました!

load

構文: /load data
説明: ワールドデータを読み込み
権限: GM専用

/load map_dungeon_1    # ダンジョンマップをロード

3.2 Video Commands

video-play

構文: /video-play index url

/video-play 0 https://example.com/video.mp4

video-stop

構文: /video-stop index

/video-stop 0    # インデックス0のビデオを停止

video-pause

構文: /video-pause index

/video-pause 0   # インデックス0のビデオを一時停止

3.3 Teleport Commands

teleport

構文: /teleport target destination [rotation]
説明: プレイヤーやオブジェクトを移動
権限: GM専用

対象指定:

  • tag:tagname – タグを持つプレイヤー
  • name:charactername – キャラクター名
  • user:displayname – VRChatユーザー名

移動先指定:

  • tag:tagname – タグを持つプレイヤーまたはオブジェクトの位置
  • {hit_object} – 衝突したオブジェクトの位置
  • name:charactername – 指定キャラクターの位置
  • user:displayname – 指定VRChatユーザーの位置
  • x,y,z – 座標指定
  • x,y,z rotX,rotY,rotZ – 座標と回転指定
/teleport tag:player1 tag:spawn_point        # player1をspawn_pointに移動
/teleport name:Alice 0,10,0                  # Aliceを座標(0,10,0)に移動
/teleport user:PlayerName 5,0,5 0,90,0      # PlayerNameを座標(5,0,5)、回転(0,90,0)に移動
/teleport tag:player1 name:Bob              # player1をBobの位置に移動
/teleport name:Alice user:GameMaster        # AliceをGameMasterユーザーの位置に移動
/teleport name:Alice {hit_object}           # Aliceを衝突したオブジェクトの位置に移動
/teleport {my_char} name:Healer             # 自分のキャラクターをHealerの位置に移動

3.4 Object Management Commands

create

構文:

  • /create objectData – カスタムオブジェクトをデフォルト位置に生成
  • /create tag:tagname objectData – 指定タグの位置にカスタムオブジェクトを生成

推奨される使用方法:
SaveLoadシステムで保存したカスタムオブジェクトデータ文字列を使用して生成
注意: データ文字列にスペースが含まれる場合は使用できません(ダブルクォートで囲んでも分割されます)

使用例:

# カスタムオブジェクトデータで生成(推奨)
/create SavedObjectDataString                    # デフォルト位置に生成
/create tag:spawnpoint SavedObjectDataString     # spawnpointタグの位置に生成
/create tag:table SavedObjectDataString          # tableタグの位置に生成

# 実際のデータ文字列例
/create 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP    # グループオブジェクトを生成
/create tag:spawn 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP    # spawnタグの位置に生成

カスタムオブジェクトデータの取得方法:

  1. Object Control Gunに切り替え
  2. 以下のメニューを選択:
   カスタムデータ管理 → オブジェクトセーブ
  1. セーブしたいDynamicObjectに向けて発射
  2. 表示されたデータ文字列をコピー

注意:

  • カスタムオブジェクトデータはSaveLoadシステムで取得できます
  • オブジェクト作成後は{last_created}変数で参照可能
  • オブジェクト番号による生成も可能ですが、番号の確認方法がないため非推奨

delete

構文: /delete target

対象指定:

  • tag:tagname – タグ名(複数削除可能)
  • {hit_object} – 衝突したオブジェクト
/delete tag:enemy        # enemyタグの全オブジェクトを削除
/delete {hit_object}     # 衝突したオブジェクトを削除

注意: 内部的にはオブジェクトID形式もサポートしていますが、基本的には上記の方法を使用してください。

duplicate

構文: /duplicate target
説明: DynamicObjectを複製

対象指定:

  • tag:tagname – タグ名(複数複製可能)
  • {this} – 自分自身(DynamicProcComponentで使用)
/duplicate tag:item    # itemタグの全オブジェクトを複製
/duplicate {this}      # 自分自身を複製

注意: 内部的にはオブジェクトID形式もサポートしていますが、基本的には上記の方法を使用してください。

fixed

構文: /fixed target
説明: DynamicObjectをFixedObjectに変換
権限: GM専用

/fixed tag:furniture_01 # furniture_01タグをFixedObjectに変換
/fixed tag:furniture    # furnitureタグの全てをFixedObjectに変換

unfixed

構文: /unfixed tag:tagname または /unfixed {hit_object}
説明: FixedObjectをDynamicObjectに変換
権限: GM専用

/unfixed tag:furniture  # furnitureタグの全てをDynamicObjectに変換
/unfixed {hit_object}   # 衝突したFixedObjectをDynamicObjectに変換

3.5 Object Transform Commands

move

構文: /move source_object target [duration]

オブジェクト指定:

  • tag:tagname – タグ名

移動先指定:

  • tag:tagname – タグを持つオブジェクト/プレイヤーの位置
  • name:charactername – 指定キャラクター名のプレイヤー位置
  • user:displayname – 指定ユーザー名のプレイヤー位置
  • x,y,z – 座標指定
/move tag:ball tag:target         # ballタグをtargetタグの位置に瞬間移動
/move tag:ball tag:target 3.0     # ballタグをtargetタグの位置に3秒かけて移動
/move tag:ball 0,10,0 2.0         # ballタグを座標(0,10,0)に2秒かけて移動
/move tag:ball tag:GM             # ballタグをGMタグを持つプレイヤーの位置に移動
/move tag:ball name:アディン        # ballタグをアディンの位置に移動
/move tag:ball user:PlayerName    # ballタグをPlayerNameの位置に移動

rotate

構文: /rotate source_object target [duration]

/rotate tag:door_01 0,90,0 2.0   # door_01タグを回転(0,90,0)に2秒かけて回転
/rotate tag:door tag:open_pos    # doorタグをopen_posタグの回転に合わせる

scale

構文: /scale source_object target [duration]

/scale tag:item_01 2.0,2.0,2.0 1.5 # item_01タグを2倍のサイズに1.5秒かけて拡大
/scale tag:item tag:large_size   # itemタグをlarge_sizeタグのサイズに変更

stop

構文: /stop target または /stop all

/stop tag:moving_obj # moving_objタグの移動/回転/スケール処理を停止
/stop all       # 全ての移動/回転/スケール処理を停止

3.6 Tag Management Commands

tag-add

構文: /tag-add target tag_names
説明: 対象にタグを追加。重複は自動的に除外されます。

対象指定:

  • tag:tagname – 指定タグを持つプレイヤーとDynamicObjectの両方
  • name:charactername – 指定キャラクター名のプレイヤーのみ
  • user:displayname – 指定ディスプレイネームのプレイヤーのみ
/tag-add tag:player hero warrior    # playerタグを持つ全対象にhero,warriorタグを追加
/tag-add name:Alice mage healer     # Aliceにmage,healerタグを追加
/tag-add {last_created} effect      # 最後に作成したオブジェクトにeffectタグを追加

tag-del

構文: /tag-del target tag_names
説明: 対象から指定したタグを削除。

/tag-del tag:enemy weak             # enemyタグを持つ全対象からweakタグを削除
/tag-del name:Bob temporary         # Bobからtemporaryタグを削除

tag-clear

構文: /tag-clear target
説明: 対象の全タグをクリア。

/tag-clear tag:temporary            # temporaryタグを持つ全対象の全タグをクリア
/tag-clear name:TestUser            # TestUserの全タグをクリア

3.7 Card System Commands

draw

構文: /draw deck:id [target] [position]

ターゲット指定:

  • deck:id – 別のデッキ
  • tag:tagname – タグの位置
  • {hit_object} – 衝突したオブジェクトの位置
/draw deck:main                        # mainデッキからカードドロー
/draw deck:main deck:hand              # mainデッキから手札デッキに移動
/draw deck:main deck:hand top          # mainデッキから手札デッキの上に移動
/draw deck:main deck:hand bottom       # mainデッキから手札デッキの下に移動
/draw deck:main tag:table              # mainデッキからtableタグの位置に配置
/draw deck:main {hit_object}           # mainデッキから衝突したオブジェクトの位置に配置

insert

構文: /insert card:id deck:id [position]

/insert card:abc123 deck:main          # カードabc123をmainデッキの上に挿入
/insert card:xyz789 deck:hand bottom   # カードxyz789をhandデッキの下に挿入

showid

構文: /showid card [index] または /showid deck [index]

/showid card           # 最も近いカードのIDを表示
/showid card 5         # インデックス5のカードIDを表示
/showid deck           # 最も近いデッキのIDを表示
/showid deck 2         # インデックス2のデッキIDを表示

4. JSONサンプルの適用方法

4.1 オブジェクト生成手順

  1. Object Create Gunで対象のオブジェクトを選択して生成:
  • UIオブジェクト(UI_Button、UI_Text、UI_InputField、UI_Toggle):
    アイテム → ゲーム道具 → UI
  • Triggerオブジェクト(CollisionTriggerBox、PickupTriggerBox):
    アイテム → ゲーム道具 → 道具
  1. Object Control Gunに切り替え
  2. 以下のメニューでJSONを適用:
   属性変更 → コマンド管理 → 文字列適応
  1. 生成したオブジェクトに対してJSON文字列を適応

4.2 重要な設定

Playerに反応するTriggerを使用する場合:

  • 必ず以下の設定を行ってください:
  属性変更 → 衝突有効

オブジェクトにタグを付ける方法:

多くのサンプルでtag:playertag:warriorなどのタグ指定を使用しています。これらのタグをオブジェクトに付ける手順:

  1. Object Control Gunに切り替え
  2. 以下のメニューを選択:
   属性変更 → コマンド管理 → 文字列適応
  1. JSON文字列を入力:
   {"tag":"player,PC"}
  1. タグを付けたいオブジェクトに撃って適応

タグの使用例:

  • {"tag":"player"} – プレイヤー識別用
  • {"tag":"warrior,PC"} – 戦士クラスのPC(複数タグをカンマ区切り)
  • {"tag":"enemy,orc"} – オーク族の敵
  • {"tag":"item,weapon,sword"} – 剣系の武器アイテム

重要なポイント:

  • 複数タグは1つの文字列内でカンマ区切り
  • タグ名にスペースは使用不可
  • コマンドではtag:タグ名の形式で参照
  • 条件の"tag":"warrior,mage"は「warriorまたはmageタグを持つ」という意味

4.3 オブジェクト対応表

各Trigger Objectタイプに対応するコンポーネント:

生成するオブジェクトコンポーネント説明
UI_TextDynamicTextComponentテキスト表示UI
UI_InputFieldDynamicInputFieldComponent入力フィールドUI
UI_ButtonDynamicButtonComponentボタンUI
UI_ToggleDynamicToggleComponentトグルボタンUI
CollisionTriggerBoxDynamicCollisionComponent衝突判定ボックス
PickupTriggerBoxDynamicPickupComponent拾える物体

5. DynamicProcComponent System

5.1 コンポーネントとオブジェクトの関係

各オブジェクトは対応するコンポーネントを持ち、オブジェクト名によってコンポーネントの種類が決まります:

オブジェクトコンポーネント説明
UI_TextDynamicTextComponentテキスト表示UI。ステータス表示などに使用
UI_InputFieldDynamicInputFieldComponent入力フィールドUI。ユーザーからのテキスト入力
UI_ButtonDynamicButtonComponentボタンUI。クリックで発動
UI_ToggleDynamicToggleComponentトグルボタンUI。ON/OFF切り替え
CollisionTriggerBoxDynamicCollisionComponent衝突判定ボックス。プレイヤーやオブジェクトが触れると発動
PickupTriggerBoxDynamicPickupComponent拾える物体。掴む/離すで発動

セットアップ手順:

  1. 対応するオブジェクトを作成
  2. コマンド設定で実行JSONデータを設定

5.2 Base Component (DynamicProcComponent)

DynamicProcComponentとは:
全てのDynamicコンポーネント(Button、Collision、Pickup等)の基礎となる共通システムです。
これにより、全てのコンポーネントで以下の共通機能が使用できます:

  • proc: 実行するコマンドの定義
  • enable: コンポーネントの有効/無効切り替え
  • cond: 条件チェック(タグによるフィルタリング)
  • tag: オブジェクト自体にタグを設定

基本JSON構造:

{
  "enable": true,
  "tag": "interactive,quest_item",
  "proc": [
    "/roll 2d6",
    ":HP+10",
    "/wait 2"
  ]
}

単一コマンドの場合:

{
  "enable": true,
  "tag": "healing_station",
  "proc": "/roll 1d20"
}

5.3 UI_Button (DynamicButtonComponent)

完全なJSON例:

{
  "enable": true,
  "text": "Attack Button",
  "size": 16,
  "width": 200,
  "height": 60,
  "color": "#FFFFFF",
  "input-color": "#FF4444",
  "alignment": 4,
  "proc": [
    "/roll 1d20+5",
    ":HP-10",
    "/create tag:target 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP",
    "/tag-add {last_created} attack_marker"
  ],
  "cond": {
    "tag": "warrior,mage"
  }
}

最小構成例:

{
  "text": "Simple Button",
  "proc": "/roll 2d6"
}

TextAnchor値:

  • 0: UpperLeft
  • 1: UpperCenter
  • 2: UpperRight
  • 3: MiddleLeft
  • 4: MiddleCenter
  • 5: MiddleRight
  • 6: LowerLeft
  • 7: LowerCenter
  • 8: LowerRight

5.4 CollisionTriggerBox (DynamicCollisionComponent)

完全なJSON例:

{
  "enable": true,
  "enter": {
    "cond": {
      "tag": "player,npc"
    },
    "proc": [
      "/roll 1d6",
      ":HP-5"
    ]
  },
  "exit": {
    "proc": [
      "/create tag:exit_point 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP",
      "/tag-add {last_created} exit_marker",
      ":MP+2"
    ]
  }
}

プレイヤー専用トリガー:

{
  "enter": {
    "cond": {
      "tag": "hero"
    },
    "proc": [
      ":XP+100",
      "/load next_area"
    ]
  }
}

5.5 UI_InputField (DynamicInputFieldComponent)

完全なJSON例:

{
  "enable": true,
  "text": "Enter damage amount",
  "size": 14,
  "width": 300,
  "height": 40,
  "color": "#000000",
  "input-color": "#FFFFFF",
  "alignment": 4,
  "line-type": 0,
  "proc": [
    ":HP-{text}",
    "/roll {text}d6"
  ]
}

ステータス表示例:

{
  "text": "=HP",
  "size": 12,
  "proc": [
    ":HP+{text}"
  ]
}

LineType値:

  • 0: SingleLine(単一行)
  • 1: MultiLineSubmit(複数行、Enterで送信)
  • 2: MultiLineNewline(複数行、Enterで改行)

5.6 PickupTriggerBox (DynamicPickupComponent)

完全なJSON例:

{
  "enable": true,
  "pickup": {
    "cond": {
      "tag": "player"
    },
    "proc": [
      "/roll 1d20",
      ":MP-5",
      "/create tag:pickup_effect 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP",
      "/tag-add {last_created} pickup_marker active"
    ]
  },
  "drop": {
    "proc": [
      ":MP+5",
      "/delete tag:pickup_effect"
    ]
  },
  "use-up": {
    "proc": [
      ":MP-10",
      "/create 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP",
      "/tag-add {last_created} use_effect"
    ]
  },
  "use-down": {
    "proc": [
      ":casting=1"
    ]
  }
}

アイテム例:

{
  "pickup": {
    "proc": [
      ":HP+20"
    ]
  }
}

5.7 UI_Text (DynamicTextComponent)

完全なJSON例:

{
  "enable": true,
  "text": "=HP",
  "size": 24,
  "width": 200,
  "height": 50,
  "color": "#FFFFFF",
  "alignment": 4
}

注意: DynamicTextComponentは技術的にはprocフィールドをサポートしていますが、トリガーイベントがないため実際の使用は想定されていません。

ステータス表示例:

{
  "text": "=HP tag:warrior",
  "size": 18,
  "color": "#00FF00"
}
{
  "text": "=MP name:Alice",
  "size": 16,
  "color": "#0080FF"
}

通常テキスト例:

{
  "text": "ステータスボード",
  "size": 20,
  "alignment": 1
}

5.8 UI_Toggle (DynamicToggleComponent)

完全なJSON例:

{
  "enable": true,
  "toggle": true,
  "width": 200,
  "height": 30,
  "input-color": "#FF0000",
  "proc": [
    "/message トグル状態が変更されました",
    ":pvp_mode={text}"
  ]
}

トグル状態の活用:

  • {text} 変数でトグルのON/OFF状態(”True”/”False”)を取得
  • ゲーム設定の切り替えやフラグ管理に使用

6. Condition System (cond)

発動条件設定について:
condフィールドを使用することで、特定の条件を満たす対象のみにコンポーネントの処理を実行させることができます。これにより、プレイヤーのロールやステータスに応じた制限を設けることが可能です。

適用対象:

  • DynamicButtonComponent: ボタンを押したプレイヤーのタグをチェック
  • DynamicCollisionComponent: 衝突したオブジェクト(プレイヤーまたはオブジェクト)のタグをチェック
  • DynamicPickupComponent: オブジェクトを掴んだプレイヤーのタグをチェック

6.1 タグ条件

単一タグ:

{
  "cond": {
    "tag": "warrior"
  }
}

複数タグ(OR条件):

{
  "cond": {
    "tag": "warrior,mage,rogue"
  }
}

7. Special Variables and Replacements

7.1 InputField Variables

  • {text} – 入力された文字列に置換

7.2 Dice Result Variables

  • {dice_result} – 最後に実行されたダイスロールの結果(allDiceSum)に置換

7.3 Character Variables

  • {my_char} – 自分のキャラクター名をname:charactername形式に置換(各種コマンドでの対象指定用)
  • {user_name} – 自分のディスプレイネームに置換
  • {character_name} – 自分のキャラクター名に置換(キャラクター名が設定されている場合のみ)

7.4 Object Reference Variables

  • {last_duplicate} – 最後に複製されたオブジェクトを参照
  • {last_created} – 最後に作成されたオブジェクトを参照

7.5 Status Display

  • =status_name – 自分のステータス値を表示
  • =status_name tag:target – 指定タグを持つプレイヤーのステータス値を表示
  • =status_name name:character – 指定キャラクターのステータス値を表示
  • DynamicInputFieldComponent、DynamicTextComponentで利用可能

8. Complete Usage Examples

8.1 Damage Trap

DynamicCollisionComponentを使用したダメージトラップ。プレイヤーが踏むと2d6のダメージを与え、エフェクトオブジェクトを生成します。

{
  "enter": {
    "cond": {
      "tag": "player"
    },
    "proc": [
      "/roll 2d6",
      "/wait diceroll",
      ":HP-{dice_result}",
      "/create 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP",
      "/tag-add {last_created} damage_effect trap_effect"
    ]
  }
}

8.2 Healing Station

{
  "text": "Heal (+20 HP)",
  "color": "#00FF00",
  "proc": [
    ":HP+20",
    "/wait 5",
    "/enable false"
  ],
  "cond": {
    "tag": "player"
  }
}

8.3 Interactive Door

{
  "text": "Open Door",
  "proc": [
    "/rotate tag:door 0,90,0 2.0",
    "/wait 5",
    "/rotate tag:door 0,0,0 2.0"
  ]
}

8.4 Quest NPC

{
  "text": "Talk to Guard",
  "proc": [
    "/roll 1d20",
    "/teleport tag:player tag:quest_area"
  ],
  "cond": {
    "tag": "adventurer"
  }
}

8.6 Dice-Based Action Sequence

{
  "text": "Attack with Dice",
  "proc": [
    "/roll 2d6",
    "/wait diceroll",
    ":HP-{dice_result}",
    "/create tag:target 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP",
    "/tag-add {last_created} attack_marker"
  ]
}

8.5 Dynamic Status Display

{
  "text": "=HP",
  "size": 16,
  "proc": [
    ":HP+{text}"
  ]
}

8.7 Variable Damage Weapon

{
  "text": "Magic Sword",
  "proc": [
    "/roll 1d8+2",
    "/wait diceroll",
    ":HP-{dice_result} tag:enemy",
    ":MP-5"
  ],
  "cond": {
    "tag": "warrior,paladin"
  }
}

8.8 Healing Potion with Random Effect

{
  "pickup": {
    "proc": [
      "/roll 3d4+4",
      "/wait diceroll",
      ":HP+{dice_result}"
    ]
  }
}

8.9 Self-Targeting Commands

{
  "text": "Heal Self",
  "proc": [
    ":HP+20 {my_char}",
    "/teleport {my_char} tag:healing_area"
  ]
}

8.10 Character-Specific Status Update

{
  "text": "Level Up",
  "proc": [
    ":level+1 {my_char}",
    ":XP=0 {my_char}",
    "/message {my_char}がレベルアップしました!"
  ]
}

8.11 Object Creation and Reference

DynamicButtonComponentを使用したオブジェクト作成と操作。オブジェクトを作成した後、{last_created}変数を使って移動・回転させます。

{
  "text": "Summon and Move",
  "proc": [
    "/create 4.cg<|0.75Z^|a.90D❶0|25.=/|0❶1.cTR|1|1.cTR❶0❶d❶r⑧⑧❶0❶GROUP",
    "/tag-add {last_created} summoned magical",
    "/move {last_created} 5,0,0",
    "/rotate {last_created} 0,90,0",
    "/message {user_name}がオブジェクトを召喚しました"
  ]
}

8.12 User and Character Variables

{
  "text": "Identify",
  "proc": [
    "/message ユーザー名: {user_name}",
    "/message キャラクター名: {character_name}",
    ":HP+10 {my_char}",
    "/message {character_name}の体力が回復しました"
  ]
}

8.13 Collision System Examples

アイテム取得システム(DynamicCollisionComponent使用)

{
  "tag": "item1",
  "enter": {
    "cond": {"tag": "player"},
    "proc": [
      "/message ビデオポーションを発見しました",
      ":HP+20",
      "/delete {this}"
    ]
  }
}

アイテム自身にtag: item1を設定し、プレイヤーが触れると自分のHPを回復して、自分自身を削除

別の方法(タグ削除)

{
  "tag": "item1",
  "enter": {
    "cond": {"tag": "player"},
    "proc": [
      "/message ビデオポーションを発見しました",
      ":HP+20",
      "/delete {this_tag}"
    ]
  }
}

{this_tag}を使ってtag:item1形式で自分自身を削除

敵との戦闘システム(DynamicCollisionComponent使用)

{
  "enter": {
    "cond": {"tag": "player"},
    "proc": [
      "/message {my_char}は敵に攻撃されました!",
      ":HP-10"
    ]
  }
}

敵オブジェクトに設定し、プレイヤーが触れると自分のHPが減少

トラップシステム(DynamicCollisionComponent使用)

{
  "enter": {
    "cond": {"tag": "player"},
    "proc": [
      "/message 罠を発見!ダメージを受けました",
      ":HP-5",
      "/teleport {my_char} tag:safe_zone"
    ]
  }
}

罠オブジェクトに設定し、プレイヤーが触れるとダメージを受けて安全地帯に移動

より安全なトラップシステム(使い捨て)

{
  "tag": "trap",
  "enter": {
    "cond": {"tag": "player"},
    "proc": [
      "/message 罠を発見!ダメージを受けました",
      ":HP-5",
      "/teleport {my_char} tag:safe_zone",
      "/delete {this}"
    ]
  }
}

一度発動すると自分自身を削除する使い捨てトラップ

自己削除システム(DynamicButtonComponent使用)

{
  "text": "Delete This Object",
  "proc": [
    "/message オブジェクトを削除します",
    "/delete {this}"
  ]
}

ボタンを押すと自分自身を削除

自己変換システム(DynamicButtonComponent使用)

{
  "text": "Convert to Fixed",
  "proc": [
    "/fixed {this}",
    "/message オブジェクトをFixedObjectに変換しました"
  ]
}

ボタンを押すと自分自身をFixedObjectに変換

自己複製システム(DynamicButtonComponent使用)

{
  "text": "Duplicate This",
  "proc": [
    "/duplicate {this}",
    "/message オブジェクトを複製しました"
  ]
}

ボタンを押すと自分自身を複製

複製ボックス(DynamicCollisionComponent使用)

{
  "enter": {
      "proc": [
        "/duplicate {hit_object}",
        "/message オブジェクトが複製されました"
      ]
  }
}

オブジェクトがボックスに入ると、そのオブジェクトが複製される

複製後操作システム(複数コンポーネント使用)

{
  "text": "Duplicate and Move",
  "proc": [
    "/duplicate {this}",
    "/move {last_duplicate} 0,5,0 2.0"
  ]
}

自分自身を複製してから、複製されたオブジェクトを上に移動


9. Important Notes

9.1 権限システム

  • GM専用コマンド: teleport, fixed, unfixed, loadの4つ
  • 権限チェックの適用範囲:
  • チャットシステムから実行時: 権限チェックあり(ProcessCommandWithPermissionCheck使用)
  • チャットパレットから実行時: 権限チェックあり(ProcessCommandWithPermissionCheck使用)
  • DynamicProcComponentから実行時: 権限チェックなし(PurseCatsUdonCommand直接使用)
  • DynamicProcComponent経由なら、GMコマンドも誰でも実行可能(ワールド制作者が意図的に配置したものだから)

9.2 利用可能な変数

コマンド変数

  • {dice_result} – 最後のダイスロール結果(/wait diceroll後に利用可能)
  • {my_char} – 自分のキャラクター名(コロンコマンドでname:形式に変換)
  • {user_name} – 自分のディスプレイネーム
  • {character_name} – 自分のキャラクター名(キャラクター名が設定されている場合のみ)
  • {last_duplicate} – 最後に複製されたオブジェクト
  • {last_created} – 最後に作成されたオブジェクト

自己参照変数(DynamicProcComponentのみ)

  • {this} – オブジェクト自身(タグ形式で利用)
  • {this_tag} – オブジェクト自身のタグ(tag:形式)

衝突変数(DynamicCollisionComponentのみ)

  • {hit_player} – 衝突したプレイヤー(user:形式)
  • {hit_character} – 衝突したプレイヤーのキャラクター名(name:形式、キャラ名がない場合は{hit_player}と同じ)
  • {hit_object} – 衝突したオブジェクト(タグ形式で利用)
  • {hit_card} – 衝突したカード(card:id形式)

UI変数

  • {text} – UIコンポーネントのテキスト値
  • DynamicInputFieldComponent: 入力フィールドの値
  • DynamicTextComponent: テキストの値
  • DynamicButtonComponent: ボタンテキストの値

9.3 コマンド実行の注意点

  • {dice_result}変数を使用する場合は、必ず/wait dicerollでダイスロール完了を待つ
  • 衝突変数はDynamicCollisionComponentでのみ利用可能
  • オブジェクトID形式は内部的にサポートされていますが、基本的にはタグや衝突変数を使用してください
  • 条件チェック(cond)は現在tagsのみサポート
  • 複数コマンドは順次実行される
  • エラーが発生すると後続コマンドは実行されない
  • enable: falseの場合、procは実行されない
タイトルとURLをコピーしました