歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Unity在Android和iOS中如何調用Native API

Unity在Android和iOS中如何調用Native API

日期:2017/3/1 10:20:55   编辑:Linux編程

本文主要是對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. #if UNITY_EDITOR
  3. public static void OpenWebView(string url) {
  4. return;
  5. }
  6. public static void SumNum(int v1, int v2) {
  7. TestUnityEditor.SumNum(v1, v2);
  8. return;
  9. }
  10. #elif UNITY_IPHONE
  11. [DllImport ("__Internal")]
  12. public static extern void OpenWebView(string url);
  13. [DllImport ("__Internal")]
  14. public static extern void SumNum(int v1, int v2);
  15. #elif UNITY_ANDROID
  16. [DllImport ("libtestunity", CallingConvention = CallingConvention.Cdecl)]
  17. public static extern void OpenWebView(string url);
  18. [DllImport ("libtestunity", CallingConvention = CallingConvention.Cdecl)]
  19. public static extern void SumNum(int v1, int v2);
  20. #endif
  21. public static void SumNumForResult(int v1, int v2, CallbackManager.ResultCallback callback) {
  22. TestCallbackManager.sumNumCallback.SetResultCallBack(new CallbackManager.ResultCallback(callback));
  23. SumNum(v1, v2);
  24. return;
  25. }
  26. }
  27. namespace CallbackManager
  28. {
  29. public delegate void ResultCallback(int result);
  30. public class SumNumManager{
  31. public SumNumManager()
  32. {
  33. }
  34. private ResultCallback resultCallback;
  35. public void SetResultCallBack(ResultCallback callback)
  36. {
  37. resultCallback = callback;
  38. }
  39. public void SendResult(int result)
  40. {
  41. resultCallback(result);
  42. }
  43. }
  44. }
  45. public class TestCallbackManager {
  46. public static CallbackManager.SumNumManager sumNumCallback = new CallbackManager.SumNumManager();
  47. }
Copyright © Linux教程網 All Rights Reserved