bdunderscore / modular-avatar

Other
476 stars 61 forks source link

IEditorOnlyのコンポーネントを消さないオプションが欲しい #667

Open Narazaka opened 6 months ago

Narazaka commented 6 months ago

Play中にコンポーネント値を変更し、Play終了で書き戻すという編集機能をもつ拡張を作っています。 https://github.com/Narazaka/AvatarParametersSaver しかしIEditorOnlyをつけるとPlay時にReplacementRemoveIEditorOnlyで削除されてしまい、逆につけないとVRCSDKのアップロード警告にひっかかります。 Play時のみコンポーネントを消さない(NDMFプラグイン側で責任を持って消す あるいはそもそもVRCSDKが消すので放置する)という挙動が欲しいので、IDoNotAutoRemove的なものが欲しいです。

あるいはそもそもこのVRCSDK以前に消す挙動は必要なんでしょうか?

bdunderscore commented 6 months ago

VRCFuryとの互換性のため、MAもVRCFもすべてのフックをプレイモードで発火しています。その結果、VRCSDKに内包されたIEditorOnlyを消すフックまで起動してしまうわけです。現時点では、互換性を保つ実装としてこれぐらいしか思いついてないので、どちらかというとVRCSDKへの機能要望ですね。

IEditorOnly実装前みたいにVRCSDKの該当フックをリフレクション、もしくはHarmonyで介入する手もあるけど、できれば避けたいところです。

Narazaka commented 6 months ago

オッ MAにあるReplacementRemoveIEditorOnlyではなくVRCSDK内の処理が呼ばれていると言うことですかね?

bdunderscore commented 6 months ago

あーReplacementRemoveIEditorOnlyですね。ただ、あれはどちらかというと不要になったハックなので、廃止すべきかなと考えています…

nHaruka-git commented 6 months ago

IEditorOnlyは無理かもしれませんが、EditorOnlyタグであればVRCSDKのフックが呼ばれる前にタグを書き換える、ということも可能だと思いますが、実装は難しいですか?

bdunderscore commented 6 months ago

ちょっと検討中です。Harmonyで潰すのが一番簡単かも…