ブログ内検索カテゴリーNow Playingカウンターカレンダー最新記事(11/16)
(08/09)
(08/25)
(01/18) ブログの評価 ブログレーダー |
SAVE POINT 2主にゲームの話題を。PAGE | 349 346 345 344 343 342 | ADMIN | WRITE 2025.11.16 Sun 15:27:35 VRChat Unity上でのオブジェクトの消し方VRChatの話。手を付け始めた頃に欲しかった情報をまとめた。 全体的な改変のワークフローは概ねこちらを参考にして行っている。他にも参考になる記事は数多く存在するが、なかなか1箇所にまとまっていない情報を集約する。 まえがきアバターの改変に手を付けると必ず「アバターのオブジェクトツリーの一部を消したく」なるはずである。しかし単純にオブジェクトを「削除」すると思わぬ不具合に繋がる場合がある。また削除した髪型や衣装などを「やっぱり元に戻したい」時に困った事になる。改変作業の前提として、Prefabのオブジェクトツリーから「一部のオブジェクトを消す」方法を解説する。 1. ツリーから削除する (オススメしない)自分で追加したPrefabを丸ごと削除する分には問題無い。一方でPrefab内部のツリーの一部を消す場合は、後々困る場合もあるのでオススメしない。2. 非アクティブにするだけ(オススメしない)エディタ左側のツリーで対象オブジェクトを選択し、Inspector最上部のチェックボックスをオフにするだけ。お手軽だが、オブジェクトを明示的に消す意図があるのであれば、この方法で見えなくするのはオススメしない。 チェックボックスの操作1つで切り替えられるので編集中は便利だが、
3. 非アクティブかつEditorOnlyに設定する一番オススメの方法。ただしExpressionメニュー(Exメニュー)から表示/非表示を切り替えられるオブジェクトの場合は、4.の手順で行うこと。まず2.と同様にエディタ左側のツリーで対象オブジェクトを選択し、Inspectorのチェックボックスからチェックを外して非アクティブにする。次にチェックボックスの下のプルダウンメニューから「EditorOnly」を選択する。 EditorOnlyに設定したオブジェクトは編集中はそのままだが、Unity内で再生ボタンを押している間やアバターをアップロードした後は消去される。最終的なデータサイズを削減しつつ、編集中は残るため変な不具合に遭遇する可能性も減り、元に戻すのも簡単である。 元に戻す際にEditorOnlyを外し忘れないよう注意。 4. Exメニューから非表示にできるものを消すExメニューから表示/非表示を切り替えられるオブジェクトは、切り替え時に他のオブジェクトの状態にも影響を及ぼしている場合がある(後述)。これに起因してアバターが意図しない状態になってしまう可能性があるため、以下の手順で「オブジェクトが表示されていない状態」にアバターを固定してから消すとよい。
もともとメニューで出し入れ可能だったオブジェクトも、これで表面上は痕跡を残さず消すことができた。 実はこの手順だけではAnimation Controller関連やParameterといった別の残骸データは残っているのだが、これらまで消そうとするとAnimatorの編集に手を出す必要があり、ややこしいので本項では割愛する。アバターのパラメータ数に余裕があるのであれば触る必要は無い。 余談Exメニューの項目を消す方法に関してExメニューの中身は本来、アバターに同梱されているExpressions Menuのアセットファイルに保存されている。このファイルはプロジェクト全体で共通であるため、安易に編集すると別の改変シーンにも影響してしまう。そこで本項ではファイルの内容をシーン上のオブジェクトツリーへ展開し、そちらを編集する方法を紹介した。これらのメニュー項目オブジェクトは、なぜか非アクティブにしただけではExメニューからは消えないため3.の方法が必要となる。 なぜ4.の手順が必要なのかExメニューで非表示にできるオブジェクトは、ざっくり
ここで、1つのパラメータから複数のオブジェクトの状態を制御している場合がある。そのうちの一部、目に見えるパーツのオブジェクトをEditorOnlyで消したとしても、残ったオブジェクトにパラメータが影響し、アバターが意図しない状態になるおそれがある。 例えばある衣装を表示するパラメータが
オブジェクトのメッシュの一部を消すには上記の方法で消せるのはツリーの「オブジェクト1個単位」である。ツリー上でそれ以上分解できない1つのオブジェクトの、3Dグラフィックの一部を消したい場合は別の方法でポリゴンメッシュの一部を消去する必要がある。Blenderで直接編集してもよいが、消すだけなら多くの場合Unityのみで対処することもできる。まず対象のオブジェクトにSkinned Mesh Rendererが使用されている場合、AAOの「Remove Mesh By 〇〇」やMAの「Mesh Cutter」といったコンポーネントで、特定条件に合致するポリゴンメッシュの頂点(と、それらを使う面)をピンポイントで消去することができる。特に「AAO Remove Mesh By Box」 は、Unityの3Dシーン上で消去範囲を確認しながら直感的な編集操作が可能なので個人的に愛用している。 またアバターの中には「身体を絞る」シェイプキーが実装されており、大まかな身体の部位毎に細くして改変衣装からはみ出さないようにすることができる。が、単純に当該部位を非表示にしたいのであれば、上述のAAO Remove Mesh by BlendShapeやMAのVertex Filter - By Blendshapeのいずれか、BlendShapeを指定してメッシュを消去するコンポーネントを使用するとよい。メッシュの不可視化に加えて頂点数自体を削減することができるため、アバターの処理負荷を軽減できる。 Skinnedではない方のMesh Rendererが使用されている場合これらは使えないが、 MeshDeleterWithTextureというツールであればMesh Rendererにも対応しており、同様にUnity上の操作のみで削除することができる。 PR CommentsComment Form |