VRChat

[無料] Smart Focus — VRChat アバター 作業のフォーカスがちゃんと当たる Unity 拡張

Hierarchy でアバターをダブルクリックしたら頭が画面外に切れた、ボーンの根元に寄り過ぎてアバターが豆粒になった、装飾アクセサリのせいで本体が小さく映った——そんな経験ありませんか? Smart Focus は、Unity Editor の Hierarchy window / Project window で GameObject をダブルクリックしたとき、Unity 既定の Frame Selected を「対象の SkinnedMeshRenderer / MeshRenderer 全体をしっかり収める perspective-correct な framing」に置き換える Editor 拡張です。 VRChat アバター作業中の「ダブルクリックしたのにフォーカスが微妙」を一掃します。 ---------------------------------------------------------------------- ■ こんな方に ---------------------------------------------------------------------- - VRChat アバターを Unity で触っているとき、Hierarchy のダブルクリックで頭や足が見切れて困っている - 衣装やアクセサリの調整中、Scene ビューでいちいちカメラを手動で寄せ直すのが面倒 - 顔メッシュなどインポート時に X 回転が掛かったオブジェクトでも、ちゃんと正面から見える framing が欲しい - インストールするだけで、設定 UI もホットキー変更も無しで使い始めたい ---------------------------------------------------------------------- ■ できること ---------------------------------------------------------------------- 【Hierarchy window でダブルクリック】 - 対象 GameObject の子孫に SkinnedMeshRenderer または MeshRenderer があれば、画面いっぱい・中央フィットで Scene ビューを切り替えます - SceneView の角度(rotation)はそのまま維持。視線軸を奪いません 【Project window で Prefab GameObject をダブルクリック】 - Prefab Mode に入った直後に、自動で同じ framing を当てます - 右クリック「Open Prefab Asset」や Inspector の「Open」ボタンなど、他経路から Prefab Mode を開いたときには介入しません 【何もしない場面】 - 子孫に SkinnedMeshRenderer / MeshRenderer が無い場合(Light、空 GameObject 等)→ Unity 既定の Frame Selected に委ねます - SceneView が orthographic モード → Unity 既定に委ねます - F キー(Frame Selected ホットキー)は触りません。muscle memory を尊重し、ダブルクリックだけを置き換えます ---------------------------------------------------------------------- ■ インストール ---------------------------------------------------------------------- ダウンロード・解凍して SmartFocus.unitypackage を導入します。 導入後、設定 UI はありません。Hierarchy / Project window でダブルクリックすると即座に動作します。 ---------------------------------------------------------------------- ■ なぜ Unity 既定より良いか ---------------------------------------------------------------------- Unity 既定の Frame Selected には次の課題があります。 - SkinnedMeshRenderer.bounds は culling 用に大きめに設計されており、現在ポーズより緩い framing になる - 球フィット(FoV を考慮しない)なので、画面アスペクト比によって余白が大きくなる - 装飾用の小さな Renderer(ribbon / heart accessory など)が AABB を膨らませると本体が小さく映る Smart Focus は次の手当てで解決します。 1. BakeMesh で SkinnedMeshRenderer の現在ポーズ tight bounds を取得 2. per-axis AABB Contains の outlier filter で、本体(最大 extent renderer)から離れた装飾を framing 対象から除外 3. perspective-correct な両端 binding solver で、画面の縦・横どちらかの端ぴったりに 2 corner が来る最小カメラ距離を求める 4. 非 binding 軸(余裕がある方)を analytic に再センタリング framing 算法の核は同作者の MCP サーバー prefab-sentinel で AI 向けに開発したものを移植しています。VRChat アバターでの visual regression test で検証済み。 ---------------------------------------------------------------------- ■ 動作環境 ---------------------------------------------------------------------- - Unity 2022.3 LTS で開発・検証 - VRChat SDK / ModularAvatar / VRCFury 等の追加依存はありません(一般 Unity プロジェクトでも動作) - Unity 6 系でも当面は動作する見込みですが、将来的に `EditorApplication.hierarchyWindowItemOnGUI` が obsolete になるため、その時期に対応版を検討します ---------------------------------------------------------------------- ■ 使い方 ---------------------------------------------------------------------- インストール後、特別な操作は不要です。 - Hierarchy で対象をダブルクリック → Scene ビューが切り替わります - Project window で Prefab をダブルクリック → Prefab Mode に入った直後に自動 focus 設定項目は今のところありません(v0.1.0)。要望が多ければ将来追加します。 ---------------------------------------------------------------------- ■ ライセンス・利用条件 ---------------------------------------------------------------------- - ライセンス: MIT License - 商用利用: 可(個人・法人を問わず) - 改変: 可 - 再配布: 可(ライセンス表記を保つこと) - 制作物への組み込み: 可 ---------------------------------------------------------------------- ■ 不具合報告・機能要望 ---------------------------------------------------------------------- 不具合報告・機能要望は下記 X(Twitter)アカウントまでお気軽にどうぞ。 X: @tyunta_game ---------------------------------------------------------------------- ■ 更新履歴 ---------------------------------------------------------------------- 【v0.1.0】2026-05-22 - 初版リリース - Hierarchy ダブルクリックで smart focus - Project window で Prefab ダブルクリック → Prefab Mode 起動直後に自動 focus - 公開 API: SmartFocus.SmartFocusController.TryFocus(GameObject) ---------------------------------------------------------------------- ■ 既知の制限・FAQ ---------------------------------------------------------------------- 【Q】F キー(Frame Selected)は smart focus にならない? 【A】はい。F は Unity 全体で muscle memory が強いホットキーなので、ダブルクリックだけを置き換えています。要望があれば将来 `Shift+F` などの別 binding 追加を検討します。 【Q】SceneView を orthographic で使っているとき smart focus が効かない 【A】仕様です。orthographic モードでは Unity 既定の Frame Selected に委ねます(perspective-correct な solver なので ortho では算法が成立しないため)。 【Q】Particle System や Trail Renderer のフォーカスもしてほしい 【A】v0.1.0 では Particle / Line / Trail / VFX Graph 系の Renderer を framing 対象から除外しています(これらが「最大 extent renderer」として core 選定で勝つと framing が壊れるため)。需要があれば opt-in で対応検討します。 【Q】複数の SceneView を開いているとき、どちらが focus される? 【A】SceneView.lastActiveSceneView(最後に active だった SceneView)に対して focus を当てます。 【Q】巨大シーン(Renderer 数 1000+)で重くなる? 【A】SkinnedMeshRenderer 1 つにつき BakeMesh を 1 回呼ぶので、数百 Renderer までは体感即時、それ以上で数十〜数百 ms オーダーになり得ます。問題が出たら BakeMesh を skip するオプション追加を検討します。 ---------------------------------------------------------------------- ■ 謝辞 ---------------------------------------------------------------------- framing 算法は同作者の prefab-sentinel: https://github.com/tyunta/prefab-sentinel v0.7.1 から移植したものです(同じ MIT ライセンス)。AI が Unity で screenshot を撮るときに「対象が画面いっぱいに収まる構図」を 1 コールで返すために組んだ算法が、人間がダブルクリックで使うときにも同じく役立ったので、独立パッケージとして切り出しました。

[無料] Smart Focus — VRChat アバター 作業のフォーカスがちゃんと当たる Unity 拡張
Hierarchy でアバターをダブルクリックしたら頭が画面外に切れた、ボーンの根元に寄り過ぎてアバターが豆粒になった、装飾アクセサリのせいで本体が小さく映った——そんな経験ありませんか? Smart Focus は、Unity Editor の Hierarchy window / Project window で GameObject をダブルクリックしたとき、Unity 既定の Frame Selected を「対象の SkinnedMeshRenderer / MeshRenderer 全体をしっかり収める perspective-correct な framing」に置き換える Editor 拡張です。 VRChat アバター作業中の「ダブルクリックしたのにフォーカスが微妙」を一掃します。 ---------------------------------------------------------------------- ■ こんな方に ---------------------------------------------------------------------- - VRChat アバターを Unity で触っているとき、Hierarchy のダブルクリックで頭や足が見切れて困っている - 衣装やアクセサリの調整中、Scene ビューでいちいちカメラを手動で寄せ直すのが面倒 - 顔メッシュなどインポート時に X 回転が掛かったオブジェクトでも、ちゃんと正面から見える framing が欲しい - インストールするだけで、設定 UI もホットキー変更も無しで使い始めたい ---------------------------------------------------------------------- ■ できること ---------------------------------------------------------------------- 【Hierarchy window でダブルクリック】 - 対象 GameObject の子孫に SkinnedMeshRenderer または MeshRenderer があれば、画面いっぱい・中央フィットで Scene ビューを切り替えます - SceneView の角度(rotation)はそのまま維持。視線軸を奪いません 【Project window で Prefab GameObject をダブルクリック】 - Prefab Mode に入った直後に、自動で同じ framing を当てます - 右クリック「Open Prefab Asset」や Inspector の「Open」ボタンなど、他経路から Prefab Mode を開いたときには介入しません 【何もしない場面】 - 子孫に SkinnedMeshRenderer / MeshRenderer が無い場合(Light、空 GameObject 等)→ Unity 既定の Frame Selected に委ねます - SceneView が orthographic モード → Unity 既定に委ねます - F キー(Frame Selected ホットキー)は触りません。muscle memory を尊重し、ダブルクリックだけを置き換えます ---------------------------------------------------------------------- ■ インストール ---------------------------------------------------------------------- ダウンロード・解凍して SmartFocus.unitypackage を導入します。 導入後、設定 UI はありません。Hierarchy / Project window でダブルクリックすると即座に動作します。 ---------------------------------------------------------------------- ■ なぜ Unity 既定より良いか ---------------------------------------------------------------------- Unity 既定の Frame Selected には次の課題があります。 - SkinnedMeshRenderer.bounds は culling 用に大きめに設計されており、現在ポーズより緩い framing になる - 球フィット(FoV を考慮しない)なので、画面アスペクト比によって余白が大きくなる - 装飾用の小さな Renderer(ribbon / heart accessory など)が AABB を膨らませると本体が小さく映る Smart Focus は次の手当てで解決します。 1. BakeMesh で SkinnedMeshRenderer の現在ポーズ tight bounds を取得 2. per-axis AABB Contains の outlier filter で、本体(最大 extent renderer)から離れた装飾を framing 対象から除外 3. perspective-correct な両端 binding solver で、画面の縦・横どちらかの端ぴったりに 2 corner が来る最小カメラ距離を求める 4. 非 binding 軸(余裕がある方)を analytic に再センタリング framing 算法の核は同作者の MCP サーバー prefab-sentinel で AI 向けに開発したものを移植しています。VRChat アバターでの visual regression test で検証済み。 ---------------------------------------------------------------------- ■ 動作環境 ---------------------------------------------------------------------- - Unity 2022.3 LTS で開発・検証 - VRChat SDK / ModularAvatar / VRCFury 等の追加依存はありません(一般 Unity プロジェクトでも動作) - Unity 6 系でも当面は動作する見込みですが、将来的に `EditorApplication.hierarchyWindowItemOnGUI` が obsolete になるため、その時期に対応版を検討します ---------------------------------------------------------------------- ■ 使い方 ---------------------------------------------------------------------- インストール後、特別な操作は不要です。 - Hierarchy で対象をダブルクリック → Scene ビューが切り替わります - Project window で Prefab をダブルクリック → Prefab Mode に入った直後に自動 focus 設定項目は今のところありません(v0.1.0)。要望が多ければ将来追加します。 ---------------------------------------------------------------------- ■ ライセンス・利用条件 ---------------------------------------------------------------------- - ライセンス: MIT License - 商用利用: 可(個人・法人を問わず) - 改変: 可 - 再配布: 可(ライセンス表記を保つこと) - 制作物への組み込み: 可 ---------------------------------------------------------------------- ■ 不具合報告・機能要望 ---------------------------------------------------------------------- 不具合報告・機能要望は下記 X(Twitter)アカウントまでお気軽にどうぞ。 X: @tyunta_game ---------------------------------------------------------------------- ■ 更新履歴 ---------------------------------------------------------------------- 【v0.1.0】2026-05-22 - 初版リリース - Hierarchy ダブルクリックで smart focus - Project window で Prefab ダブルクリック → Prefab Mode 起動直後に自動 focus - 公開 API: SmartFocus.SmartFocusController.TryFocus(GameObject) ---------------------------------------------------------------------- ■ 既知の制限・FAQ ---------------------------------------------------------------------- 【Q】F キー(Frame Selected)は smart focus にならない? 【A】はい。F は Unity 全体で muscle memory が強いホットキーなので、ダブルクリックだけを置き換えています。要望があれば将来 `Shift+F` などの別 binding 追加を検討します。 【Q】SceneView を orthographic で使っているとき smart focus が効かない 【A】仕様です。orthographic モードでは Unity 既定の Frame Selected に委ねます(perspective-correct な solver なので ortho では算法が成立しないため)。 【Q】Particle System や Trail Renderer のフォーカスもしてほしい 【A】v0.1.0 では Particle / Line / Trail / VFX Graph 系の Renderer を framing 対象から除外しています(これらが「最大 extent renderer」として core 選定で勝つと framing が壊れるため)。需要があれば opt-in で対応検討します。 【Q】複数の SceneView を開いているとき、どちらが focus される? 【A】SceneView.lastActiveSceneView(最後に active だった SceneView)に対して focus を当てます。 【Q】巨大シーン(Renderer 数 1000+)で重くなる? 【A】SkinnedMeshRenderer 1 つにつき BakeMesh を 1 回呼ぶので、数百 Renderer までは体感即時、それ以上で数十〜数百 ms オーダーになり得ます。問題が出たら BakeMesh を skip するオプション追加を検討します。 ---------------------------------------------------------------------- ■ 謝辞 ---------------------------------------------------------------------- framing 算法は同作者の prefab-sentinel: https://github.com/tyunta/prefab-sentinel v0.7.1 から移植したものです(同じ MIT ライセンス)。AI が Unity で screenshot を撮るときに「対象が画面いっぱいに収まる構図」を 1 コールで返すために組んだ算法が、人間がダブルクリックで使うときにも同じく役立ったので、独立パッケージとして切り出しました。