unity3d
マルチプラットフォーム開発
サーチ…
コンパイラの定義
コンパイラ定義はプラットフォーム固有のコードを実行します。それらを使用すると、さまざまなプラットフォーム間で小さな違いを生むことができます。
- リンゴデバイスのゲームセンターの成果と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