Page 1 of 1

SendMessageArgumentで保持しているFlxible*の変数を使用しているものだけ確保して欲しい

Posted: 2019/06/17 14:16
by kag
お世話になっております。

Unity2018.4.1
Arbor 3.5.5

SendMessageArgumentのメンバー変数に全タイプのFlexible*系の変数を保持していますが、
これを指定している(実際に使っている)タイプのみ確保するようにできないでしょうか?
結構SendMessageGameObjectを多用していまして、できればメモリ消費が最小になってくれると助かります。

よろしくお願いいたします。

Re: SendMessageArgumentで保持しているFlxible*の変数を使用しているものだけ確保して欲しい

Posted: 2019/06/17 23:13
by caitsithware
ご要望ありがとうございます。
kag wrote: 2019/06/17 14:16 これを指定している(実際に使っている)タイプのみ確保するようにできないでしょうか?
結構SendMessageGameObjectを多用していまして、できればメモリ消費が最小になってくれると助かります。
この件については、Unityの仕様上簡単には実現できません。
理由としては、たとえフィールドの初期値にnullを指定したとしても、Unityのシリアライザが動作したタイミングで自動的にインスタンス化されてしまうからです。
また、フィールドをListなどにすれば容量を最小限に抑えることも可能と言えば可能ですが、配列として使用する予定の無いものをListにするというのも現実的ではないので対応する予定はございません。
ご了承ください。

SendMessageGameObjectとは動作が若干異なりますが、InvokeMethodでは必要なフィールドのみ確保するような構造になっていますので、問題なさそうであればこちらの使用も検討してみてください。
InvokeMethod ― Arbor リファレンス

また、最適化の観点からですと、組み込みスクリプトは汎用性のためにある程度最適化を犠牲にせざるを得ない状況です。
どのようなゲームを作ろうとしているのか、実際にそこは負荷がかかってしまっているのか、などなど状況によってもどういった最適化が必要かは異なっています。
そのため、最終的な最適化に関してそのまま組み込みスクリプトを使用するかスクリプトを自作するかなどについて、最終判断はユーザー様にお任せになってしまう点もご理解下さると助かります。

追記:
Listにすれば可能と説明しましたが、後方互換性のために旧データを新データに流し込む過程で結局旧データを保持し続ける必要があるので、どちらにしても理想的な最適化は実現できそうにないです。
どうしてもSendMessageGameObjectを最適化しなければならない状況でしたら、まずSendMessageGameObjectを多用している状況から改善できないか検討してみてはいかがでしょうか。

Re: SendMessageArgumentで保持しているFlxible*の変数を使用しているものだけ確保して欲しい

Posted: 2019/06/19 10:27
by kag
回答ありがとうございます。

使用する引数タイプごとにSendMessageステートを作って対応することにします。
InvokeMethodは表示面積が大きいのでちょっと使いにくいかなと思っています。
(AwakeやEndなど設定しないところは畳めれば良いのですが)

ありがとうございました。

Re: SendMessageArgumentで保持しているFlxible*の変数を使用しているものだけ確保して欲しい

Posted: 2019/06/19 10:48
by caitsithware
InvokeMethodを使わない理由が表示面積なのですね。
設定しないところを折りたたむようにできないか検討いたします。