using System.Runtime.CompilerServices; using UnityEngine; using System; using System.Runtime.InteropServices; using AOT; public static class NativeTool { private static Action mShareResultDel; public static void Shake(int pType, float pIntensity)//0 light,1 medium,2 heavy { #if UNITY_EDITOR //Debug.Log($"Shake {pType} with intensity {pIntensity}"); #elif UNITY_IOS mShake(pType, pIntensity); #elif UNITY_ANDROID mShake(pType * pType * 20 + (int)(pIntensity * (pType + 1) * 10)); #endif } public static void Share(string pTitle, string pUrl, Action pResultDel) { mShareResultDel = pResultDel; #if UNITY_EDITOR mShareResultDel?.Invoke(true); #elif UNITY_IOS mShare(pTitle, pUrl, onShareCallback); #elif UNITY_ANDROID mShare(pTitle, pUrl); #endif } #if UNITY_IOS [DllImport("__Internal")] private static extern void mShake(int pType, float pIntensity); [DllImport("__Internal")] private static extern void mShare(string pTitle, string pUrl, BoolResultDelegate pResultCallback); internal delegate void BoolResultDelegate(bool pResult); [MonoPInvokeCallback(typeof(BoolResultDelegate))] private static void onShareCallback(bool pResult) { mShareResultDel?.Invoke(pResult); } #endif #if UNITY_ANDROID private static AndroidJavaClass javaObj = new AndroidJavaClass("com.toukagames.NativeTool"); private static AndroidJavaObject mInstance = null; private static void mShake(long mMilliSeconds) { if (mInstance == null) mInstance = javaObj.CallStatic("GetInstance"); mInstance.Call("Shake", mMilliSeconds); } private static void mShare(string pTitle, string pUrl) { if (mInstance == null) mInstance = javaObj.CallStatic("GetInstance"); mInstance.Call("Share", pUrl); mShareResultDel?.Invoke(true); } #endif }