.mochi.xml を書いてから、Unity が prefab を生成し、ワールドをアップロードするまでの扱いです。
部品は、.mochi.xml の 1 ファイルが表す、名前の付いたオブジェクトの組です。次の例では、Assets/Hall/ のエントリポイントが Assets/Parts/ の部品 Sign を使っています。
<!-- file: Assets/Parts/Sign.mochi.xml -->
< Object name = " Board " scale = " 2 1 0.1 " >
< MeshFilter mesh = " builtin:Cube " />
ファイル名 <部品の名前>.mochi.xml です。拡張子は小文字の .mochi.xml だけを部品として扱いますルート要素 部品の名前と同じ名前です。大文字と小文字も区別します ファイルの作り方 Project ウィンドウで Assets > Create > MoCHI File を選ぶと、選んだフォルダにエントリポイントの雛形を作ります。入力した名前がファイル名とルート要素の名前になり、空白は _ になります。部品の名前に使えない名前のときは作らず、Console に理由が出ます 部品の使い方 部品の名前をタグとして書きます(<Sign/>) 部品を探す範囲 プロジェクトの Assets/ と Packages/ のフォルダの下の全部です(Unity がパッケージのキャッシュにだけ置いているパッケージは探しません)。import の記述はありません 部品の名前の重複 同じ名前の部品が 2 つあると、その名前を使った所でエラーになります。使わなければエラーになりません 使えない名前 Object・Prefab・Props・Prop・For・If・Else・Slot・At・Row・Grid・Transform は、部品の名前にできません(組み込みの要素の名前と、要素ではない Transform)部品の中の部品 書けます。ただし、部品が自分自身を使うとエラーになります
エントリポイントは、ルート要素に prefab="true" を書いたファイルです。保存すると、MoCHI がこのファイルから prefab を 1 つ生成します。
< Stage prefab = " true " position = " 0 1 0 " >
ルート要素の属性 prefab です。値は true か false です。エントリポイントのルート要素には、inspect の歩き方の設定 walkFrom・playerRadius・playerHeight・minPassageWidth も書けます(ルート要素 )エントリポイントの props 値を渡す側が無いので、全部の props に default が必要です prefab のルート GameObject の名前は部品の名前です。位置は原点で、変更できません 保存で生成する範囲 Assets/ の下のエントリポイントだけです。Packages/ の下のファイルは、prefab="true" があっても保存では生成しません
生成の契機 エントリポイントか、それが読むファイル(部品・prefab・画像・表・マテリアル)が保存され、Unity がインポートした後です Play モード中の保存 Edit モードに戻ってから生成します 生成物の配置先 Assets/MoCHI Generated/ の下に、エントリポイント 1 つにつきフォルダ 1 つを作ります。フォルダは、エントリポイントのパスから先頭の Assets/ と末尾の .mochi.xml を除いた名前です配置先の例 Assets/Gallery/Gallery.mochi.xml からは Assets/MoCHI Generated/Gallery/Gallery/Gallery.prefab を生成しますフォルダの中身 prefab(<部品の名前>.prefab)と、マテリアルの複製(マテリアルの複製 )と、生成の記録(.mochi-record)です 書くファイル 中身が変わるファイルだけです エラーの扱い prefab とマテリアルは書かず、前の出力を残します(生成の記録と、T# スクリプトを持つ部品の <Name>.Mochi.cs は書きます)。エラーは Console に [MoCHI] <ファイル>(<行>,<列>): error MOCHInnnn: <文> の形式で出ます 警告の扱い 生成がファイルを書いたか消したときだけ、Console に [MoCHI] <ファイル>(<行>,<列>): warning MOCHInnnn: <文> の形式で出ます。何も変えない保存では出ません 成功の扱い Console に [MoCHI] Generated <prefab のパス> from <エントリポイント>. と出ます パッケージの更新後 全部のエントリポイントを 1 回生成し直します
生成物の手での変更 そのエントリポイントの生成は一時停止し、Console にエラーが出ます。ワールドのアップロードも停止します 変更の破棄 生成物の Inspector の Regenerate (discard changes) か、TsukimiCode > MoCHI > Regenerate で、変更を捨てて生成し直します 生成物を変えたい場合 .mochi.xml を変更するか、シーンに置いた prefab のオーバーライドを使います変更せずに保存した prefab 生成物の prefab を Unity で開き、何も変えずに保存しただけでは、手での変更と見なしません 生成物の prefab の削除 そのエントリポイントは生成をやめた状態になります。Regenerate で再開し、生成が不要なら prefab="true" を外します .mochi.xml の削除生成物は残り、Console に警告が出ます。不要なら、TsukimiCode > MoCHI > Clean Up Outputs Without a Source で削除します(元のファイルが無い生成物の削除 ) Unity の中での移動と改名 生成物のフォルダも一緒に移動します。prefab の GUID は変わらないので、シーンからの参照は保たれます
生成物の prefab を Inspector で開くと、上端に次の 5 種類の表示が出ます。
表示 意味 Generated by MoCHI from <元のファイル>. Edit the source file; changes made here stop the next generation.生成物には常に出ます。Select source で元のファイルを選択します This prefab was changed after it was generated, so generation is paused.手での変更で一時停止しています。Regenerate (discard changes) のボタンが出ます The last generation failed (see the Console).前回の生成がエラーになりました Generation from the source is stopped.生成をやめた状態です Waiting for T# to compile the T# scripts of its parts. The prefab is updated after that.T# スクリプトのコンパイルを待っています(2 段の生成 )
メニュー TsukimiCode > MoCHI > Regenerate。Project ウィンドウの右クリックの MoCHI > Regenerate も同じです 選択する物 .mochi.xml か、生成物のフォルダの中のアセット動作 手での変更を捨てて生成し直します。生成をやめていたエントリポイントも再開します prefab="true" の無いファイル生成せず、Console に警告が出ます 全部を作り直す TsukimiCode > MoCHI > Regenerate All(右クリックの MoCHI にもあります)です。選択しなくても、Assets/ の下の全部のエントリポイントを同じように生成し直します
メニュー TsukimiCode > MoCHI > Clean Up Outputs Without a Source。Project ウィンドウの右クリックのメニューにはありません 対象 Assets/MoCHI Generated/ の下に生成の記録が残っていて、記録の元の .mochi.xml が無いエントリポイントです。選択は必要ありません。.mochi.xml が在れば、prefab="true" を外したエントリポイントも対象になりません対象が無い場合 何も削除せず、Console に [MoCHI] Every output generated by MoCHI still has its .mochi.xml. Nothing to clean up. と出ます 確認のウィンドウ 削除の前に出ます。エントリポイントごとに元のパスと、生成物のファイルの数とフォルダを並べます(11 件目からは件数だけです)。Delete で削除し、Cancel では何も削除しません 削除する物 生成の記録に載っている生成物のうち、今もフォルダの中にあるファイルと、生成の記録です。MoCHI が生成していないファイルは削除しません フォルダの削除 中が空になるフォルダだけを、Assets/MoCHI Generated/ の下で上へ順に削除します。ほかのファイル(別のエントリポイントの生成物を含みます)が残るフォルダは削除しません シーンと prefab への影響 削除した prefab のインスタンスは、置いていたシーンと prefab で Missing Prefab になります 終わったときの表示 Console に [MoCHI] Deleted the files generated from n MoCHI source(s) that no longer exist: <元のパス>. と出ます。残したフォルダがあれば、同じ行の Kept <フォルダ>: … に出ます。削除できなかった物は、[MoCHI] Could not delete <パス>. の警告に出ます
Play の前 Edit モードを出るときに、全部のエントリポイントを検査します。最新でない物は、Play モードに入った後で Console に警告します。Play は停止しません ワールドのアップロードの前 VRChat SDK でワールドをビルドするときに、Assets/ の下の全部のエントリポイントを検査します。アップロードするシーンが使う生成物の prefab のエントリポイントに、エラー・最新でない・手で変更された・コンパイル待ちのどれかが 1 つでもあれば、ビルドを停止します シーンが使っていないエントリポイント 検査して、問題があれば Console に警告します。ビルドは停止しません アップロードを停止しない物 生成をやめたエントリポイントと、元のファイルを削除したエントリポイントです 停止したときの文面 [MoCHI] Build stopped: n generated prefab(s) do not match their source. に続けて、直し方が出ます