75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System.Runtime.CompilerServices; | ||
|  | using UnityEngine; | ||
|  | using System; | ||
|  | using System.Runtime.InteropServices; | ||
|  | using AOT; | ||
|  | 
 | ||
|  | public static class NativeTool | ||
|  | { | ||
|  |      | ||
|  |     private static Action<bool> 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<bool> 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<AndroidJavaObject>("GetInstance"); | ||
|  | 
 | ||
|  |         mInstance.Call("Shake", mMilliSeconds); | ||
|  |     } | ||
|  | 
 | ||
|  |     private static void mShare(string pTitle, string pUrl) | ||
|  |     { | ||
|  |         if (mInstance == null) | ||
|  |             mInstance = javaObj.CallStatic<AndroidJavaObject>("GetInstance"); | ||
|  | 
 | ||
|  |         mInstance.Call("Share", pUrl); | ||
|  |         mShareResultDel?.Invoke(true); | ||
|  |     } | ||
|  | #endif | ||
|  | } |