本文主要是对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
4publicstaticvoid OpenWebView(string url) {
5return;
6 }
7 8publicstaticvoid SumNum(int v1, int v2) {
9 TestUnityEditor.SumNum(v1, v2);
1011return;
12 }
13#elif UNITY_IPHONE
14 [DllImport ("__Internal")]
15publicstaticexternvoid OpenWebView(string url);
16 [DllImport ("__Internal")]
17publicstaticexternvoid SumNum(int v1, int v2);
18#elif UNITY_ANDROID
19 [DllImport ("libtestunity", CallingConvention = CallingConvention.Cdecl)]
20publicstaticexternvoid OpenWebView(string url);
21 [DllImport ("libtestunity", CallingConvention = CallingConvention.Cdecl)]
22publicstaticexternvoid SumNum(int v1, int v2);
23#endif2425publicstaticvoid SumNumForResult(int v1, int v2, CallbackManager.ResultCallback callback) {
2627 TestCallbackManager.sumNumCallback.SetResultCallBack(new CallbackManager.ResultCallback(callback));
2829 SumNum(v1, v2);
3031return;
32 }
33}
3435namespace CallbackManager
36{
37publicdelegatevoid ResultCallback(int result);
3839publicclass SumNumManager{
40public SumNumManager()
41 {
42 }
4344private ResultCallback resultCallback;
4546publicvoid SetResultCallBack(ResultCallback callback)
47 {
48 resultCallback = callback;
49 }
5051publicvoid SendResult(int result)
52 {
53 resultCallback(result);
54 }
55 }
56}
5758publicclass TestCallbackManager {
5960publicstatic CallbackManager.SumNumManager sumNumCallback = new CallbackManager.SumNumManager();
6162 }
转载至:
Unity在Android和iOS中如何调用Native API
原文:http://www.cnblogs.com/HuangWj/p/5917998.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!