Unity 画面サイズの設定と解像度変更方法

Unityの画面サイズと解像度設定

Unityの画面サイズと解像度設定の重要ポイント
🖥️
プロジェクト設定での基本調整

Project Settingsで画面サイズと解像度を初期設定

🔧
キャンバススケーラーの活用

UIの自動調整で多様な画面サイズに対応

📱
マルチデバイス対応のテクニック

アスペクト比設定とスクリプトによる動的調整

 

Unityのプロジェクト設定で画面サイズを変更する方法

Unityで開発するゲームやアプリケーションの画面サイズと解像度を適切に設定することは、ユーザー体験を向上させる上で非常に重要です。プロジェクト設定から基本的な画面サイズを変更する方法を詳しく見ていきましょう。

  1. Unityエディタを開き、対象のプロジェクトを選択します。
  2. メニューバーから「Edit」→「Project Settings」を選択します。
  3. 左側のメニューから「Player」を選択します。
  4. 「Resolution and Presentation」セクションを展開します。

 

ここで、以下の重要な設定を行うことができます:

 

• Default Screen Width/Height: デフォルトの画面幅と高さを設定します。
• Fullscreen Mode: フルスクリーン、ウィンドウモード、または排他的フルスクリーンを選択できます。
• Resizable Window: ウィンドウサイズの変更を許可するかどうかを設定します。
• Allow Fullscreen Switch: フルスクリーンモードへの切り替えを許可するかどうかを設定します。

 

これらの設定を適切に行うことで、ゲームの起動時の画面サイズと動作モードを制御することができます。

 

Unityの公式ドキュメントでPlayer Settingsの詳細な説明を確認できます。

 

意外な情報として、Unityでは「Standalone Player Options」セクションで「Display Resolution Dialog」を設定することで、ゲーム起動時にプレイヤーが解像度を選択できるダイアログを表示することができます。これにより、エンドユーザーが自分の環境に最適な解像度を選択できるようになります。

 

Unityでフルスクリーンモードと解像度を設定する手順

フルスクリーンモードと解像度の設定は、ゲームのパフォーマンスと見た目に大きな影響を与えます。Unityでは、スクリプトを使用してこれらの設定を動的に変更することができます。

 

以下は、C#スクリプトでフルスクリーンモードと解像度を設定する基本的な方法です:

using UnityEngine

 

public class ScreenSettings : MonoBehaviour
{
public void SetFullscreen(bool isFullscreen)
{
Screen.fullScreen = isFullscreen
}

 

public void SetResolution(int width, int height)
{
Screen.SetResolution(width, height, Screen.fullScreen)
}
}

 

このスクリプトを使用することで、ゲーム内でフルスクリーンモードの切り替えや解像度の変更を簡単に行うことができます。

 

さらに、複数の解像度オプションをプレイヤーに提供したい場合は、以下のようなコードを使用できます:

public void SetResolutionOption(int optionIndex)

{
Resolution[] resolutions = Screen.resolutions
if (optionIndex >= 0 && optionIndex < resolutions.Length)
{
Resolution selectedResolution = resolutions[optionIndex]
Screen.SetResolution(selectedResolution.width, selectedResolution.height, Screen.fullScreen)
}
}

 

このコードは、システムが対応している解像度のリストを取得し、選択されたインデックスに基づいて解像度を設定します。

 

UnityのScreen classに関する詳細な情報はこちらで確認できます。

 

興味深い点として、UnityではScreen.SetResolutionメソッドの第3引数にpreferredRefreshRateを指定することで、特定のリフレッシュレートを設定することも可能です。これは、高リフレッシュレートのディスプレイを持つデバイスでゲームを最適化する際に非常に有用です。

 

Unityのキャンバススケーラーを使って画面サイズに対応する方法

Unityのキャンバススケーラー(Canvas Scaler)は、異なる画面サイズやアスペクト比に対してUIを適切にスケーリングするための強力なツールです。これを効果的に使用することで、多様なデバイスに対応したレスポンシブなUIを実現できます。

 

キャンバススケーラーの主要な設定オプションは以下の通りです:

  1. UI Scale Mode
    • Constant Pixel Size: UIの要素を画面サイズに関係なく一定のピクセルサイズに保ちます。
    • Scale With Screen Size: 画面サイズに応じてUIをスケーリングします。
    • Constant Physical Size: 物理的なサイズを一定に保ちます(DPIに応じて調整)。
  2. Reference Resolution
    Scale With Screen Sizeモードを使用する際、UIのデザインの基準となる解像度を設定します。
  3. Screen Match Mode
    • Match Width Or Height: 幅または高さ(あるいはその中間)に合わせてスケーリングします。
    • Expand: キャンバスを拡大してReference Resolutionを完全にカバーします。
    • Shrink: キャンバスを縮小してReference Resolution内に収めます。

 

以下は、キャンバススケーラーを適切に設定するための手順です:

  1. Canvasオブジェクトを選択します。
  2. Inspector窓でCanvas Scalerコンポーネントを確認します。
  3. UI Scale Modeを「Scale With Screen Size」に設定します。
  4. Reference Resolutionに、デザインの基準となる解像度(例:1920x1080)を入力します。
  5. Screen Match Modeを選択し、必要に応じてMatch値を調整します。

 

Unityの公式ドキュメントでCanvas Scalerの詳細な使用方法を確認できます。

 

意外な情報として、Canvas ScalerのReference Pixels Per Unit設定を調整することで、UIとゲーム世界のスケールを一致させることができます。これは、2Dゲームで特に有用で、UIとゲームオブジェクトのサイズの一貫性を保つのに役立ちます。

 

Unityスクリプトで動的に画面サイズを取得・変更する技術

Unityでは、スクリプトを使用して動的に画面サイズを取得したり変更したりすることができます。これは、ゲームの実行中に画面サイズを調整したり、デバイスの情報に基づいて最適な設定を行ったりする際に非常に有用です。

 

画面サイズを取得する基本的な方法:

void Start()

{
Debug.Log("Screen Width: " + Screen.width)
Debug.Log("Screen Height: " + Screen.height)
Debug.Log("Current Resolution: " + Screen.currentResolution)
}

 

画面サイズを動的に変更する方法:

public void ChangeResolution(int width, int height, bool fullscreen)

{
Screen.SetResolution(width, height, fullscreen)
}

 

さらに、利用可能な解像度のリストを取得し、ユーザーに選択肢を提供することもできます:

void DisplayAvailableResolutions()

{
Resolution[] resolutions = Screen.resolutions
foreach (Resolution res in resolutions)
{
Debug.Log(res.width + "x" + res.height + " @ " + res.refreshRate + "Hz")
}
}

 

Unityの公式ドキュメントでScreen.resolutionsプロパティの詳細を確認できます。

 

興味深い点として、UnityではScreen.dpiを使用してデバイスのDPI(Dots Per Inch)を取得することができます。これを利用して、高解像度デバイスでのUI要素のサイズを適切に調整することが可能です。

void AdjustUIForDPI()

{
float dpi = Screen.dpi
if (dpi > 300)
{
// 高DPIデバイス向けの調整
}
else if (dpi > 200)
{
// 中DPIデバイス向けの調整
}
else
{
// 標準DPIデバイス向けの調整
}
}

 

このような動的な調整により、様々なデバイスで一貫したユーザー体験を提供することができます。

 

Unityで複数デバイスに対応するアスペクト比設定のコツ

Unityで開発するゲームやアプリケーションを複数のデバイスに対応させるには、アスペクト比の適切な設定が不可欠です。異なる画面サイズやアスペクト比を持つデバイスで一貫した見た目を維持するためのコツをいくつか紹介します。

  1. セーフエリアの活用
    デバイスのノッチやステータスバーを考慮したセーフエリアを設定することで、重要なUI要素が隠れることを防ぎます。
using UnityEngine.SafeArea

 

void AdjustToSafeArea()
{
var safeArea = Screen.safeArea
var rectTransform = GetComponent<RectTransform>()

 

var anchorMin = safeArea.position
var anchorMax = anchorMin + safeArea.size

 

anchorMin.x /= Screen.width
anchorMin.y /= Screen.height
anchorMax.x /= Screen.width
anchorMax.y /= Screen.height

 

rectTransform.anchorMin = anchorMin
rectTransform.anchorMax = anchorMax
}

  1. アスペクト比に応じたカメラ設定
    カメラのViewport Rectを調整することで、異なるアスペクト比でも一貫した表示領域を維持できます。
void AdjustCameraForAspectRatio()

{
float targetAspect = 16f / 9f // 目標のアスペクト比
float currentAspect = (float)Screen.width / Screen.height
float scaleHeight = currentAspect / targetAspect

 

Camera camera = Camera.main

 

if (scaleHeight < 1f)
{
Rect rect = camera.rect
rect.width = 1f
rect.height = scaleHeight
rect.x = 0
rect.y = (1f - scaleHeight) / 2f
camera.rect = rect
}
else
{
float scaleWidth = 1f / scaleHeight
Rect rect = camera.rect
rect.width = scaleWidth
rect.height = 1f
rect.x = (1f - scaleWidth) / 2f
rect.y = 0
camera.rect = rect
}
}

  1. レターボックス/ピラーボックスの実装
    画面の余白部分にレターボックスやピラーボックスを表示することで、一貫したアスペクト比を維持しつつ、画面全体を活用できます。
void CreateLetterboxing()

{
float targetAspect = 16f / 9f
float windowAspect = (float)Screen.width / Screen.height
float scaleHeight = windowAspect / targetAspect
Camera camera = Camera.main

 

if (scaleHeight < 1f)
{
Rect rect = camera.rect
rect.width = 1f
rect.height = scaleHeight
rect.x = 0
rect.y = (1f - scaleHeight) / 2f
camera.rect = rect
}
else
{
float scaleWidth = 1f / scaleHeight
Rect rect = camera.rect
rect.width = scaleWidth
rect.height = 1f

Unityで画面サイズや解像度を適切に設定することは、ゲーム開発において重要です。本記事では、Unityでの画面サイズ設定や解像度変更の方法を解説します。あなたのゲームに最適な画面設定とは何でしょうか?