Mirror Tuner - mimyquality/FukuroUdon GitHub Wiki
概要
従来のミラースイッチは、複数の設定済みミラープレハブを切り替えて使うものが殆どでした。
このギミックでは、単一のミラープレハブに対して、その設定値を Udon から直接書き換え操作する事で、柔軟に切り替える事が出来るようにしたものです。
有り体に言うと、 VRC Mirror Reflection を操作するU#スクリプトセットです。
導入手順
プレイヤーオンリーミラーには VRCPlayersOnlyMirror (背景なし No background) のシェーダーを使用しています。 このギミックをそのまま使う場合は、こちらも追加でインポートしてください。
パッケージ内容
VRC Mirror Reflectionを Udon から操作しやすくするマネージャーコンポーネント- VRC Mirror に関連する設定を持っておくプロファイルコンポーネント
- 各種操作スイッチ
使い方
Packages > Fukuro Udon > Samples > MirrorTuner フォルダー内にあるプレハブをHierarchyに置いて、良い感じに位置調整してください。また、ワールドの雰囲気に合わせてスイッチのテキストやメッシュはお好みで改変してください。
Profile オブジェクト内の各ミラープロファイルの設定を調節する事で、そのプロファイルに切り替えた時に、その内容がミラーに反映されます。
プロファイルオブジェクトを増減させた場合は、 Mirror オブジェクトの Mirror Tuner コンポーネントの配列も増減させてください。なお、 Mirror Profile Change Switch のターゲット番号が指定するものは、この配列番号です。
高度な使い方
Mirror Tuner
VRC Mirror Reflection を前提としたスクリプトです。
VRC Mirror Reflection のエイリアスとなるプロパティと、以下の追加メソッドとプロパティが扱えます。
| 型・返り値 | 名前 | 説明 |
|---|---|---|
| bool | DisablePixelLights | VRCMirrorReflection.m_DisablePixelLights のエイリアスです。 |
| bool | TurnOffMirrorOcclusion | VRCMirrorReflection.TurnOffMirrorOcclusion のエイリアスです。 |
| LayerMask | ReflectLayers | VRCMirrorReflection.m_ReflectLayers のエイリアスです。 |
| MirrorClearFlags | CameraClearFlags | VRCMirrorReflection.cameraClearFlags のエイリアスです。 |
| Material | CustomSkybox | VRCMirrorReflection.customSkybox のエイリアスです。 |
| Color | CustomClearColor | VRCMirrorReflection.customClearColor のエイリアスです。 |
| Material | CustomMaterial | ミラーメッシュ( VRC Mirror Reflection に一緒に付いている Mesh Renderer )のマテリアルを差し替えます。 |
| void | SetProfile(int) | Profile List の指定番号のプロファイルを読み込み、ミラーに反映します。 |
| void | SetProfile0~9 | メソッド名の数字と一致する Profile List 番号のプロファイルを読み込み、ミラーに反映します。仕様上0から9までの10個までが操作可能です。uGUI からの操作用。 |
なお、 VRC Mirror Reflection のパラメーターのうち、
- Mirror Resolution
- Maximum Antialiasing
- Custom Shader
は Udon から操作できません。
うち上2つは、VRChat クライアント上からプレイヤーが設定する項目となります。
Custom Shader は代わりとして、ミラーメッシュのマテリアルを差し替える形でシェーダーの切替を実現します。
Mirror Profile
Mirror Tuner コンポーネントがプロファイル切り替え時に参照する変数を格納するスクリプトです。
- Disable Pixel Lights : これが有効だと、リアルタイム設定のポイントライト/スポットライトが強制的に頂点ライティングとして扱われます。
- Turn Off Mirror Occlusion : ミラー上のオクルージョンカリングを無効にします。鏡の中でオブジェクトがちらつくのが見える場合は、これを有効にします。
- Reflect Layers : 選択したレイヤー上のオブジェクトのみがミラーに映ります。
- Custom Material : ミラーメッシュに割り当てられるマテリアルです。ここにマテリアルが割り当てられていない場合はデフォルトのマテリアルに差し戻されます。
- Camera Clear Flags : レンダリング前に背景をクリアするためにミラーが使用する Clear Flags を指定します。デフォルトの From Reference Camera では、ミラー面をレンダリングするカメラと同じフラグが使用されます。
- Custom Skybox : Camera Crear Flags が Custom Skybox に設定されている場合、このマテリアルが背景として使用されます。マテリアルが割り当てられていない場合、背景は黒になります。
- Custom Clear Color : Camera Crear Flags が Solid Color に設定されている場合、この色が背景として使用されます。Aチャンネルの透過が有効なため、PlayerOnlyMirror シェーダー等のくり抜きシェーダーと組み合わせて使う事ができます。
MirrorProfile Change Switch
Mirror Tuner のプロファイルを切り替えるための操作スイッチ用スクリプトです。
- Mirror Tuner : 操作対象の
Mirror Tunerです。 - Target Number :
Mirror Tunerに対し、この番号で SetProfile() を実行します。
以下の public メソッドがあります。
| 返り値 | 名前 | 説明 |
|---|---|---|
| void | SetProfile() | 実行するとインタラクトと同じ処理を実行します。 |
Mirror Toggle Switch
インタラクトする度に、 Target List にセットした全オブジェクトのアクティブ状態を反転するスクリプトです。
ミラー専用のような名前になっていますが,汎用的に使えます。
サンプル
以下のワールドにサンプルを設置しています。
https://vrchat.com/home/world/wrld_4b7ed36e-c436-409f-9f87-8a6f4c80e79b