コンテンツにスキップ

MoCHI のリファレンス(試験中)

MoCHI は試験中です(書き方と生成物の形は、今後の版で変わることがあります)。 MoCHI は、VRChat のワールドに置くオブジェクトを .mochi.xml に記述し、Unity で保存したときに prefab を生成するマークアップです(位置・prefab・コンポーネント・画像や表の行による繰り返しを書けます)。

ページ内容
構文の概観要素の分類、タグと GameObject の対応、部品と props、生成時と実行時の値、展開の順序、名前のスコープ
要素のリファレンス要素ごとの書式・置ける場所・置ける子・属性・作る物・name を書かないときの名前・エラー
値の文法float・int・Vector3・Color・bool・パス・束縛・データ・static・列挙の EBNF と診断の番号
導入と生成ファイルと部品、エントリポイント、保存での生成、生成物の扱い、Play とアップロードの前の検査
props と同一性props の渡し方、同一性と key
コンポーネントと prefabコンポーネント、マテリアルの複製、prefab の中の変更、<Slot> の中身、取り付け位置
コンポーネントの一覧書けるコンポーネントの分類、値の型、アセットの参照、書けないコンポーネント
物理のコンポーネントRigidbody・コライダー・ジョイントなどの属性
描画のコンポーネントレンダラー・Light・Camera・パーティクルなどの属性
音のコンポーネントAudioSource・リバーブ・Audio の Filter の属性
UI のコンポーネントCanvas・Image・Button・レイアウトグループなどの属性
TextMeshPro のコンポーネントTextMeshPro・TextMeshProUGUI などの属性
VRChat のコンポーネントVRCPickup・VRCObjectSync・VRCMirrorReflection などの属性
その他のコンポーネントAnimator・コンストレイント・NavMesh などの属性
レイアウトsize と pivot、<Row> と <Grid> の並べ方、部品の大きさ
T# スクリプトを持つ部品生成される <Name>.Mochi.cs、実行時の props、2 段の生成
inspectMCP の inspect に mochi を渡したときの引数と、返す JSON
エラー診断の番号の一覧と、エラーになる例
収録先TsukimiSharp(T#)と同じ Unity のパッケージです。MoCHI のために別のパッケージを導入する必要はありません
T# との関係部品に動き(ワールドの実行中の処理)を付けるときだけ、T# でスクリプトを書きます(T# スクリプトを持つ部品)。スクリプトを付けない部品だけで作るなら、T# のコードを書く必要はありません
AI からの確認MCP サーバの inspect に mochi 引数を渡します(inspect)
Assets/Gallery/Gallery.mochi.xml
<Gallery prefab="true">
<Object name="Wall" position="0 1.5 4" rotation="0 180 0">
<For each="art" in="folder('art/')">
<Frame key="{art.key}" image="{art.file}" position="0 0 0"/>
</For>
</Object>
</Gallery>
<!-- file: Assets/Gallery/Frame.mochi.xml -->
<Frame>
<Props>
<Prop name="image" type="Texture"/>
</Props>
<Object name="Canvas">
<MeshFilter mesh="builtin:Quad"/>
<MeshRenderer material="../Art/Frame.mat" mainTexture="{image}"/>
</Object>
</Frame>
部分役割
prefab="true"このファイルから prefab を生成することを示す属性です。このファイルがエントリポイントになります
<Object>GameObject を 1 つ作ります
<For each="art" in="folder('art/')">art/ フォルダの画像 1 枚ごとに、中身を繰り返します
<Frame …/>部品 Frame(Frame.mochi.xml)を置きます
{art.file}繰り返しの行の列 file を読む束縛です
<Props>部品が受け取る値(props)の宣言です
<MeshRenderer … mainTexture="{image}"/>コンポーネントを足します。mainTexture を書くと、.mat を複製して画像を設定します
表記意味
samples/ から始まる例エラーにならず、prefab の生成まで進む例です
rejected/ から始まる例エラーになる例です。出る診断の番号を本文に添えてあります
<!-- file: … -->例のファイルの区切りです。最初のファイルがエントリポイントで、パスはプロジェクトのルートからの相対パスです
例の無い記述Unity の中での生成の動作など、エラーになるかどうかでは確認できない内容です

例が参照するアセットは次の 6 個です。

パス中身
Assets/Kit/KitFrame.prefabルート KitFrame の下に Canvas(MeshFilter と MeshRenderer)・Plate(その下に Label)・Mount
Assets/Kit/KitRoom.prefabルート KitRoom の下に Floor・Mount1・WallEast(その下に Mount0 と Mount3)・Mount2・Door
Assets/Art/Frame.matStandard シェーダーのマテリアル
Assets/Gallery/art/01_Sea.png画像
Assets/Gallery/art/02_Moon.png画像
Assets/Data/art.csv列は id・file・title。行は sea と moon の 2 行で、file は上の 2 枚の画像を指します