TeamAojilu / UnityTeamDevTemplate

Unityを使ったチーム開発でのテンプレートリポジトリ
https://teamaojilu.github.io/UnityTeamDevTemplate/
MIT License
7 stars 0 forks source link

変数の初期化について #20

Open Ruchi12377 opened 3 years ago

Ruchi12377 commented 3 years ago

SilCilSystemについてです。 SilCilSystemのVariableHoge実装がScriptableObjectになっているのが最大の特徴だと思います。 ですが、ScriptableObject上で保存されてる値はランタイム中に変更したとしても、Monobehaviourでシリアライズしたフィールドの値のようにはもとに戻りません。 スコアなどの最初はかならず0になったりするものなどには問題ありませんが、毎回インスペクタで設定した値にしたいということができないです(やろうと思えばできる)。 そこで、VaruableHogeの値が再生中に変更した場合にもとに戻す機能を追加することは可能でしょうか? (できれば値を保持するかどうかのフラグなども用意してほしいです)

SilCil commented 3 years ago

コメントありがとうございます!

ランタイム中で値変更を許容するオプションは確かに便利ですね。 機能自体は実現可能だと思います。

単純に思いつくのはエディタ専用の変数を余分に1つ持っておいて、 差し替えるかどうかをフラグで判定する方法ですね。 あとはエディタ拡張でインスペクタの表示をどうにかすれば実現できそうです。

泥臭くやるならこれでできますが、後々の保守を考えると個別でエディタ拡張書くのは大変だなとは思います。 なので、ちょっと別の方法がないか考えてみます。

検討/検証していけそうならアップデートします。

SilCil commented 3 years ago

@Ruchi12377

エディタ専用の変数を持たせて、実現してみました。 要望通りの挙動になっているか確認いただければ幸いです。

インスペクタ上のRestore Valuetrueに設定すれば、エディタ上でのプレイモード終了時に値が元に戻ります。

ver2.0.1a

Ruchi12377 commented 3 years ago

対応ありがとうございます! 先程確認してみたのですが、おっしゃるとおりエディタでは希望通りの挙動をするのですが、ランタイム中に同じようなことができるようになりませんでしょうか?

宜しくおねがいします。

SilCil commented 3 years ago

@Ruchi12377

対応遅れて申し訳ございません。

ランタイム中の値のリセットをエディタと同様にやるのは厳しいというのが私の中での結論です。 ScriptableObjectの仕様上、MonoBehaviourと同様の挙動を持たせるのは難しいです。

ただ、値をリセットしたいタイミングというのはシーンの切り替え時だったり、 特定のゲームオブジェクトが破棄されたりといったタイミングだと思いましたので、 代替案として以下の機能を実装してみました。

プレリリース版として以下のリンクからダウンロードできますので、 ご確認いただけますと幸いです。

ver2.0.1a2

お目当てのものとは異なるものかもしれません。 ご期待に沿えず申し訳ございません。

対応が遅れたことも合わせて、再度お詫び申し上げます。