VRCQuestTools 2.5.0 あとがき
そんなにネタもないので少ししんどい(挨拶)
NDMFでの実行順の制御
2.4.3ではアバターの変換処理をOptimizing Phaseに変更したのですが、2.5.0ではこれを元のTransforming Phaseに戻しました。
元々はTexTransToolのAtlasTextureによるマテリアル結合で発生する不具合の対応のための変更でしたが、結局後にVRCFuryとの組み合わせでなぜか変換処理が行われなかったり、AtlasTextureの設定によっては元の処理順のままの方が良い、というケースが発生していました。
#28: TTTAtlasTextureでマテリアルの結合を行うとVQTによるシェーダーの変更が起こらなくなることがある
#31: 2.4.3 Version breaks compatibility with vrcfury + NDMF builder
こうなってくるとツール側で実行順序を決め打ちすることもできなくなってくるためオプションで実行順を制御できるようになりました。
ただ、TTT AtlasTextureに限って言うとPCとQuestで設定を分けてしまった方が使い勝手が良さそうな気はしています。
下の画像は実際に自分のアバタープロジェクトで使用している設定ですが、VQT GameObject Removerを使ってPCビルドとAndroidビルドでTTT AtlasTextureの設定を使い分けられるようになっています。
PCビルド: ビルド開始時にAtlasTexture_Questが削除され、AtlasTexture_PCだけが処理される。
Androidビルド: ビルド開始時にAtlasTexture_PCが削除され、AtlasTexture_Quest配下にある2つのAtlasTextureだけが処理される。
NDMFを使わない非破壊処理
NDMFのおかげで非破壊改変ツールの実装に必要な処理の多くを省くことができ非常に楽ができていますが、VRCQuestToolsの場合はNDMF登場前からのツールということもあり、引き続きNDMFのない環境でも使用可能にしています。
とはいえ、この場合でも処理によっては非破壊的に適用できた方が都合の良いものがあり、そのうちの一つがネットワークIDの割り当てでした。単純に、こんなものいちいち手動で割り当ててられないですからね。
NDMFに頼らずに非破壊的な処理を実装するには、IVRCSDKPreprocessAvatarCallbackインターフェースを実装したクラスを作成します。callbackOrderの小さい順で実行されますが、NDMFによる実行順制御がないためこの値は注意して決める必要があります。今の時点で気にかけるべき数値は以下のとおりではないかと思います。
-11000: NDMF
これを基準にするくらいならNDMF内で処理した方が良いですが…
-10000: VRCFury
-1100: LilycalInventory (NDMFなしの場合)
エディタ拡張のローカライズ
今回ロシア語翻訳が追加されたわけですが、内部的にはローカライズの仕組み自体にも変更を入れています。
元々の仕組みでは、文言を取得するためのabstract classを作成し、言語ごとに実際の文言を返すクラスを実装するという形をとっていました。日本語と英語で作業漏れを防ぎたいという意図がありましたが、言語が増えることで少々無理が出てきそうでした。そこでNDMFやAAOの実装を見てみると.poファイルで文言を管理していました。
実のところ最近まで.poはバイナリファイルだと誤認しており面倒に思い避けていたのですが、特にそんなことはなく(それは実際には.moファイルだったわけですが)、またUnityではLocalizationAssetとしてロードして簡単に扱えるメリットがあったため.poファイルを使ったローカライズを採用することにしました。元々UIから文言を参照するときは前述のabstract classを使用していたため、LocalizationAssetへのアクセスを同じインターフェースでラップすることでコード上の変更を少なくできたのは良い点でした。
おわりに
バグ修正のはずが結果的に機能追加となったわけで、なかなかうまくはいかないものです。まあ常にうまくいくはずはないのですが。本来的な意味での新機能の追加はいつになるやら…構想や小ネタがたまっていく一方です。