anatawa12 / AvatarOptimizer

AAO: Avatar Optimizer: Non Destructive Avatar Optimization Utilities
MIT License
161 stars 23 forks source link

`com.anatawa12.avatar-optimizer.runtime`のAuto ReferencedがONであってほしい #825

Closed Narazaka closed 8 months ago

Narazaka commented 8 months ago

com.anatawa12.avatar-optimizer.runtimeがAuto Referenced=OFFであるためにいちいちasmdefを作らなければならず面倒な場合があります。

Avatar Optimizerのコンポーネントを付ける等を含む共通化して公開するまでもない独自の定型作業を書きたいとき(Quest対応など)に、必ずasmdefを作らねばならず、なおかつasmdefの下で逆に参照できない物もあるのでスクリプトが2つに分かれたりして冗長です。 Auto ReferencedがONだとAssetsの中にC#スクリプト1枚ぽん置きで出来てラクです。

参考までにModular AvatarはRuntimeのみAuto Referenced=ONなのでこの要件で使いやすいです。

Narazaka commented 8 months ago

具体的には特定パスにAAO Merge PBをつけ、別のパスにNDMF Mantisをつけ、みたいな作業をスクリプトで書くときに障害となります

anatawa12 commented 8 months ago

これは意図的にoffです。RuntimeモジュールにはAPIはまだ存在しないためコンポーネントの追加もAssembly Definitionを追加sしてもできません。(少なくとも想定されておらず、クラス名等が変わる可能性があります。将来的にAPIを用意する予定はあります)

また、AvatarOptimizer更新・開発中のUnityの復帰速度が遅くなってしまい、また意図せずAvatarOptimizerに依存したプログラムを作ってほしくないため、AutoReferencedをオンにする予定はありません。

Narazaka commented 8 months ago

自動化的なものは別の手段でやるべきであると言う感じでしょうか。 APIというのはAddComponent<Component>()は標準的な物だと思いますがそれと別に何か用意する感じでしょうか?

anatawa12 commented 8 months ago

現状AAOの設定の自動化の正しい方法は存在しないです。reflectionを使用する以外に存在しません。

APIというのはAddComponent<Component>()は標準的な物だと思いますがそれと別に何か用意する感じでしょうか?

AddComponent後の設定がAPIになっていません。またそもそも<Component>の部分がinternalになっているため、AddComponentを呼び出せないと思います。リフレクションで.AddComponent(Type.GetType("Anatawa12.AvatarOptimizer.MergePhysBone,com.anatawa12.avatar-optimizer.runtime"))とすることはおそらくできますが、Semantic Versioningの保証外です

READMEから引用します

This project doesn't have any public stable APIs for now. The Semantic Versioning will be applied to save format of the components, but not for scripting usage for now. (略) Even if any parts of this project is exposed as public in C# code, it can be changed / removed in future release.

Narazaka commented 8 months ago

現状internalなのは把握していますが、

将来的にAPIを用意する予定はあります

というのがAddComponentとは別の何かなのかと思った次第です。 あくまで現状何も無いし予定は未定であるという話と理解しました。