# Hot reloading ## on Unity Editor [@tyfkda](https://tyfkda.github.io) Mar 09, 2017 [まべ☆てっく vol.3](https://marv-tech.connpass.com/event/49980/)
## PR * 月1で[Unityもくもく会](https://atnd.org/groups/wnpkpg)やってます @武蔵境 * [横浜](https://atnd.org/groups/yokohamaunity)もあります
## ホットリロード * エディタ上で実行中にコードを書き換えて反映
## エラーが出る… * `NullReferenceException` * シリアライズ/デシリアライズが原因
## シリアライズ * [Unity - マニュアル: スクリプトシリアライゼーション](https://docs.unity3d.com/jp/current/Manual/script-Serialization.html) > スクリプトのフィールドがシリアライズされていることを確認する方法 > 以下を確認します。 > * public か [SerializeField] 属性を持つ > * static ではないこと > * const ではないこと > * readonly ではないこと > * シリアライズができる フィールドタイプ であること (以下を参照)
## シングルトン * `static`変数は失われる * `SingletonMonoBehaviour<T>` * [FindObjectOfType](https://docs.unity3d.com/jp/current/ScriptReference/Object.FindObjectOfType.html)(typeof(T))
## Dictionary * 配列、`List`はシリアライズされる * ジェネリックも型を決定してサブクラス化すればシリアライズされる * Dictionary等はされない * [ISerializationCallbackReceiver](https://docs.unity3d.com/jp/current/ScriptReference/ISerializationCallbackReceiver.html) * `OnBeforeSerialize`, `OnAfterDeserialize`を実装してやる * [[Solved]How to serialize Dictionary with Unity Serialization System - Unity Answers](http://answers.unity3d.com/answers/809221/view.html) * キーと値をリスト化して退避・復帰
## MonoBehaviour * `OnDisable` * シリアライズ・デシリアライズ * `OnEnable`
## 復元できないもの * Action、ラムダ * コルーチン
## 結論 * 制限が強いので、どんな場面でも可能にするのは難しい * ホットリロードした上でシーン再読込できるようにしておくと、エディタの停止+再起動の時間が削減できてよいかも