Unityでスマートフォンのみで実行されるコードの指定方法


この資料では、Unityでアプリケーションを開発する際に、スマートフォン(AndroidやiOS)でのみ特定のコードを実行する方法を解説します。PCやコンソールでは無視されるが、スマートフォン向けの動作を制御したい場合に有効です。

使用するコンパイラディレクティブ

Unityにはプラットフォームに応じてコードを実行するためのコンパイラディレクティブが用意されています。これにより、特定のプラットフォームでのみ動作するコードを簡単に制御できます。

コード例

#if UNITY_ANDROID || UNITY_IOS
    // スマートフォンでのみ実行されるコード
    Debug.Log("スマホで実行されています");
#endif

説明

  • #if UNITY_ANDROID: Androidビルド時にこの条件が有効になります。
  • #if UNITY_IOS: iOSビルド時にこの条件が有効になります。
  • || は「または」を意味します。AndroidもしくはiOSの場合にコードが実行されます。
  • #endif: 条件ブロックの終了を示します。

このコードは、UnityエディタやPCビルド、コンソール(例えばPlayStationやXbox)では無視され、スマートフォン(AndroidおよびiOS)でのみ実行されます。

使用例

  1. スマートフォンでの特定の操作を有効化
    スマホではタッチ操作、PCではマウスやキーボード操作を分けるケースで、以下のように使用します。
void Update() {
    #if UNITY_ANDROID || UNITY_IOS
        if (Input.touchCount > 0) {
            // タッチ操作用の処理
        }
    #else
        if (Input.GetMouseButtonDown(0)) {
            // マウス操作用の処理
        }
    #endif
}
  1. スマホ限定のUI調整
    スマホ特有の画面レイアウトや解像度に応じた調整が必要な場合、以下のようにします。
void Start() {
    #if UNITY_ANDROID || UNITY_IOS
        // スマホ用UIのサイズ調整
        uiElement.sizeDelta = new Vector2(500, 200);
    #endif
}

注意点

  • プラットフォームごとのコード分岐は、なるべく最低限に抑え、コードの可読性を維持することが重要です。
  • スマホ以外のプラットフォーム向けに別の処理が必要な場合は、#else を使用してPCやコンソール用のコードを記述することもできます。

まとめ

Unityでスマホ向けのコードを管理するには、#if UNITY_ANDROID#if UNITY_IOS といったコンパイラディレクティブを活用することで、特定のプラットフォームでのみコードを実行することが可能です。これにより、異なるプラットフォームごとに適切な処理を柔軟に実装できます。


Unityで使用できる他のコンパイラディレクティブ

目的

Unityでは、さまざまなプラットフォームや条件に基づいて異なるコードを実行するために、複数のコンパイラディレクティブが提供されています。これにより、プラットフォームやビルドタイプごとに適切なコードを動作させることが可能です。

主要なコンパイラディレクティブ一覧

  1. プラットフォーム別
    • UNITY_STANDALONE: スタンドアロン(Windows、Mac、Linux)のいずれかで有効
    • UNITY_STANDALONE_WIN: Windowsビルドでのみ有効
    • UNITY_STANDALONE_OSX: macOSビルドでのみ有効
    • UNITY_STANDALONE_LINUX: Linuxビルドでのみ有効
    • UNITY_WEBGL: WebGLビルドで有効
    • UNITY_EDITOR: Unityエディタ内でのみ有効(エディタ内で特定の動作を確認したいときに便利)
    • UNITY_ANDROID: Androidビルドで有効
    • UNITY_IOS: iOSビルドで有効
    • UNITY_XBOXONE: Xbox Oneビルドで有効
    • UNITY_PS4: PlayStation 4ビルドで有効
    • UNITY_SWITCH: Nintendo Switchビルドで有効
  2. ビルドターゲット別
    • DEVELOPMENT_BUILD: デベロップメントビルドで有効(デバッグ情報を追加したビルド)
    • DEBUG: デバッグビルド時に有効(デバッグコードの追加に使用)
  3. レンダリングAPI別
    • ENABLE_VR: バーチャルリアリティが有効な場合
    • UNITY_5_3_OR_NEWER: Unityのバージョンが5.3以降で有効
    • UNITY_2020_1_OR_NEWER: Unityのバージョンが2020.1以降で有効

使用例

スタンドアロンビルド向けのコード

PC向けにスタンドアロンアプリをビルドする場合は、UNITY_STANDALONEを使用します。

#if UNITY_STANDALONE
    Debug.Log("スタンドアロンビルドで実行されています。");
#endif

WebGLビルド向けのコード

WebGL向けに特別な処理が必要な場合は、UNITY_WEBGLを使用します。

#if UNITY_WEBGL
    Debug.Log("WebGLビルドで実行されています。");
#endif

デベロップメントビルド向けのコード

デベロップメントビルドの場合に特定のデバッグ情報を表示する場合は、DEVELOPMENT_BUILDを使用します。

#if DEVELOPMENT_BUILD
    Debug.Log("デベロップメントビルドで実行されています。");
#endif

エディタ内のデバッグコード

Unityエディタ内でのみ実行されるコードは、UNITY_EDITORを使用します。

#if UNITY_EDITOR
    Debug.Log("Unityエディタ内で実行されています。");
#endif

コンパイラディレクティブの組み合わせ

コンパイラディレクティブは複数の条件を組み合わせて使用できます。

if UNITY_ANDROID && DEVELOPMENT_BUILD
    Debug.Log("Androidのデベロップメントビルドで実行されています。");
#elif UNITY_IOS
    Debug.Log("iOSビルドで実行されています。");
#else
    Debug.Log("その他のプラットフォームで実行されています。");
#endif

注意点

  • コンパイラディレクティブの使用はコードの複雑化を招く可能性があるため、適度に使用することを推奨します。
  • プラットフォームごとの違いが大きい場合は、別ファイルに分割して管理するのが効果的です。

これで、Unityでスマホや他のプラットフォームごとにコードを適切に制御するための基本が分かりました。必要に応じてこれらのディレクティブを活用し、効率的なマルチプラットフォーム開発を進めてください。

UI,Unity

Posted by hidepon