要素ごとに、書式と、分類・置ける場所・置ける子・属性・作る物・name を書かないときの名前・エラーになる書き方を同じ欄で示します。分類の意味と要素の展開の順序は構文の概観にあります。
<Object>・<Prefab>・<Row>・<Grid> と部品のタグ(ホスト)は、次の 14 個の属性を受け付けます。
| 属性 | 値 | 意味 | 既定値 |
|---|
name | string | GameObject の名前 | 要素ごとの節の「name を書かないときの名前」 |
key | string | 兄弟の中で GameObject を区別する値です(同一性と key)。prefab には書かれません | name と同じ |
position | x y z | 親からの相対位置(メートル)。Canvas の下の GameObject には書けません(anchoredPosition か anchoredPosition3D を使います) | 0 0 0 |
rotation | x y z | オイラー角(度)。Unity の Quaternion.Euler と同じ順で適用します | 0 0 0。<Prefab> は prefab のルートの値のまま |
scale | x y z | 拡大率 | 1 1 1。<Prefab> は prefab のルートの値のまま |
active | true か false | GameObject の active | true。<Prefab> は prefab のルートの値のまま |
static | 空白で区切った語 | Static のフラグ(static)。その GameObject だけに付き、下の GameObject には付きません | なし。<Prefab> は prefab のルートの値のまま |
size | w h d | 大きさ(メートル・0 以上)。レイアウトと inspect の数にだけ使い、prefab には書かれません(レイアウト)。<Row> と <Grid> には書けません(子を並べた箱が大きさです)。RectTransform を持つ GameObject には書けません(sizeDelta を使います) | なし |
pivot | x y z(各 0〜1) | size の箱の中で原点がある位置の割合。0.5 0 0.5 は底面の中央。RectTransform を持つ GameObject では RectTransform の pivot(x y)です | 箱の中心。RectTransform では 0.5 0.5 |
anchorMin | x y | RectTransform の anchorMin(RectTransform を持つ GameObject だけ) | 0.5 0.5 |
anchorMax | x y | RectTransform の anchorMax(RectTransform を持つ GameObject だけ) | 0.5 0.5 |
anchoredPosition | x y | RectTransform の anchoredPosition(Canvas の下の GameObject だけ) | 0 0。Canvas の下の、ルートが RectTransform の <Prefab> は prefab のルートの値のまま |
anchoredPosition3D | x y z | RectTransform の anchoredPosition3D。x y は anchoredPosition、z は位置の z(親の Canvas の単位)です。Canvas の下の GameObject(ルートが RectTransform の <Prefab> を含む)だけに書けます。anchoredPosition と一緒には書けず、Canvas のルートにも書けません(position を使います) | 0 0 0 |
sizeDelta | x y | RectTransform の sizeDelta(RectTransform を持つ GameObject だけ) | 100 100 |
<!-- The fountain is static for lighting and batching. -->
<Object name="Fountain" position="0 0 5" rotation="0 45 0" scale="2 1 2" static="lighting batching"/>
<Object name="Banner" position="0 3 5" active="false"/>
| |
|---|
| RectTransform になる GameObject | UI のコンポーネント(Image・Button など、RectTransform が必要な物)を書いた GameObject と、Canvas を書いた GameObject の下の全部の GameObject です。Unity の GameObject > UI で作った物と同じ形です |
| 位置と大きさ | anchorMin・anchorMax・anchoredPosition・sizeDelta・pivot(どれも x y)で書きます。値の意味は Unity の RectTransform と同じです |
| 親が RectTransform でない GameObject | Canvas のルートなどです。position(x y z)で置き、anchoredPosition と anchoredPosition3D は書けません |
| 奥行き | Canvas の下の GameObject の z は anchoredPosition3D の 3 つ目の数で、書かなければ 0 です |
| Canvas のルートの大きさ | World Space の Canvas のルートには sizeDelta を書きます。書かなければ Unity の既定の 100 × 100(拡大が 0.001 なら 0.1 m 四方)で、MOCHI7001 の警告が出ます。その大きさでよければ sizeDelta="100 100" と書くと警告は消えます |
| 並べ方 | HorizontalLayoutGroup・VerticalLayoutGroup・GridLayoutGroup を書きます。Canvas の下には <Row> と <Grid> を書けません |
Canvas の下の <Prefab> | prefab のルートの型のまま置きます。ルートが RectTransform なら RectTransform の属性、Transform なら position・rotation・scale です(その下の物は RectTransform になりません) |
<Object name="Panel" position="0 1.5 2" scale="0.001 0.001 0.001" sizeDelta="800 400">
<Canvas renderMode="WorldSpace"/>
<Object name="Background" anchorMin="0 0" anchorMax="1 1" sizeDelta="0 0">
<Object name="Buttons" anchorMin="0 0" anchorMax="1 0" pivot="0.5 0" sizeDelta="0 40">
<HorizontalLayoutGroup spacing="8"/>
<Object name="Prev"><Image color="#FF6060"/><Button/></Object>
<Object name="Next"><Image color="#60A0FF"/><Button/></Object>
<Object name="Title" anchorMin="0.5 1" anchorMax="0.5 1" anchoredPosition="0 -20" sizeDelta="300 40" pivot="0.5 1">
<TextMeshProUGUI text="Gallery" fontSize="32"/>
anchoredPosition3D の 3 つ目の数は位置の z で、UI の一部を Canvas の平面から前後へずらします。
<Object name="Panel" position="0 1.5 2" scale="0.001 0.001 0.001" sizeDelta="800 400">
<Canvas renderMode="WorldSpace"/>
<Object name="Title" anchoredPosition3D="0 120 -20" sizeDelta="600 80">
<TextMeshProUGUI text="Gallery" fontSize="48"/>
次の例の 5 つのホストは name を書いていないので、GameObject の名前は順に GameObject・Row・Grid・KitFrame・Sign です。
<Prefab src="../Kit/KitFrame.prefab"/>
<!-- file: Assets/Hall/Sign.mochi.xml -->
| 欄 | 内容 |
|---|
| 分類 | ルート要素 |
| 置ける場所 | ファイルの最上位に 1 つだけ |
| 置ける子 | <Props>(1 つまで)・ホスト・コンポーネントのタグ・<For>・<If>・<Slot>。<At> は書けません。コンポーネントのタグは、部品を置いた物(エントリポイントなら prefab のルート)に付きます |
| 属性 | 下の表の 5 個だけです。prefab 以外の 4 個は inspect の歩き方の設定で、エントリポイントのルート要素だけに書けます。prefab には書かれません |
| 作る物 | エントリポイントとして生成するとき、prefab のルートの GameObject 1 つ(位置は原点)。部品として使われたときは、使った所の部品のタグが GameObject を作ります |
name を書かないときの名前 | 部品の名前(ルート要素に name は書けません) |
| エラーになる書き方 | ファイル名と違う名前(MOCHI1003・root-name-mismatch)・組み込みの要素と同じ名前(MOCHI3003・builtin-part-name)・下の表に無い属性(MOCHI1005・root-attribute)・エントリポイントでない部品のルート要素の walkFrom・playerRadius・playerHeight・minPassageWidth(MOCHI1005)・walkFrom・playerRadius・playerHeight・minPassageWidth の範囲の外の値と束縛(MOCHI1009)・2 つ目の <Props>(MOCHI1004・two-props) |
| 属性 | 値 | 意味 | 既定値 |
|---|
prefab | true・false | true でエントリポイントになります(導入と生成) | false |
walkFrom | x y z | inspect の歩く距離の歩き始め(prefab のルートからのメートル)。y は立つ床の高さです(layout.walk) | マークアップに書いた VRCSceneDescriptor の spawns の最初 |
playerRadius | float(0.1 以上) | 歩く体の半径(メートル)。体の幅は、半径に 0.005 を足した値の 2 倍です | 0.2 |
playerHeight | float(0 より大きい) | 歩く体の高さ(メートル)。道をふさぐ高さの上の端は、この値に 0.4 を足した高さです | 1.6 |
minPassageWidth | float(0 より大きい) | 欲しい通路の幅(メートル)。これより狭い道でしか届かない物を挙げます | なし |
<Object name="…" position="x y z" …>
| 欄 | 内容 |
|---|
| 分類 | ホスト |
| 置ける場所 | ルート要素・ホスト・<For>・<If>・<At> の直下 |
| 置ける子 | ホスト・コンポーネントのタグ・<For>・<If>・<Slot> |
| 属性 | ホストの共通の属性だけです |
| 作る物 | GameObject 1 つ(Transform 付き。UI のコンポーネントを書いたときと Canvas の下では RectTransform 付き) |
name を書かないときの名前 | GameObject |
| エラーになる書き方 | 共通の属性に無い属性(MOCHI1005・tag-attribute)・<Transform> の子(MOCHI1004・transform-element)・<At> の子(MOCHI1004・at-outside-prefab)・<Props>・<Prop> の子(MOCHI1004) |
<Row spacing="d" align="bottom|center|top" …>
| 欄 | 内容 |
|---|
| 分類 | ホスト |
| 置ける場所 | ルート要素・ホスト・<For>・<If>・<At> の直下 |
| 置ける子 | ホスト・コンポーネントのタグ・<For>・<If>・<Slot>。並べるのはホストの子で、<For>・<If> の展開と <Slot> の中身を含みます |
| 属性 | size を除くホストの共通の属性と、下の表の 2 個です |
| 作る物 | GameObject 1 つ。子の位置を決めて +X 方向へ並べます(レイアウト) |
name を書かないときの名前 | Row |
| エラーになる書き方 | size(MOCHI1005・row-with-size)・子の position(MOCHI1005・row-child-position)・size の無い <Object> の子(MOCHI1008・row-child-without-size) |
| 属性 | 値 | 意味 | 既定値 |
|---|
spacing | float(0 以上) | 子と子の間隔(メートル) | 0 |
align | bottom・center・top | 高さの違う子の縦の揃え方 | center |
<Grid columns="n" spacing="x y" align="bottom|center|top" …>
| 属性 | 値 | 意味 | 既定値 |
|---|
columns | int(1〜10000) | 列の数 | 必須 |
spacing | float 1 つか 2 つ(x y・0 以上) | 列の間隔と行の間隔。1 つなら両方に同じ値です | 0 |
align | bottom・center・top | 高さの違う子の縦の揃え方 | center |
<Prefab src="パス.prefab か モデル.fbx" fill="パターン" overflow="repeat" gap="x y z" …>
| 欄 | 内容 |
|---|
| 分類 | ホスト |
| 置ける場所 | ルート要素・ホスト・<For>・<If>・<At> の直下 |
| 置ける子 | prefab の中の変更になる子(<At>・コンポーネントのタグ・path のある <Slot>。部品のファイルの中だけ・prefab の中の変更)と、prefab のルートの下に足す子(ホスト・<For>・<If>・path の無い <Slot>) |
| 属性 | ホストの共通の属性と、下の表の 5 個です |
| 作る物 | prefab のインスタンス 1 つ(prefab の配置)。src はモデルのファイル(.fbx など)でもよく、prefab と同じく置きます。prefab の中に入れ子で置かれた prefab(と prefab のバリアント)の中も、Unity の Hierarchy に出る名前でたどれます |
name を書かないときの名前 | prefab のルートの GameObject の名前。overflow="repeat" で足したインスタンスは 元の名前 (1)・元の名前 (2) と続きます |
| エラーになる書き方 | src が無い(MOCHI1008)・.prefab でもモデルでもない src(MOCHI2008)・Unity の外で、まだ Unity が読んでいないモデル(MOCHI2017)・エントリポイントのファイルでの prefab の中の変更(MOCHI3013・override-in-entry)・束縛を書いた fill(MOCHI1009・fill-binding)・子が取り付け位置より多いときの、gap の無い overflow="repeat"(MOCHI1008・repeat-without-gap)・取り付け位置より多い子(MOCHI3012・too-many-to-fill) |
| 属性 | 値 | 意味 | 既定値 |
|---|
src | パス(.prefab) | 置く prefab | 必須 |
fill | 名前のパターン(prefab の中のパスとパターン) | 子を付ける取り付け位置です(取り付け位置) | なし |
overflow | repeat | 取り付け位置が足りないとき、インスタンスを足します(繰り返しの配置)。fill と一緒に書きます | なし |
gap | x y z | 足すインスタンスどうしのずれです。置いた prefab の回転(書いた rotation か、prefab のルートの回転)で回した向きに進みます。overflow="repeat" と一緒に書きます | なし |
sizeDelta・anchorMin・anchorMax・pivot | x y | ルートが RectTransform の prefab だけに書けます。prefab のルートの値を上書きします(位置は position)。ルートが Transform の prefab に書くと MOCHI1005 です | prefab の値 |
<部品の名前 props の名前="値" … name="…" position="x y z" …>
| 欄 | 内容 |
|---|
| 分類 | ホスト。名前が同じコンポーネントがあっても、その名前の部品があれば部品のタグとして読みます(MOCHI3017 の警告が、部品ごとに最初に使った所で出ます) |
| 置ける場所 | ルート要素・ホスト・<For>・<If>・<At> の直下 |
| 置ける子 | 使う側の中身(ホスト・<For>・<If>・<Slot>)です。中身は部品の中の <Slot> へ行きます(<Slot>)。コンポーネントのタグは書けません |
| 属性 | ホストの共通の属性と、部品が宣言した props(部品の引数・props) |
| 作る物 | GameObject 1 つ。部品のファイルの中身(<Props> を除く)がその子になります |
name を書かないときの名前 | 部品の名前 |
| エラーになる書き方 | 宣言に無い props(MOCHI3005・prop-undeclared)・default の無い props を渡さない(MOCHI3008・prop-missing)・型に合わない props の値(MOCHI3006・prop-wrong-type)・行き先の <Slot> が無い中身(MOCHI2012・slot-unknown)・自分自身を使う部品(MOCHI3004・part-cycle)・同じ名前の部品が 2 つ(MOCHI3002・duplicate-part-name)・要素にも部品にも無い名前(MOCHI3001) |
<!-- file: Assets/Hall/Wrap.mochi.xml -->
<!-- file: Assets/Hall/Holder.mochi.xml -->
<Object name="Hook"><Slot/></Object>
<コンポーネントの型名 C# のプロパティ名="値" …/>
| 欄 | 内容 |
|---|
| 分類 | コンポーネントのタグ |
| 置ける場所 | <Object>・<Row>・<Grid> の直下(コンポーネントを足す)と、<Prefab>・<At> の直下(既存のコンポーネントの変更・部品のファイルの中だけ)と、ルート要素の直下(部品を置いた物に足す。T# スクリプトを持つ部品では、スクリプトの UdonBehaviour と同じ物です)。条件で付けるときは、<If> の中に <Object> を置き、その中に書きます |
| 置ける子 | 構造の配列の要素(<ConstraintSource>・<LOD>・<OptionData>・<Burst>・構造の配列)だけです |
| 属性 | C# のプロパティ名で書きます。書ける属性と値はコンポーネントの一覧にあります。書かない属性は Unity の AddComponent で足したときの既定値のままです。T# スクリプトを持つ部品の中では、実行時に変わる値も書けます(T# スクリプトを持つ部品)。key(英字・数字・_ の単純な名前。書いたまま読みます)を書くと、そのコンポーネントの ID が型と key で決まります(同一性と key)。1 つの GameObject の上では、<UdonBehaviour> を含む全部のコンポーネントで同じ key は 1 つだけです。パスの #key が指すのは <UdonBehaviour> だけです |
| 作る物 | 親の GameObject のコンポーネント 1 つ。<Prefab>・<At> の直下では足さずに、同じ型の既存のコンポーネントを、書いた順に 1 つ目・2 つ目と変更します。add="true" を書くと、同じ型があっても新しく足します(足した物もほかの参照から指せます) |
name を書かないときの名前 | なし |
| エラーになる書き方 | <For>・<If> の直下(MOCHI1004・component-in-for)・子要素(MOCHI1004)・一覧に無い属性(MOCHI1005・component-attribute)・prefab に無いコンポーネントの変更(MOCHI3010・override-missing-component)・key に書いた束縛(MOCHI1009)・1 つの GameObject の上で重なった key(MOCHI4001・component-key-twice)・<Prefab>・<At> の直下で既存のコンポーネントを変えるタグの key(add="true" で足すタグには書けます)(MOCHI1005)・配列・UnityEvent・物の参照の属性と material に書いた、実行時に変わる値(MOCHI9001) |
<Light type="Directional"/>
<Seat name="Seat" position="0 0 1"/>
<!-- file: Assets/Example/Seat.mochi.xml -->
<BoxCollider isTrigger="true"/>
<Object name="Cushion" position="0 0.4 0"/>
<For each="行の名前" in="folder('パス')">
| 欄 | 内容 |
|---|
| 分類 | 制御 |
| 置ける場所 | ルート要素・ホスト・<For>・<If>・<At> の直下(部品のタグの中身にも書けます) |
| 置ける子 | ホスト・<For>・<If>・<Else>・<Slot>。コンポーネントのタグは書けません |
| 属性 | 下の表の 2 個だけです |
| 作る物 | なし。中身を、データの行ごとに <For> の親の下に展開します |
name を書かないときの名前 | なし |
| エラーになる書き方 | each か in が無い(MOCHI1008)・in に書いた束縛(MOCHI2007・for-in-from-prop)・二重引用符の folder("…")(MOCHI2007・data-source-double-quote)・直下のコンポーネントのタグ(MOCHI1004・component-in-for)・each・in 以外の属性(slot を含む)(MOCHI1005) |
| 属性 | 値 | 意味 | 既定値 |
|---|
each | 名前(名前) | 行の名前です。中で {行の名前.列} と書いて行の値を読みます | 必須 |
in | folder('パス') か table('パス') | データです(データ)。書いたまま読み、束縛は書けません | 必須 |
<For each="room" in="table('../Data/art.csv')">
<Object name="{room.title}" key="{room.key}">
<For each="art" in="folder('../Gallery/art/')">
<Object key="{art.key}" name="{room.title}"/>
<If test="true|false|{名前}">
| 欄 | 内容 |
|---|
| 分類 | 制御 |
| 置ける場所 | ルート要素・ホスト・<For>・<If>・<At> の直下(部品のタグの中身にも書けます) |
| 置ける子 | ホスト・<For>・<If>・<Else>・<Slot>。コンポーネントのタグは書けません |
| 属性 | test だけです。生成時に決まる bool の値を書きます |
| 作る物 | なし。test が true のとき中身を <If> の親の下に展開し、false のときは何も作りません |
name を書かないときの名前 | なし |
| エラーになる書き方 | test が無い(MOCHI1008)・bool でない test(MOCHI5003・if-not-bool)・実行時に変わる値の test(MOCHI5003)・test 以外の属性(MOCHI1005) |
<Booth name="East" lit="true"/>
<Booth name="West" position="4 0 0"/>
<!-- file: Assets/Example/Booth.mochi.xml -->
<Prop name="lit" type="bool" default="false"/>
<Object name="Counter" size="2 1 1"/>
<Object name="Lamp" position="0 2 0">
<Light type="Point" range="4"/>
| 欄 | 内容 |
|---|
| 分類 | 制御 |
| 置ける場所 | <If> の直後(次の兄弟の要素)だけです |
| 置ける子 | ホスト・<For>・<If>・<Else>・<Slot>。コンポーネントのタグは書けません |
| 属性 | ありません。条件は直前の <If> の test です |
| 作る物 | なし。直前の <If> の test が false のとき中身を <Else> の親の下に展開します |
name を書かないときの名前 | なし |
| エラーになる書き方 | 直前が <If> でない <Else>(MOCHI1004・else-without-if)・属性(MOCHI1005) |
<Slot path="prefab の中のパス" name="…"/>
| 欄 | 内容 |
|---|
| 分類 | 差し込み |
| 置ける場所 | 部品のファイルの中で、ルート要素・ホスト・<For>・<If>・<At> の直下。path のある <Slot> は <Prefab> の直下だけです |
| 置ける子 | なし |
| 属性 | 下の表の 3 個です |
| 作る物 | なし。部品のタグの子に書かれた中身のうち、行き先がこの <Slot> の物を、<Slot> の親の下に展開します。エントリポイントとして生成するときは、中身を渡す側が無いので何も作りません(<Slot> による中身の受け渡し) |
name を書かないときの名前 | なし |
| エラーになる書き方 | 同じ <Slot> を 2 か所に置く(MOCHI3011・slot-twice)・部品に無い名前の slot(MOCHI2012・slot-unknown)・束縛を書いた slot(MOCHI1009・slot-binding)・<Prefab> の直下でない所の path(MOCHI1005)・子要素(MOCHI1004) |
| 属性 | 値 | 意味 | 既定値 |
|---|
name | 名前(名前) | この <Slot> の名前です。書かないと既定の <Slot/> になります | なし |
path | prefab の中のパス(prefab の中のパスとパターン) | <Prefab> の直下だけに書けます。中身を prefab の中のその GameObject の下に足します | なし |
slot(使う側の中身に書く) | 名前 | 中身の要素に書き、行き先の <Slot> の name を選びます。書かなければ既定の <Slot/> へ行きます。<For>・<If> には書かず、その中の子に書きます | なし |
<At path="Plate/Label" active="true|false">
| 欄 | 内容 |
|---|
| 分類 | 差し込み |
| 置ける場所 | 部品のファイルの中の <Prefab> の直下だけ |
| 置ける子 | コンポーネントのタグ(指した GameObject の既存のコンポーネントの変更)と、ホスト・<For>・<If>・<Slot>(指した GameObject の下に足す子) |
| 属性 | 下の表の 2 個だけです |
| 作る物 | なし(prefab の中の変更) |
name を書かないときの名前 | なし |
| エラーになる書き方 | <Prefab> の直下でない所(MOCHI1004・at-outside-prefab)・エントリポイントのファイル(MOCHI3013・override-in-entry)・path が無い(MOCHI1008)・prefab に無いパス(MOCHI2010・at-path-not-found)・path・active 以外の属性(MOCHI1005) |
| 属性 | 値 | 意味 | 既定値 |
|---|
path | prefab の中のパス(prefab の中のパスとパターン) | prefab のルートからの GameObject の名前の並びです。空文字はルートです | 必須 |
active | true か false | 指した GameObject の active | prefab の値のまま |
| 欄 | 内容 |
|---|
| 分類 | 宣言 |
| 置ける場所 | ルート要素の直下に 1 つまで |
| 置ける子 | <Prop> だけ |
| 属性 | なし |
| 作る物 | なし |
name を書かないときの名前 | なし |
| エラーになる書き方 | 2 つ目の <Props>(MOCHI1004・two-props)・ルート要素の直下でない所・<Prop> でない子(MOCHI1004)・属性(MOCHI1005・props-attribute) |
<Prop name="…" type="string" default="…" runtime="true|false"/>
| 欄 | 内容 |
|---|
| 分類 | 宣言 |
| 置ける場所 | <Props> の直下 |
| 置ける子 | なし |
| 属性 | 下の表の 4 個だけです |
| 作る物 | なし |
name を書かないときの名前 | なし |
| エラーになる書き方 | name か type が無い(MOCHI1008)・一覧に無い型の名前(MOCHI3006・prop-type-case)・子要素(MOCHI1004・prop-child)・ホストの属性と同じ名前(MOCHI3007・prop-reserved)・同じ名前を 2 回(MOCHI3009)・束縛を書いた default(MOCHI5001・default-with-binding)・true・false でない runtime(MOCHI1009)・Object の default(MOCHI1005・prop-object-default)・Object の runtime="true"(MOCHI1009)・T# スクリプトを持つ部品の Object(MOCHI9001) |
| 属性 | 値 | 意味 | 既定値 |
|---|
name | 文字 | props の名前です。ホストの属性の名前(name・key・position・rotation・scale・active・static・size・pivot・anchorMin・anchorMax・anchoredPosition・anchoredPosition3D・sizeDelta)と slot は使えません。束縛で読むには名前の形にします | 必須 |
type | 型の名前 | bool・int・float・string・Vector3・Color・Texture・Material・GameObject・Object のどれかを、大文字と小文字まで一致させて書きます | 必須 |
default | type の型の値 | 使う側が渡さなかったときの値です。束縛は書けません。Object には書けません | なし(使う側で必ず渡します) |
runtime | true か false | true で、実行時に変わる props になります(T# スクリプトを持つ部品) | false |