Mode」という機能を使うことで、Unity上でゲームを起動する時間が早くなる機能(素早い再生モード)が追加されました。詳細はこちらのUnity公式ブログをご覧ください技術的な詳細はこちらの公式フォーラムをご覧ください起動時間が1/10近くなるなど効果は大きいのですが、既存のプログラムの書き方が通用しなくなる「破壊的な変更」のため、自作のプログラムやAssetStoreのアセットも全てが対応していないと正常に動作しないです。無効化に対応させたいと考えています」と書かれてるのですが、今のところはアセット開発者に丸投げっぽいです。アセット開発者として対応はしてみたのですが、それがけっこうややこしかったので、知る限りの対応方法をまとめておこうと思います。Scene」のオプションが利用可能になります。Scene」という重い処理を行っているため、それを簡略化して処理することで起動時間を早くしようというアプローチなようです。Scene」両方が簡略化処理になるようです。Domain」は「スクリプトの状態のリセット」を行っているものらしいです。オフにすると、staticなフィールドやイベントのリセットされなくなるため、前回起動時の値やイベントが登録されたままになってしまいます。対応方法はすでに公式ドキュメントに載っています。https://docs.unity3d.com/ja/2019.3/Manual/DomainReloading.htmlstaticフィールドを初期化staticなフィールドの初期化を手動で行う必要があります。[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]を使うことで、指定のメソッドをプレイモード起動時に呼ぶことができるのでこれを使います。}}staticなイベントを初期化staticなイベントも初期化する必要があります。イベントには+=でメソッドを登録するため、前回起動時のものが削除されていないと重複して登録されて、同じメソッドが複数回呼ばれることになってしまうからです。対応するには、以下のように登録(+=)の前にメソッドを削除(-=)するという形になるため、パッと見とても気持ち悪いコードになります。「前回起動時に登録されたかもしれないメソッドを削除する」ということではあるのですが、初回起動では未登録なのに削除することになるので大丈夫なのか不安になります。(特に問題なく動きはするのですが)また、ラムダ式では削除(-=)ができないので、メソッドに書き直す必要があります。Domain」の場合と違って具体的な対応方法がまだドキュメントにありません。https://docs.unity3d.com/ja/2019.3/Manual/SceneReloading.html現在(2019/1/20)のところ、Unityフォーラムにしか情報がないようです。実験機能ということもあり、今後対応方法が変わっていくとは思うのですが、これだけだとちょっとわかりづらいので個人的に対応したときの情報をまとめておきます。通常はあまり気にすることではないのですが、UnityEngine.Objectを継承しているクラス・・・つまりMonobehaviour(コンポーネント)やScriptableObjectやTextureなどのアセットへの参照の初期値は、C#本来のNULLが保証されなくなるようです。Unityのオブジェクトは「==演算子をoverrideしているためNULLじゃなくても==NULLが成り立つ」という裏仕様があります。そのため、ヌル合体演算子などを使ってヌルチェックをしていた場合は、意図しない動作になることがありました。Sceneをオフにした場合は、プレイモードの起動時にもこれが起きるようになるらしいです。そのため「初期値はNULLのはずなのでヌル合体演算子を使う」といったコードがあった場合は全て、==演算子(または三項演算子)を使うように書き直す必要があります。これはpublicであったり[SerializeField]をつけている場合だけに限らず、privateなフィールドでも同様となります。cachedRectTransform;}Listや配列にNULLを使おうとする場合Listや配列は参照なのでデフォルト値はNULLです。Sceneをオフにした場合は、privateに明示的に=nullとしてあった場合でも、サイズ0のインスタンスが作成されていて、NULLになりません。明示的にNULLを使いたい場合は、privateではなく「NonSerialized」とする必要があるようです。null;ExecuteInEditMode/ExecuteAlwaysを使ったコンポーネントどうも、Awakeが呼ばれなくなってしまうようです。この辺フォーラムでも混乱があるようなので、対応方法が今一つはっきりしないです。ExecuteInEditModeは、エディタ中でもコンポーネントのUpdateなどを呼ばれるようにするための機能です。他のオブジェクトの変更やScreenSizeなどの環境の変更に合わせて表示を更新したいコンポーネントなどで使うことがあるかと思います。Awakeが呼ばれなくなってしまうと、自作コードならまだしも、Awakeを使用したコンポーネントを継承している場合は、解決策がなくなってしまいます。この点はフォーラムでも指摘されているようで、なんらかの形で今後変更があるかもしれません。Scene」に関しては、これまでにまとめたように影響の甚大な破壊的な変更が多いです。対応方法がまだはっきりしないのと、今後さらに変更もありそうなので、なかなかに対応が辛いです。Domain」のほうを優先して対応するのが良いかと思います。staticな部分のコードのみをまずは対応する。個人的にはこの形で様子見するのがよいかなと思います。Domain」だけをオフにしても「素早い再生モード」の効果は十分に得られるようです。