コンテンツにスキップ

inspect

MCP サーバの inspect に mochi 引数を渡すと、.mochi.xml を MoCHI でコンパイルして診断・生成する物の数・レイアウトの数を JSON で返します。inspect はディスクのファイルを読むので、先に保存するか、保存していない本文を text と files で渡します。

{ "mochi": { "path": "Assets/Gallery/Gallery.mochi.xml", "tree": true } }

mochi の中に書ける引数は次の 7 個です。

引数内容
pathワールド全体を記述するエントリポイントの .mochi.xml です。プロジェクトのルートからのパス(Assets/ か Packages/ で始まる)で書きます。プロジェクトの中の絶対パスも受け付けます
projectPathUnity のプロジェクトのフォルダです。省略すると、サーバの起動時に渡されたフォルダを使います
textpath のファイルの本文です。渡すと、path に保存されている内容の代わりにこの本文を読みます。path にファイルが無くても構いません
files部品や表の本文の配列([{ "path": …, "text": … }])です。同じパスに保存されているファイルの代わりに読み、保存されていない部品も、保存されている部品と同じように見つけます。パスは path と同じ書き方です
treetrue で tree を返します。既定では返しません
svgtrue で layout.svg を返します。既定では返しません
gltftrue で、svg と同じ箱を 3D のファイル(.gltf)にしてプロジェクトの Library/MoCHI/Preview/ の下に書き、layout.gltf にパスを返します。既定では書きません

保存していない本文を渡す例です。

{ "mochi": { "path": "Assets/Go/GoPuzzle.mochi.xml", "text": "<GoPuzzle prefab=\"true\">…</GoPuzzle>",
"files": [ { "path": "Assets/Kit/Frame.mochi.xml", "text": "<Frame>…</Frame>" } ] } }
projectPath の省略Tsukimi MCP のウィンドウで設定したクライアントは、起動時にプロジェクトのフォルダを渡すので、通常は省略できます
source・sources との同時指定ツールのエラー(isError: true)になります
部品のファイル部品は使われた所で確認するので、部品のファイルを渡すと、default の無い props が MOCHI3008 になります
prefab="true"見ません。渡したどの .mochi.xml もエントリポイントとしてコンパイルします
読む物と書く物ディスクの内容と、text・files で渡した本文を読みます。書くのは gltf: true のときの .gltf 1 つだけで、生成物ではありません。text と files の本文はプロジェクトに書きません
止めてある定義Unity に生成させないように X.mochi.xml.txt の名前で置いた定義も、本文を text に入れ、path を .mochi.xml のパスにすれば確認できます(.txt のパスのまま渡すと MOCHI2001 です)
T# スクリプトを持つ部品本文だけでは確認できません。Unity が保存された .cs から作るプログラムアセットが必要なためです
同じパスを 2 回渡す・形が違うツールのエラー(isError: true)になります

最上位のキーは次の 14 個です(counts・layout・tree は compiles が true のときと T# スクリプトのコンパイルを待っているときだけ在り、outputs は compiles が true のときだけ在ります)。

キー内容
schemaVersionJSON の形式の版です(今は 1)
entry正規化したエントリポイントのパスです
projectroot(プロジェクトのフォルダ)と from(argument か startup)です
compilesエラーが無く、prefab を書ける状態なら true です。ワールドの見た目の正しさは表しません
diagnostics診断の配列です(診断の要素)
diagnosticsOmitted診断が 100 件を超えたときだけ在ります。省いた件数を書いた文です
summarytotal・bySeverity・byOrigin です。省いた診断も数えます
waitingForCompileエラーは無いが、T# スクリプトのコンパイルを待っている場合だけ在ります。message と files(生成する <Name>.Mochi.cs のパス)です
countsobjects(ルートを含む GameObject の数)・prefabInstances(prefab のインスタンスの数。中は数えません)・components(MoCHI が足したコンポーネントの数)・partsUsed(部品の名前ごとの使用回数。エントリポイント自身は数えません)です
layout箱の数・重なりとはみ出しの数・歩く距離です(layout)
treetree: true のときだけ在ります。展開した GameObject を 1 行に 1 つ並べた文字の配列です(tree)
treeOmitted行が 300 行を超えたときだけ在ります
outputsprefab(bytes と sha256)・files(マテリアルの複製と .meta の path と bytes)・behaviourFiles(生成する <Name>.Mochi.cs の path と bytes)です。prefab のパスは含みません
generatedUnity がこのエントリポイントから作った prefab が、今の入力から作った物かです。state・prefab(prefab のパス。notGenerated では null)・message(英語の説明)を持ち、いつも在ります(generated)
キー内容
codeMOCHInnnn の番号です
severityerror か warning です
message英語の説明です
locationfile(プロジェクトのルートからのパス)・startLine・startCol・endLine・endCol です。始まりと終わりは同じ位置で、位置の無い診断は 1 行 1 列です
origin原因の区分です(原因の区分)
explain・fix・witness・pathT# の診断とキーの並びを揃えるためのキーで、常に null です
キー内容
sizeFrom使った箱の大きさの由来のうち、最も粗い物です。written(書いた大きさ)・mesh(メッシュの境界)・collider(当たり判定)の順に粗くなります。書いた size と、<Row> と <Grid> の箱と、ルートに size のある部品を置いた所は written です。<Row> と <Grid> が size を書いていない <Prefab> を中の見えるメッシュの境界で測って並べたときも、<Row> と <Grid> の箱は written で、並べた prefab の中の箱は mesh か collider です
measuredsize を持つ GameObject の数です
notMeasuredsize を持たない GameObject の数です。これらは、メッシュか当たり判定から箱を作れたときだけ、重なりとはみ出しに数えます
boxes由来ごとの箱の数です(written・mesh・collider。3 つとも必ず在ります)。メッシュと当たり判定の箱は、1 つにつき 1 つです
skipped・trigger・disabled・mesh・model・other箱にしなかった物の数を、理由ごとに数えた物です。trigger(すり抜ける当たり判定)・disabled(enabled が false の当たり判定か Renderer)・mesh(大きさを読めないメッシュ。Unity がまだ読んでいないモデルの中のメッシュなど)・model(置いたモデルの中の物)・other(Terrain・TerrainCollider・WheelCollider・CharacterController)です。5 つとも必ず在ります
overlapCount・overlaps重なる組の数と、組の配列(a・b・depth)です。組は物ごとに数え、同じ 2 つの物が複数の箱で重なっても 1 件で、a・b は最も深く重なる箱です。深い順に最大 50 件です
overflowCount・overflowsはみ出しの数と、配列(object・container・amount)です。大きい順に最大 50 件です
overlapsOmitted・overflowsOmitted配列から省いた物があるときだけ在ります
canvasCount・canvases・sizeDelta・heightWorld Space の Canvas のルートの数と、配列です。要素は path・identity・at・sizeDelta(value と、from が written か default)・width と height(矩形の幅と高さ。メートル)を持ちます。木の順に最大 50 件です
inFrontOfCanvasCount・inFrontOfCanvas・canvasCanvas の見る側にあって Canvas に重なって見えるメッシュと当たり判定の数と、配列です(Canvas の手前)。要素は canvas(path・identity・at)・object(overlaps の a と同じ形)・distance(Canvas の平面からの距離。メートル)を持ち、active でない箱には inactive が付きます。近い順に最大 50 件です
canvasesOmitted・inFrontOfCanvasOmitted配列から省いた物があるときだけ在ります。省いた件数を書いた文です
svgsvg: true のときだけ在ります。上から見た平面図です
svgOmitted箱が 150 を超え、図を省いたときだけ在ります
gltfgltf: true で書けたときだけ在ります。path(プロジェクトのルートからのパス)・boxes(箱の数)・bytes・sha256 です
gltfOmittedgltf: true で書かなかったときだけ在ります。理由の文です(Library/ が無い・コンパイルが通らない・箱が多すぎる・書けない)
walk歩き始めが在るときだけ在ります(layout.walk)
walkOmitted歩かなかったときだけ在ります。理由の文です(歩き始めが無い・床が無いなど)。walk と walkOmitted はどちらか 1 つだけ在ります
a・b・object・containeroverlaps の要素の a・b と、overflows の要素の object・container は、path(ルートからの名前の並び)・identity(同一性)・at(書いた場所 ファイル:行:列)・from(箱の由来)を持ちます。置いた prefab の中の箱は inside(prefab のルートからの名前の並び)を、メッシュと当たり判定の箱は component(箱を作ったコンポーネントの型)も持ちます。path は一意とは限らないので、<For> の兄弟は identity で区別します
重なり箱どうしを、向きのある箱で判定します。箱は、書いた大きさ(size を書いた物・<Row> と <Grid>・ルートに size のある部品を置いた所)と、MoCHI が読めるメッシュと当たり判定から作ります。size を書いた物は、自分のメッシュと当たり判定から箱を作りません。面が接するだけの組・書いた大きさの箱とその子孫の箱の組・同じ物の箱どうし(同じ prefab のインスタンスの中の箱どうしを含みます)は数えません
はみ出し書いた大きさを持つ最も近い祖先の箱から、外へ出た距離です。メッシュと当たり判定の箱は容れ物にしません。容れ物の厚みが 0 の向き(床のような平らな物)は測りません
数の丸めメートルで 0.0001 単位に丸めた十進です
svg の図右が +X、上が +Z、単位はメートルです。重なる組は小さいほうの箱だけを赤く塗り(同じ大きさなら両方)、はみ出した箱は縁を橙にします。メッシュと当たり判定の箱は破線です。箱ごとの <title> に、ルートからの名前の並びが入ります
重なりとの違いCanvas とその下の UI は箱を持たないので、Canvas の前に立つ物は重なりに数えません。layout.inFrontOfCanvas は、その代わりに Canvas の手前にある物を挙げます
対象の矩形マークアップに書いた World Space の Canvas のルートの矩形です。大きさは sizeDelta、位置は pivot と GameObject の位置・回転・拡大で決まり、厚みは 0 です
見る側Canvas のローカル座標の −Z の向きです
数える箱メッシュと当たり判定の箱のうち、矩形の見る側に 0.5 m 以内まで来ていて、矩形の平面へ写すと矩形と重なる物です。矩形を貫く箱は距離 0 で数えます。active でない箱も数え、inactive を付けます
数えない物矩形と同じ平面の板・矩形の奥の物・縁が接するだけの物・書いた大きさ(size)の箱・その Canvas とその下の物の箱・Screen Space の Canvas・入れ子の Canvas・置いた prefab の中の Canvas です
まとめ方Canvas と物の組ごとに 1 件で、物の箱のうち最も近い物を残します

歩き始めから床の上を体の幅で歩き、道をふさぐ物ごとの距離と、そこまで来られる体の幅を返します。歩き方は、エントリポイントのルート要素の属性で変えます。

<Gallery prefab="true" walkFrom="0 0 -4" minPassageWidth="1.2">
…
</Gallery>
設定エントリポイントのルート要素の walkFrom(歩き始め)・playerRadius(体の半径)・playerHeight(体の高さ)・minPassageWidth(欲しい通路の幅)です。値と既定値はルート要素にあります。prefab には書かれません。エントリポイントでない部品のルート要素に書くと MOCHI1005、範囲の外の値と束縛 {…} は MOCHI1009 です。エントリポイントを別のエントリポイントの部品として使ったときは、その設定は適用されません
歩き始めwalkFrom が優先です。無ければ、マークアップに書いた VRCSceneDescriptor の spawns の最初の行き先です。置いた prefab の中の VRCSceneDescriptor は読みません。VRCSceneDescriptor が 2 つ以上あるときと、spawns が空のときは walkOmitted です
床歩き始めの真下にあり、上面が歩き始めの y から 0.05 m 以内の箱のうち、最も高い上面が床の高さです。上面がその高さから 0.05 m 以内の箱を全部床にして、0.1 m の格子で歩きます。段・坂・別の高さの床は上りません
道をふさぐ物床の高さの 0.05 m 上から、playerHeight に 0.4 m を足した高さまでの間に掛かる箱です。当たり判定の無いメッシュの箱もふさぎます。ほかの箱の容れ物になる箱(<Row>・<Grid>・size と子を持つ物)は通り抜けます
距離格子の上の道の長さです。直線より最大で約 8% 長く出ます
図svg と gltf には描きません
キー内容
start・position・spawnCount・spawn歩き始めです。from(walkFrom か spawns)・position(prefab のルートからの座標)・at(書いた場所)です。spawns のときは spawnCount(spawns の数)と spawn(最初の行き先の名前の並び)も在ります
floor・y・cells・area歩く床です。y(床の高さ)・boxes(床にした箱の数)・cells(0.1 m の格子の数)・area(立てる面積。平方メートル)です
values・playerRadius・playerHeight・minPassageWidth・value・bodyWidth・blocksFrom・blocksTo・grid・widthLimit使った値です。playerRadius・playerHeight・minPassageWidth は value と from(default か written)を持ちます(minPassageWidth の既定値は null)。ほかに bodyWidth(体の幅)・blocksFrom と blocksTo(道をふさぐ高さの範囲)・grid(格子の間隔 0.1)・widthLimit(測る幅の上限)です
blockers・containers・inactive道をふさぐ箱・通り抜けた容れ物の箱・active でないので無視した箱の数です
exhibitCount・reachedCount・unreachedCount道をふさぐ物(展示物)の数と、そのうち届く物と届かない物の数です。展示物は箱を物ごとにまとめた物です
exhibits・reached・distance・width・via展示物の配列です。届く物を近い順に、届かない物を後に、最大 50 件並べます。object(path・identity・at。置いた prefab の中の物は inside も)・reached・distance(触れられる所まで歩く距離。届かなければ null)・width(そこまで来られる一番太い体の幅)です。via は、台に載る物や壁に埋めた物のように隣に立つ空きが無い物が、接している物を通して届いたときだけ在り、通した物を指します。そのときの distance と width は、通した物の値です
exhibitsOmitted展示物が 50 を超えたときだけ在ります
unreachableAreaCount・unreachableAreas・min・max・point体の入る広さがあるのに、歩き始めから届かない床の数と配列です。大きい順に最大 20 件で、area・min と max(x と z)・point(中の 1 点の x と z)・width(そこへ行ける一番太い体の幅)を持ちます
unreachableAreasOmitted届かない床が 20 を超えたときだけ在ります
narrowest・toward届く展示物への道のうち最も狭い width と、それを決めた point(x と z)と、その道の先の物(toward)です。届く物が在るときだけ在ります
belowMinPassageWidth・belowMinPassageWidthOmittedminPassageWidth を書いたときだけ在ります。width が minPassageWidth より狭い展示物を、狭い順に最大 50 件並べた配列(object・width・reached)と、省いた物があるときの文です

state は次の 7 種類です。判定は Unity が生成するときと同じ規則で、text か files を渡したときは、渡した本文と比べます(message にもそう書かれます)。

state意味
upToDate今の入力から作った prefab が在ります
staleprefab が今の入力と違うか、まだ作っていません。保存した変更は、Unity がインポートして作り直すまでこの状態です
handEdited生成した後に生成物が手で変更されたので、生成を止めています
failedエラーがあって作れません。message は最初のエラーです
stoppedprefab が削除されたので、生成を止めています
waitingForCompile部品の T# スクリプトのコンパイルを待っています
notGeneratedUnity が prefab を作らないファイルです。ルート要素に prefab="true" の無い部品・Packages/ の下のファイル・text で渡しただけで保存されていないエントリポイントです。prefab は null です
並び字下げ・名前・<書いたタグ>・@ファイル:行:列(親と同じファイルならファイルを省きます)・既定と違う pos・rot・scale・size・pivot・prefab <パス>・mount <付け先>・components A,B・overrides n・inactive です
用途人と AI が読むための形式で、区切りは決まった形式ではありません

診断の origin は次の 3 種類で、直す場所が違います。

区分意味対処番号の数
subsetMoCHI が受け付けないか、まだ対応していない書き方ですマークアップを直します45
environmentプロジェクトの物(ファイル・画像・表の行・インポート)が無いか、準備ができていませんプロジェクトを直します14
tool書き手の誤りではない見込みが高いエラーですそのファイルを添えて報告します2
番号意味と対処
MOCHI9001まだ対応していない書き方です。別の書き方にします。欠陥として報告する物ではありません
MOCHI2009アセットに .meta がまだありません。Unity にインポートさせてから、もう一度確認します
MOCHI8001部品か、関数を呼ぶ束縛が T# を必要としますが、この環境には T# がありません
MOCHI3016T# スクリプトが、MoCHI の生成物と一緒にコンパイルできません。示された場所を直します。場所は .cs か、生成物の失敗した行の元になった .mochi.xml の束縛です
MOCHI2014不要になった <Name>.Mochi.cs が残っています(警告)。使っていなければ削除します

全部の番号はエラーにあります。

対象扱い
ワールドの見た目・光・歩いた感触答えません。Unity で確認します
箱の無い物どうしの衝突数えません。箱は書いた大きさと、MoCHI が読めるメッシュと当たり判定からだけ作ります。重なりが 0 でも、ぶつかっていないことの根拠にはなりません。Canvas とその下の UI も箱を持たないので、手前の物が UI を隠す配置は layout.inFrontOfCanvas で見ます
Unity がまだインポートしていない変更generated はディスクのファイルと比べるので、保存した変更は Unity がインポートするまで stale です
保存していない変更text と files で渡さない限り見えません
T# のコンパイルの状態最新のソースでコンパイルしたかは判定できません(2 段の生成)
MOCHI の番号の説明T# の diagnostics ツールは TUKI の番号だけを扱い、MOCHI の番号は載っていません。原因の区分で判断します