2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity × Visual Studio:超スピード開発の環境高速化メモ

Posted at

目的:Playボタン押下〜実行までの待ち時間と、再コンパイル時間を最短にする
対象:Unity(C#)+ Visual Studio(フル IDE)。VS Code は対象外


🔰 TL;DR(最初の10分でやること)

  1. Enter Play Mode Options をON

    • Edit > Project Settings > Editor

    • Enter Play Mode Options: ON

    • Reload Domain: OFF(まずOFFに挑戦)

    • ◻️ Reload Scene: ON(最初はONのまま。慣れたらOFFも検討)

  2. asmdef を 3〜5個に分割(再コンパイル範囲を最小化)

    • 例:Game.Runtime / Game.Editor / ThirdParty
  3. Editor用コードは Editor/ に隔離(可能なら Editor 用 asmdef も)

  4. VSの重い機能は必要時のみON(CodeLens / アナライザ / 不要拡張)


1) Enter Play Mode Options(Play開始の“再起動”をサボる)

何が速くなる?

  • Play開始時の C#ドメイン再読み込みシーン再読み込みを省略
    → 待ち時間が体感で激減。プロトタイピングが爆速化

設定場所

Edit > Project Settings > Editor

  • Enter Play Mode OptionsON

  • Reload DomainOFF(推奨)

  • Reload SceneON(まずはON、慣れたらOFFも挑戦)

ハマりどころ(& 即解決の型)

問題1:静的変数がリセットされない
起動時に明示リセットする

// 静的データのリセット(Domain Reload OFFでも確実に初期化) public static class GameStatics { public static int Score; [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] static void ResetStatics() { Score = 0; } }

問題2:イベント多重購読
OnEnable/OnDisable で購読・解除を徹底

void OnEnable() => EventBus.OnHit += HandleHit; void OnDisable() => EventBus.OnHit -= HandleHit;

問題3:初期化順が崩れる
Awake/OnEnable に初期化を寄せる(Start任せにしない)

Rigidbody rb; void Awake() { rb = GetComponent<Rigidbody>(); // ここで明示初期化 }

ワンタッチ切替(便利メニュー)

// Assets/Editor/PlayModeSpeedMenu.cs #if UNITY_EDITOR using UnityEditor; using UnityEngine; public static class PlayModeSpeedMenu { [MenuItem("Tools/Speed/EnterPlay: NoDomain + NoScene")] public static void NoDomainNoScene() { EditorSettings.enterPlayModeOptionsEnabled = true; EditorSettings.enterPlayModeOptions = EnterPlayModeOptions.DisableDomainReload | EnterPlayModeOptions.DisableSceneReload; Debug.Log("Enter Play Mode: NoDomain + NoScene"); } [MenuItem("Tools/Speed/EnterPlay: Default (Reload All)")] public static void DefaultReload() { EditorSettings.enterPlayModeOptionsEnabled = false; // 既定動作に戻す Debug.Log("Enter Play Mode: Default"); } } #endif

運用Tips

  • 新規導入時は Domain OFF / Scene ON で安定確認 → 問題なければ Scene OFF に挑戦

  • アセットやプラグインと相性が出たら、一時的に「Default」に戻す


2) Assembly Definition(asmdef)で再コンパイルを“局所化”

目的

  • スクリプト変更時に 必要なアセンブリだけ ビルドさせる
    増やすほど速いわけではない。最小構成からスタート

最小構成(例)

  • Game.Runtime.asmdef(実行時)

  • Game.Editor.asmdef(Editor専用。Platforms: Editor のみ

  • ThirdParty.asmdef(外部/共通)

依存の向き(例)
Game.Runtime → ThirdParty
Game.Editor → Game.Runtime(Editor から Runtime を参照)

作り方メモ

  1. 対象フォルダを右クリック → Create > Assembly Definition

  2. 名前を付ける(上記例)

  3. Editor 用は PlatformsEditor のみにチェック

  4. 参照が必要な asmdef を Assembly Definition References に追加

落とし穴

  • 循環依存(A→B→A)はNG

  • Editor コードを Runtime に混ぜない(ビルドにも悪影響)

  • 最初は 3〜5個、増やしすぎない


3) Editor/ フォルダに隔離(ビルド対象から外す)

何を入れる?

  • EditorWindowCustomEditor、ビルドに不要なツール系コード

効果

  • ランタイムと分離 → ビルド軽量化依存の混線防止

  • asmdef運用に慣れたら、Editor専用 asmdef にまとめるとさらに管理が楽


4) Visual Studio 側の軽量化(感じた時だけ手当て)

  • CodeLens を OFF(重いと感じたら)
    Tools > Options > Text Editor > All Languages > CodeLens: Off

  • アナライザの負荷を抑える(保存時のみ / CIで厳密チェックなど役割分担)

  • 不要拡張の停止(ミニマル構成から必要なものだけ戻す)

  • 大規模ソリューションは Solution Filter(.slnf) で読み込み対象を絞るのも有効


5) 最初の導入レシピ(コピペOKの流れ)

  1. Enter Play Mode

    • ON / Domain OFF / Scene ON(慣れたら Scene も OFF)
  2. 静的初期化SubsystemRegistration)と OnEnable/OnDisable を導入

  3. asmdefRuntime / Editor / ThirdParty で分割(依存は一方向)

  4. EditorコードEditor/ へ移動(可能なら Editor asmdef)

  5. VS の重機能は必要時だけ ON


6) フォルダ例(最小)

Assets/ Game/ Runtime/ Game.Runtime.asmdef Scripts/ ... Editor/ Game.Editor.asmdef PlayModeSpeedMenu.cs ThirdParty/ ThirdParty.asmdef


7) トラブルシュート早見表

症状 よくある原因 速攻対処
Play後、前回の値が残る Domain Reload OFFで静的が残留 SubsystemRegistration で静的初期化
イベントが2重3重に発火 OnEnable/OnDisable未実装 購読/解除を対で実装
最初の1回だけ動かない Start依存の初期化 Awake/OnEnable に寄せる
変更後の再コンパイルが遅い asmdef 未分割/Editor混在 asmdef分割、Editor隔離
VSが重い/カクつく CodeLens/アナライザ/拡張 一旦OFF、必要だけ戻す

✅ チェックリスト(貼って使う用)

  • Enter Play Mode:ON

    • Reload Domain: OFF

    • Reload Scene: ON(慣れたらOFF)

  • 静的は SubsystemRegistration でリセット

  • イベントは OnEnable/OnDisable で購読・解除

  • asmdefRuntime / Editor / ThirdParty を作成

  • Editor/ にツール系を隔離(可能なら Editor asmdef)

  • VS の重機能は必要時だけ ON(CodeLens / アナライザ / 拡張)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?