# 専用サーバーの最適化

> Provides information about optimizing the build with default and manual optimizations to reduce resource utilization.

Dedicated Server (専用サーバー) ビルドターゲットはネットワークアプリケーションの最適化を実行します。このビルドターゲットは、一部の最適化をデフォルトで自動的に適用しますが、その他の最適化は、ゲームの実装によって影響が異なるため、任意となっています。

## 自動最適化##automatic-optimizations

デフォルトでは、Dedicated Server ビルドターゲットは以下の最適化を実行します。

* [オーディオサブシステムの無効化](#AudioSubsystem)
* [ライティングスレッドの削除](#LightingThreads)
* [一部のプレイヤーループのコールバックの削除](#PlayerLoopCallbacks)
* [GPU 専用アセットの削除](#GpuOnlyAssets)

### オーディオサブシステム##audio-subsystem

Dedicated Server ビルドターゲットは、専用サーバーとして実行するビルドにオーディオサポートを必要としないため、[オーディオ](/engine/6000.0/manual/audio/overview.md)[サブシステム](/engine/6000.0/script-reference/unity-engine/subsystem.md)を無効にします。オーディオサブシステムを無効にすると、CPU 負荷が軽減されます。

### ライティングスレッド##lighting-threads

Dedicated Server ビルドターゲットは、ライティングに関連する処理スレッドを削除します。これは、サーバービルドではライティングをレンダリングする必要がないためです。

### プレイヤーループのコールバック##player-loop-callbacks

Dedicated Server ビルドターゲットは、以下の [PlayerLoop コールバック](/engine/6000.0/script-reference/unity-engine-low-level/player-loop.md)を (サーバービルドには必要ないため) 無効にします。

* [`SendMouseEvents`](/engine/6000.0/script-reference/unity-engine-player-loop/pre-update/send-mouse-events.md) のプレイヤー更新ループの登録
* [`UpdateAllRenderers`](/engine/6000.0/script-reference/unity-engine-player-loop/post-late-update/update-all-renderers.md) のプレイヤー更新ループの登録
* [`PlayerUpdateCanvases`](/engine/6000.0/script-reference/unity-engine-player-loop/post-late-update/player-update-canvases.md) のプレイヤー更新ループの登録
* [`UpdateAudio`](/engine/6000.0/script-reference/unity-engine-player-loop/post-late-update/update-audio.md) などのすべてのオーディオコールバックのプレイヤー更新ループの登録
* [`UIElementsUpdatePanels`](/engine/6000.0/script-reference/unity-engine-player-loop/pre-late-update/ui-elements-update-panels.md) などのすべての UI コールバックのプレイヤー更新ループの登録
* [`UpdateInputManager`](/engine/6000.0/script-reference/unity-engine-player-loop/early-update/update-input-manager.md) などのすべての入力コールバックのプレイヤー更新ループの登録

### GPU 専用アセット##gpu-only-assets

Dedicated Server ビルドターゲットは、サーバーが必要としない GPU 専用アセット (テクスチャのテクスチャピクセルデータやメッシュ頂点データなど) を削除します。このビルドターゲットは、CPU の読み取り/書き込みアクセス権を付与されているアセットと[リソースフォルダー](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/scripting-assets/loading-resourcesat-runtime.md)内のアセットを保持します。

CPU の読み取り/書き込みアクセスを無効にしてインポートされたテクスチャとメッシュには、GPU のみがアクセス可能であり、CPU はこれらにアクセスできません。Dedicated Server ビルドターゲットはグラフィックスデバイスを初期化しないため、このデータを配置する必要がありません。このデータを除外することで、実行ファイルのメモリ使用量が削減されます。

Dedicated Server ビルドターゲットがどのアセットを削除し、どのアセットを保持するかについては、以下のリストを参照してください。

**削除済み**:

* CPU の読み取り/書き込みアクセスが無効になっているテクスチャ
* CPU の読み取り/書き込みアクセスが無効になっている、メッシュの頂点データ

**保持**:

* CPU の読み取り/書き込みアクセスが有効になっているテクスチャ
* CPU の読み取り/書き込みアクセスが有効になっている、メッシュの頂点データ
* 保護された[リソースフォルダー](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/scripting-assets/loading-resourcesat-runtime.md)内のアセット。
* テクスチャの[メタデータ](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-metadata.md) (テクスチャサイズ値など)。
* CPU の読み取り/書き込みが無効になっている場合にも、CPU 上で実行される内部システム ([物理演算](/engine/6000.0/manual/physics-section.md)など) が必要とする、メッシュデータ。

**ノート**: CPU の読み取り/書き込みアクセスの詳細については、[Texture.isReadable](/engine/6000.0/script-reference/unity-engine/texture/is-readable.md) および [Mesh.isReadable](/engine/6000.0/script-reference/unity-engine/mesh/is-readable.md) を参照してください。

## その他の最適化##additional-optimizations

Player Settings ウィンドウの[Enable Dedicated Server Optimizations](/engine/6000.0/manual/platform-specific/dedicated-server/get-started/player-settings.md#Optimization) プロパティを使用して、その他の最適化を適用するためのオプションも用意されています。これらの最適化により、**シェーダー**や**フォント**などのアセットが削除されます。ただし、これらの最適化を適用すると、削除されたアセットがゲームの実装で参照されている場合に問題が発生する可能性があります。

**削除済みアセット**:

* シェーダー
* Fonts

Dedicated Server ビルドターゲットによって適用される自動最適化に加えて、以下の実装ごとの最適化を手動で適用することができます。

* [条件付きコンパイル](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation/platform-dependent-compilation.md)を使用して、ビルドターゲットに応じてコードを選択的に配置または除外できます。
* クラスの実装によって、プレイヤー固有のコードとサーバー固有のコードを分離できます。
* サーバービルドの PlayerLoop から、さらに要素を削除できます。[PlayerLoop](/engine/6000.0/script-reference/unity-engine-low-level/player-loop.md) および [PlayerLoopSystem](/engine/6000.0/script-reference/unity-engine-low-level/player-loop-system.md) を参照してください。

## 追加リソース##known-limitations

* [Unity における最適化](/engine/6000.0/manual/analysis/understanding-performance.md)
* [Unity UI の最適化に関するヒント](https://unity.com/how-to/unity-ui-optimization-tips)
* [Unity でのパフォーマンス最適化に関するベストプラクティス](https://unity.com/how-to/advanced-programming-and-code-architecture)
