unity3d
Rozwój wieloplatformowy
Szukaj…
Definicje kompilatora
Definicje kompilatora uruchamiają kod specyficzny dla platformy. Za ich pomocą możesz wprowadzać niewielkie różnice między różnymi platformami.
- Wyzwalaj osiągnięcia Game Center na urządzeniach Apple i osiągnięcia Google Play na urządzeniach z Androidem.
- Zmień ikony w menu (logo systemu Windows w systemie Windows, pingwin systemu Linux w systemie Linux).
- Możliwe, że mają mechanikę specyficzną dla platformy w zależności od platformy.
- I wiele więcej...
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
}
Pełną listę definicji kompilatora Unity można znaleźć tutaj
Organizowanie metod specyficznych dla platformy na częściowe klasy
Klasy częściowe zapewniają czysty sposób na oddzielenie podstawowej logiki skryptów od metod specyficznych dla platformy.
Klasy częściowe i metody są oznaczone słowem kluczowym partial
. To sygnalizuje kompilatorowi, aby pozostawił klasę „otwartą” i szukał innych plików do końca implementacji.
// ExampleClass.cs
using UnityEngine;
public partial class ExampleClass : MonoBehaviour
{
partial void PlatformSpecificMethod();
void OnEnable()
{
PlatformSpecificMethod();
}
}
Teraz możemy tworzyć pliki dla naszych skryptów specyficznych dla platformy, które implementują metodę częściową. Metody częściowe mogą mieć parametry (także ref
), ale muszą zwracać wartość 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
Jeśli metoda częściowa nie zostanie zaimplementowana, kompilator pominie wywołanie.
Wskazówka: Ten wzór jest przydatny również podczas tworzenia metod specyficznych dla edytora.