サーチ…


コンパイラの定義

コンパイラ定義はプラットフォーム固有のコードを実行します。それらを使用すると、さまざまなプラットフォーム間で小さな違いを生むことができます。

  • リンゴデバイスのゲームセンターの成果とAndroidデバイスのGoogleの実績をトリガーします。
  • メニューのアイコンを変更する(Windowsではウィンドウロゴ、LinuxではLinuxペンギン)。
  • おそらく、プラットフォームに応じてプラットフォーム固有のメカニックがあるかもしれません。
  • さらに多くの...
void Update(){ 

#if UNITY_IPHONE
    //code here is only called when running on iPhone
#endif

#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
    //code here is only ran in a unity game running on windows outside of the editor
#endif

//other code that will be ran regardless of platform

}

Unityコンパイラ定義の完全なリストは、ここで見つけることができます

プラットフォーム固有のメソッドを部分クラスに編成する

部分クラスは、スクリプトのコアロジックをプラットフォーム固有のメソッドから分離するきれいな方法を提供します。

部分的なクラスとメソッドには、キーワードpartialが付いています。これはコンパイラにクラスを "オープン"のままにし、他のファイルを残りの実装のために調べるように指示します。

// ExampleClass.cs
using UnityEngine;

public partial class ExampleClass : MonoBehaviour
{
    partial void PlatformSpecificMethod();

    void OnEnable()
    {
        PlatformSpecificMethod();
    }
}

これで部分メソッドを実装するプラットフォーム固有のスクリプト用のファイルを作成できます。部分メソッドは、パラメータを持つことができます(また、 ref )が、返す必要がありvoid

// ExampleClass.Iphone.cs

#if UNITY_IPHONE
using UnityEngine;

public partial class ExampleClass
{
    partial void PlatformSpecificMethod()
    {
        Debug.Log("I am an iPhone");
    }
}
#endif
// ExampleClass.Android.cs

#if UNITY_ANDROID
using UnityEngine;

public partial class ExampleClass
{
    partial void PlatformSpecificMethod()
    {
        Debug.Log("I am an Android");
    }
}
#endif

部分的なメソッドが実装されていない場合、コンパイラは呼び出しを省略します。

ヒント:このパターンは、エディター固有のメソッドを作成する場合にも便利です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow