unity3d
Multiplatform ontwikkeling
Zoeken…
Compiler Definities
Compilerdefinities voeren platformspecifieke code uit. Hiermee kunt u kleine verschillen tussen verschillende platforms maken.
- Trigger Game Center-prestaties op Apple-apparaten en Google Play-prestaties op Android-apparaten.
- Wijzig de pictogrammen in menu's (Windows-logo in Windows, Linux-pinguïn in Linux).
- Mogelijk platformspecifieke mechanica, afhankelijk van het platform.
- En nog veel meer...
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
}
Een complete lijst met Unity-compilerdefinities is hier te vinden
Platformspecifieke methoden organiseren voor deelklassen
Gedeeltelijke klassen bieden een schone manier om de kernlogica van uw scripts te scheiden van platformspecifieke methoden.
Gedeeltelijke klassen en methoden worden gemarkeerd met het trefwoord partial
. Dit geeft de compiler aan om de klasse "open" te laten en in andere bestanden te zoeken voor de rest van de implementatie.
// ExampleClass.cs
using UnityEngine;
public partial class ExampleClass : MonoBehaviour
{
partial void PlatformSpecificMethod();
void OnEnable()
{
PlatformSpecificMethod();
}
}
Nu kunnen we bestanden maken voor onze platformspecifieke scripts die de gedeeltelijke methode implementeren. Gedeeltelijke methoden kunnen parameters hebben (ook ref
), maar moeten 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
Als een gedeeltelijke methode niet wordt geïmplementeerd, laat de compiler de oproep achterwege.
Tip: dit patroon is ook handig bij het maken van Editor-specifieke methoden.