自動メモリ管理を理解する
ジェネリック関数

プラットフォーム依存コンパイル

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Unity には “プラットフォーム依存コンパイル” という機能があります。これにはいくつかのプリプロセッサ ディレクティブが含まれ,スクリプトを ‘パーティション化’ して,コードの一部セクションをサポートされているプラットフォーム独自に実行できるようになります。

さらに,コードをエディター内で実行することが出来るので,コードをモバイル/コンソール特有にコンパイルしたうえでエディターでテストすることが出来ます。

プラットフォーム マクロ定義

Unity がスクリプトでサポートしているプラットフォーム マクロ定義:

プロパティ: 特徴:
UNITY_EDITOR Unity がスクリプトでサポートしているプラットフォーム マクロ定義:
UNITY_EDITOR_WIN Windows上のエディターコードのために定義します。
UNITY_EDITOR_OSX Mac OS X上のエディターコードのために定義します。
UNITY_STANDALONE_OSX Mac OS (Univeral, PPC, およびIntel アーキテクチャ含む)特有でコードのコンパイル/実行のためのプラットフォーム マクロ定義。
UNITY_DASHBOARD_WIDGET Mac OS ダッシュボード ウィジェットのコードのコンパイル/実行のためのプラットフォーム マクロ定義。
UNITY_STANDALONE_WIN Windows スタンドアローン アプリケーションのコードをコンパイル/実行したいときに使用します。
UNITY_STANDALONE_LINUX Linux スタンドアローン アプリケーションのコードをコンパイル/実行したいときに使用します。
UNITY_STANDALONE あらゆる スタンドアローン アプリケーション(Mac, Windows, または Linux)のコードをコンパイル/実行したいときに使用します。
UNITY_WEBPLAYER Web Player コンテンツ(Windows および Mac Web Player実行ファイルを含みます)のプラットフォーム マクロ定義。
UNITY_WII Wii コンソールでコードのコンパイル/実行のためのプラットフォーム マクロ定義。
UNITY_IPHONE iPhone プラットフォームでコードのコンパイル/実行のためのプラットフォーム マクロ定義
UNITY_ANDROID Android プラットフォームのプラットフォーム マクロ定義。
UNITY_PS3 PlayStation 3 でコードのコンパイル/実行のためのプラットフォーム マクロ定義。
UNITY_XBOX360 XBox 360 でコードのコンパイル/実行のためのプラットフォーム マクロ定義。
UNITY_FLASH Adobe Flashでコードのコンパイル/実行のためのプラットフォーム マクロ定義。
UNITY_BLACKBERRY Blackberry10 デバイス のためのプラットフォーム マクロ定義。
UNITY_WP8 Windows Phone 8のプラットフォーム マクロ定義。
UNITY_METRO Platform define for Windows Store Apps (additionally NETFX_CORE is defined when compiling C# files against .NET Core).
UNITY_WINRT Equivalent to UNITY_WP8 |UNITY_METRO

さらに作業を行っている Unity エンジンのバージョンに基づいてコードを選択的にコンパイルできます。現在サポートされているのは:

UNITY_2_6 Unity 2.6 バージョンのプラットフォーム マクロ定義。
UNITY_2_6_1 Unity 2.6.1 バージョンのプラットフォーム マクロ定義。
UNITY_3_0 Unity 3.0 バージョンのプラットフォーム マクロ定義。
UNITY_3_0_0 Unity 3.0.0 バージョンのプラットフォーム マクロ定義。
UNITY_3_1 Unity 3.1 バージョンのプラットフォーム マクロ定義。
UNITY_3_2 Unity 3.2 バージョンのプラットフォーム マクロ定義。
UNITY_3_3 Unity 3.3 バージョンのプラットフォーム マクロ定義。
UNITY_3_4 Unity 3.4 バージョンのプラットフォーム マクロ定義。
UNITY_3_5 Unity 3.5 バージョンのプラットフォーム マクロ定義。
UNITY_4_0 Unity 4.0 バージョンのプラットフォーム マクロ定義。
UNITY_4_0_1 Unity 4.0.1 バージョンのプラットフォーム マクロ定義。
UNITY_4_1 Unity 4.1 バージョンのプラットフォーム マクロ定義。
UNITY_4_2 Unity 4.2 バージョンのプラットフォーム マクロ定義。
UNITY_4_3 Unity 4.3 バージョンのプラットフォーム マクロ定義。
UNITY_4_5 Unity 4.5 バージョンのプラットフォーム マクロ定義。

注意: 2.6.0 で初めて導入された機能であるため,それより前のバージョンではプラットフォーム マクロ定義はありません。

プリコンパイル コードのテスト

プリコンパイル コードをどうやって使用するか簡単なサンプルを示します。これは選択したビルド ターゲットのプラットフォームにもとづいてメッセージを単に出力します。

まず初めに,コードをテストしたいプラットフォームを選択するために File -> Build Settings をクリックします。これにより ターゲット プラットフォームを選択する Build Settings ウィンドウが表示されます。

ターゲットのプラットフォームとして Web Playerを選択した Build Settings ウィンドウ
ターゲットのプラットフォームとして Web Playerを選択した Build Settings ウィンドウ

プリコンパイル コードをテストしたいプラットフォームを選択して, Switch Editor を押下し,Unity にどのプラットフォームをターゲットにするのか Unity に知らせます。

スクリプトを作成し,次のコードをコピー&ペーストします:

// JS
function Awake() {
  #if UNITY_EDITOR
    Debug.Log("Unity Editor");
  #endif
    
  #if UNITY_IPHONE
    Debug.Log("Iphone");
  #endif

  #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
  #endif

  #if UNITY_STANDALONE_WIN
    Debug.Log("Stand Alone Windows");
  #endif    
}


// C#
using UnityEngine;
using System.Collections;

public class PlatformDefines : MonoBehaviour {
  void Start () {

    #if UNITY_EDITOR
      Debug.Log("Unity Editor");
    #endif
    
    #if UNITY_IPHONE
      Debug.Log("Iphone");
    #endif

    #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
    #endif

    #if UNITY_STANDALONE_WIN
      Debug.Log("Stand Alone Windows");
    #endif

  }          
}


// Boo
import UnityEngine

class PlatformDefines (MonoBehaviour): 

    def Start ():
        ifdef UNITY_EDITOR:
            Debug.Log("Unity Editor")

        ifdef UNITY_IPHONE:
            Debug.Log("IPhone")

        ifdef UNITY_STANDALONE_OSX:
            Debug.Log("Stand Alone OSX")

        ifdef not UNITY_IPHONE:
            Debug.Log("not an iPhone")



次に,どのプラットフォームを選択したかによって,再生したときにいずれかのメッセージが Unity コンソール に出力されます。

C#ではCONDITIONAL属性を使用することでどれよりもエラーの少なくクリーンなものを作成することが出来ます。詳しくは http://msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspxを御覧ください。

基本的な #if コンパイラ ディレクティブに加えて,C# および JavaScript のどちらでも次のとおりにテストできます:


#if UNITY_EDITOR
    Debug.Log("Unity Editor");

#elif UNITY_IPHONE
    Debug.Log("Unity iPhone");

#else
    Debug.Log("Any other platform");

#endif


しかし,Boo は現在 ifdef ディレクティブのみサポートします。

プラットフォームのカスタム定義

ビルトインのセレクションに自身のカスタム定義のを追加することが出来ます。 Player SettingsOther Settings により, Scripting Define Symbols テキストボックスが表示されています。

ここで特定プラットフォームで定義したいシンボルの名前を入力して,セミコロンで区切ることが出来ます。これらのシンボルは,ビルトインのものと同様に #if ディレクティブの条件として使用できます。

グローバルのカスタム定義

自身のカスタムのプリプロセッサ ディレクティブを定義して,コンパイル時にどのコードを include するか制御することが出来ます。これを行うためには追加のディレクティブを含んだテキストファイルを “Assets/” フォルダに追加します。ファイルの名前は使用している言語に依存し,拡張子は .rsp です:

C# <Project Path>/Assets/smcs.rsp
C# - Editor Scripts <Project Path>/Assets/gmcs.rsp
UnityScript <Project Path>/Assets/us.rsp
Boo <Project Path>/Assets/boo.rsp

例として,もし smcs.rsp に “-define:UNITY_DEBUG” を一行含めれば,UNITY_DEBUG の定義は C# スクリプトにおいて,エディタースクリプトを除いてグローバルのカスタム定義として存在することになります。

.rsp ファイルに変更を行うたびに,有効化するためには再コンパイルを行う必要があります。これを行うためには単独のスクリプトファイル(.js, .cs または .boo)を更新または再インポートします。

グローバル定義のみ修正したい場合,全てのコンパイラをカバーするために Player SettingsScripting Define Symbols を修正すべきです。もし代わりに .rsp の変更を選択した場合,Unityが使用するコンパイラごとにひとつのファイルを提供する必要があり,どれかのコンパイラがしようされているかどうか知ることができません。

.rsp ファイルの使用方法についてはインストールした Editor フォルダに含まれる smcs アプリケーションの help セクションに説明があります。詳細な説明については “smcs -help” を実行して下さい。さらに .rsp ファイルは実行する前にコンパイラをマッチングする必要があることに留意して下さい。例えば,ウェブプレイヤーがターゲットである場合, smcs は smcs.rsp とともに使用され,スタンドアローンプレイヤーの場合は gmcs は gmcs.rsp とともに使用され,MS コンパイラの場合は csc は csc.rsp とともに使用する,などとします。

自動メモリ管理を理解する
ジェネリック関数