Unityで開発するゲームやアプリケーションの画面サイズと解像度を適切に設定することは、ユーザー体験を向上させる上で非常に重要です。プロジェクト設定から基本的な画面サイズを変更する方法を詳しく見ていきましょう。
ここで、以下の重要な設定を行うことができます:
• Default Screen Width/Height: デフォルトの画面幅と高さを設定します。
• Fullscreen Mode: フルスクリーン、ウィンドウモード、または排他的フルスクリーンを選択できます。
• Resizable Window: ウィンドウサイズの変更を許可するかどうかを設定します。
• Allow Fullscreen Switch: フルスクリーンモードへの切り替えを許可するかどうかを設定します。
これらの設定を適切に行うことで、ゲームの起動時の画面サイズと動作モードを制御することができます。
Unityの公式ドキュメントでPlayer Settingsの詳細な説明を確認できます。
意外な情報として、Unityでは「Standalone Player Options」セクションで「Display Resolution Dialog」を設定することで、ゲーム起動時にプレイヤーが解像度を選択できるダイアログを表示することができます。これにより、エンドユーザーが自分の環境に最適な解像度を選択できるようになります。
フルスクリーンモードと解像度の設定は、ゲームのパフォーマンスと見た目に大きな影響を与えます。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のキャンバススケーラー(Canvas Scaler)は、異なる画面サイズやアスペクト比に対してUIを適切にスケーリングするための強力なツールです。これを効果的に使用することで、多様なデバイスに対応したレスポンシブなUIを実現できます。
キャンバススケーラーの主要な設定オプションは以下の通りです:
以下は、キャンバススケーラーを適切に設定するための手順です:
Unityの公式ドキュメントでCanvas Scalerの詳細な使用方法を確認できます。
意外な情報として、Canvas ScalerのReference Pixels Per Unit設定を調整することで、UIとゲーム世界のスケールを一致させることができます。これは、2Dゲームで特に有用で、UIとゲームオブジェクトのサイズの一貫性を保つのに役立ちます。
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で開発するゲームやアプリケーションを複数のデバイスに対応させるには、アスペクト比の適切な設定が不可欠です。異なる画面サイズやアスペクト比を持つデバイスで一貫した見た目を維持するためのコツをいくつか紹介します。
using UnityEngine.SafeArea
void AdjustToSafeArea()
{
var safeArea = Screen.safeArea
var rectTransform = GetComponent
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
}
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
}
}
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ゲーム開発入門
↑
実は、こちらの本はamazonのkindleアンリミテッドでタダで読めます。
でもそれ以外の分厚いUnity本は、アンリミテッドの対象外。良いのはわかるけど、高い!
そこで、2,550円引きでほしいUnity本をゲットする方法です。
この方法だと、完全に0円でゲットできます。
定価2,520円の本に2,550円割引が効く=0円です。
やり方
↓
DMMブックスのクーポンと特典を併用します。
実は、DMMブックスは利用者を増やすために初回90%オフ(最大2,000円引き)のクーポンを配ってます。初回利用なら、誰でも使えます。
さらに、DMMプレミアムという動画サブスクを無料お試しすると、こちらも特典として550ポイント(550円相当)もらえるんですね。
クーポンと特典合わせて2,550円引きでUnity本が買えるというわけ。
詳しくはこちらの記事にまとめました。