本文主要是對unity中如何在Android和iOS中調用Native API進行介紹。
首先unity支持在C#中調用C++ dll,這樣可以在Android和iOS中提供C++接口在unity中調用。利用這一特性,可以擴展unity的功能。例如集成和調用第三方庫。同時為了滿足對unity接口的一致性,可以考慮在android和iOS上提供相同的接口供C#調用。
這裡列舉以下兩個例子。
1. 1. 以彈出一個覆蓋部分屏幕的webview為例來說明如何從C#調用Native接口。
2. 2. 簡單的C# -> C++ -> Java/ObjC -> C#的異步回調實現(會在下一期中給出實現)
由於android和iOS平台加載庫的方式不同(android為動態加載,iOS為靜態加載),在C#中針對不同平台對dll 接口的引用聲明是不一樣的。本例對應的接口聲明如下:
1 public class CallNativeAPI {
2
3 #if UNITY_EDITOR
4 public static void OpenWebView(string url) {
5 return;
6 }
7
8 public static void SumNum(int v1, int v2) {
9 TestUnityEditor.SumNum(v1, v2);
10
11 return;
12 }
13 #elif UNITY_IPHONE
14 [DllImport ("__Internal")]
15 public static extern void OpenWebView(string url);
16 [DllImport ("__Internal")]
17 public static extern void SumNum(int v1, int v2);
18 #elif UNITY_ANDROID
19 [DllImport ("libtestunity", CallingConvention = CallingConvention.Cdecl)]
20 public static extern void OpenWebView(string url);
21 [DllImport ("libtestunity", CallingConvention = CallingConvention.Cdecl)]
22 public static extern void SumNum(int v1, int v2);
23 #endif
24
25 public static void SumNumForResult(int v1, int v2, CallbackManager.ResultCallback callback) {
26
27 TestCallbackManager.sumNumCallback.SetResultCallBack(new CallbackManager.ResultCallback(callback));
28
29 SumNum(v1, v2);
30
31 return;
32 }
33 }
34
35 namespace CallbackManager
36 {
37 public delegate void ResultCallback(int result);
38
39 public class SumNumManager{
40 public SumNumManager()
41 {
42 }
43
44 private ResultCallback resultCallback;
45
46 public void SetResultCallBack(ResultCallback callback)
47 {
48 resultCallback = callback;
49 }
50
51 public void SendResult(int result)
52 {
53 resultCallback(result);
54 }
55 }
56 }
57
58 public class TestCallbackManager {
59
60 public static CallbackManager.SumNumManager sumNumCallback = new CallbackManager.SumNumManager();
61
62 }
轉載至:
Unity在Android和iOS中如何調用Native API