using System; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.SceneManagement; namespace FlutterUnityIntegration { public class NativeAPI { #if UNITY_IOS && !UNITY_EDITOR [DllImport("__Internal")] public static extern void OnUnityMessage(string message); [DllImport("__Internal")] public static extern void OnUnitySceneLoaded(string name, int buildIndex, bool isLoaded, bool IsValid); #endif #if UNITY_WEBGL [DllImport("__Internal")] public static extern void OnUnityMessageWeb(string message); [DllImport("__Internal")] public static extern void OnUnitySceneLoadedWeb(string name, int buildIndex, bool isLoaded, bool isValid); #endif public static void OnSceneLoaded(Scene scene, LoadSceneMode mode) { #if UNITY_ANDROID try { AndroidJavaClass jc = new AndroidJavaClass("com.xraph.plugin.flutter_unity_widget.UnityPlayerUtils"); jc.CallStatic("onUnitySceneLoaded", scene.name, scene.buildIndex, scene.isLoaded, scene.IsValid()); } catch (Exception e) { Debug.Log(e.Message); } #elif UNITY_WEBGL OnUnitySceneLoadedWeb(scene.name, scene.buildIndex, scene.isLoaded, scene.IsValid()); #elif UNITY_IOS && !UNITY_EDITOR OnUnitySceneLoaded(scene.name, scene.buildIndex, scene.isLoaded, scene.IsValid()); #endif } public static void SendMessageToFlutter(string message) { #if UNITY_ANDROID try { AndroidJavaClass jc = new AndroidJavaClass("com.xraph.plugin.flutter_unity_widget.UnityPlayerUtils"); jc.CallStatic("onUnityMessage", message); } catch (Exception e) { Debug.Log(e.Message); } #elif UNITY_WEBGL OnUnityMessageWeb(message); #elif UNITY_IOS && !UNITY_EDITOR OnUnityMessage(message); #endif } public static void ShowHostMainWindow() { #if UNITY_ANDROID try { var jc = new AndroidJavaClass("com.xraph.plugin.flutter_unity_widget.OverrideUnityActivity"); var overrideActivity = jc.GetStatic("instance"); overrideActivity.Call("showMainActivity"); } catch (Exception e) { Debug.Log(e.Message); } #elif UNITY_IOS && !UNITY_EDITOR // NativeAPI.showHostMainWindow(); #endif } public static void UnloadMainWindow() { #if UNITY_ANDROID try { AndroidJavaClass jc = new AndroidJavaClass("com.xraph.plugin.flutter_unity_widget.OverrideUnityActivity"); AndroidJavaObject overrideActivity = jc.GetStatic("instance"); overrideActivity.Call("unloadPlayer"); } catch (Exception e) { Debug.Log(e.Message); } #elif UNITY_IOS && !UNITY_EDITOR // NativeAPI.unloadPlayer(); #endif } public static void QuitUnityWindow() { #if UNITY_ANDROID try { AndroidJavaClass jc = new AndroidJavaClass("com.xraph.plugin.flutter_unity_widget.OverrideUnityActivity"); AndroidJavaObject overrideActivity = jc.GetStatic("instance"); overrideActivity.Call("quitPlayer"); } catch (Exception e) { Debug.Log(e.Message); } #elif UNITY_IOS && !UNITY_EDITOR // NativeAPI.quitPlayer(); #endif } } }