using UnityEngine; using System.Collections; namespace MoreMountains.Tools { /// /// Add this class to a gameobject, and it'll enable/disable it based on platform context, using conditional defintions to do so /// [AddComponentMenu("More Mountains/Tools/Activation/MMPlatformActivation")] public class MMPlatformActivation : MonoBehaviour { /// the possible times at which this script can run public enum ExecutionTimes { Awake, Start, OnEnable } public enum PlatformActions { DoNothing, Disable } [Header("Settings")] /// the selected execution time public ExecutionTimes ExecutionTime = ExecutionTimes.Awake; /// whether or not this should output a debug line in the console public bool DebugToTheConsole = false; [Header("Desktop")] /// whether or not this gameobject should be active on Windows public PlatformActions UNITY_STANDALONE_WIN = PlatformActions.DoNothing; /// whether or not this gameobject should be active on OSX public PlatformActions UNITY_STANDALONE_OSX = PlatformActions.DoNothing; /// whether or not this gameobject should be active on Linux public PlatformActions UNITY_STANDALONE_LINUX = PlatformActions.DoNothing; /// whether or not this gameobject should be active on standalone public PlatformActions UNITY_STANDALONE = PlatformActions.DoNothing; [Header("Mobile")] /// whether or not this gameobject should be active on iOS public PlatformActions UNITY_IOS = PlatformActions.DoNothing; /// whether or not this gameobject should be active on iPhone public PlatformActions UNITY_IPHONE = PlatformActions.DoNothing; /// whether or not this gameobject should be active on Android public PlatformActions UNITY_ANDROID = PlatformActions.DoNothing; /// whether or not this gameobject should be active on Tizen public PlatformActions UNITY_TIZEN = PlatformActions.DoNothing; [Header("Console")] /// whether or not this gameobject should be active on Wii public PlatformActions UNITY_WII = PlatformActions.DoNothing; /// whether or not this gameobject should be active on PS4 public PlatformActions UNITY_PS4 = PlatformActions.DoNothing; /// whether or not this gameobject should be active on XBoxOne public PlatformActions UNITY_XBOXONE = PlatformActions.DoNothing; [Header("Others")] /// whether or not this gameobject should be active on WebGL public PlatformActions UNITY_WEBGL = PlatformActions.DoNothing; /// whether or not this gameobject should be active on Lumin public PlatformActions UNITY_LUMIN = PlatformActions.DoNothing; /// whether or not this gameobject should be active on TVOS public PlatformActions UNITY_TVOS = PlatformActions.DoNothing; /// whether or not this gameobject should be active on WSA public PlatformActions UNITY_WSA = PlatformActions.DoNothing; /// whether or not this gameobject should be active on Facebook public PlatformActions UNITY_FACEBOOK = PlatformActions.DoNothing; /// whether or not this gameobject should be active on Ads public PlatformActions UNITY_ADS = PlatformActions.DoNothing; /// whether or not this gameobject should be active on Analytics public PlatformActions UNITY_ANALYTICS = PlatformActions.DoNothing; [Header("Active in Editor")] /// whether or not this gameobject should be active in Editor public PlatformActions UNITY_EDITOR = PlatformActions.DoNothing; /// whether or not this gameobject should be active in Editor on Windows public PlatformActions UNITY_EDITOR_WIN = PlatformActions.DoNothing; /// whether or not this gameobject should be active in Editor on OSX public PlatformActions UNITY_EDITOR_OSX = PlatformActions.DoNothing; /// whether or not this gameobject should be active in Editor on Linux public PlatformActions UNITY_EDITOR_LINUX = PlatformActions.DoNothing; /// /// On Enable, processes the state if needed /// protected virtual void OnEnable() { if (ExecutionTime == ExecutionTimes.OnEnable) { Process(); } } /// /// On Awake, processes the state if needed /// protected virtual void Awake() { if (ExecutionTime == ExecutionTimes.Awake) { Process(); } } /// /// On Start, processes the state if needed /// protected virtual void Start() { if (ExecutionTime == ExecutionTimes.Start) { Process(); } } /// /// Enables or disables the object based on current platform /// protected virtual void Process() { // DESKTOP ---------------------------------------------------------------------------------- #if UNITY_STANDALONE_WIN DisableIfNeeded(UNITY_STANDALONE_WIN, "Windows"); #endif #if UNITY_STANDALONE_OSX DisableIfNeeded(UNITY_STANDALONE_OSX, "OSX"); #endif #if UNITY_STANDALONE_LINUX DisableIfNeeded(UNITY_STANDALONE_LINUX, "Linux"); #endif #if UNITY_STANDALONE DisableIfNeeded(UNITY_STANDALONE, "Standalone"); #endif // MOBILE ---------------------------------------------------------------------------------- #if UNITY_IOS DisableIfNeeded(UNITY_IOS, "iOS"); #endif #if UNITY_IPHONE DisableIfNeeded(UNITY_IPHONE, "iPhone"); #endif #if UNITY_ANDROID DisableIfNeeded(UNITY_ANDROID, "Android"); #endif #if UNITY_TIZEN DisableIfNeeded(UNITY_TIZEN, "Tizen"); #endif // CONSOLE ---------------------------------------------------------------------------------- #if UNITY_WII DisableIfNeeded(UNITY_WII, "Wii"); #endif #if UNITY_PS4 DisableIfNeeded(UNITY_PS4, "PS4"); #endif #if UNITY_XBOXONE DisableIfNeeded(UNITY_XBOXONE, "XBoxOne"); #endif // CONSOLE ---------------------------------------------------------------------------------- #if UNITY_WEBGL DisableIfNeeded(UNITY_WEBGL, "WebGL"); #endif #if UNITY_LUMIN DisableIfNeeded(UNITY_LUMIN, "Lumin"); #endif #if UNITY_TVOS DisableIfNeeded(UNITY_TVOS, "TV OS"); #endif #if UNITY_WSA DisableIfNeeded(UNITY_WSA, "WSA"); #endif #if UNITY_FACEBOOK DisableIfNeeded(UNITY_FACEBOOK, "Facebook"); #endif #if UNITY_ADS DisableIfNeeded(UNITY_ADS, "Ads"); #endif #if UNITY_ANALYTICS DisableIfNeeded(UNITY_ANALYTICS, "Analytics"); #endif // EDITOR ---------------------------------------------------------------------------------- #if UNITY_EDITOR DisableIfNeeded(UNITY_EDITOR, "Editor"); #endif #if UNITY_EDITOR_WIN DisableIfNeeded(UNITY_EDITOR_WIN, "Editor Windows"); #endif #if UNITY_EDITOR_OSX DisableIfNeeded(UNITY_EDITOR_OSX, "Editor OSX"); #endif #if UNITY_EDITOR_LINUX DisableIfNeeded(UNITY_EDITOR_LINUX, "Editor Linux"); #endif } /// /// Disables the object if needed, and outputs a debug log if requested /// /// /// protected virtual void DisableIfNeeded(PlatformActions platform, string platformName) { if (this.gameObject.activeInHierarchy && (platform == PlatformActions.Disable)) { this.gameObject.SetActive(false); if (DebugToTheConsole) { Debug.LogFormat(this.gameObject.name + " got disabled via MMPlatformActivation, platform : " + platformName + "."); } } } } }