各种调用C++的方法在各种平台下的总结如下(可能会有出入):
1、在VS中使用CLR C++工程,编译产生.dll,放入Plugins
✔ Android、Editor、Windows、OSX
✘ IOS (报的错貌似与il2cpp有关)
2、直接在Plugins中放入.cpp文件(不支持子目录)
✔ IOS
✘ Editor、Windows、OSX、Android
3、编译出目标移动平台的库(.a或.so等),放入Plugins
✔ IOS、Android
✘ Editor、Windows、OSX
4、编译出PC平台的库,放入Plugins
✔ Windows(.dll)、Linux(.so)、OSX(Bundle)
✘ iOS、Android
? Editor
我的目标主要是IOS,所以下面以IOS、C++为例介绍一下各种解决方案,我的Unity版本是5.4.2f2。(后因为build时崩溃换成5.5.0f3)
无论用哪种方法,都需要在Unity工程中Assets中新建一个Plugins文件夹,再新建一个iOS文件夹。
第一种方案的话,CLR C++的语法与正常C++稍有不同,要改C++代码,而且还不能在iOS上使用,就直接否决了。第四种也不用说,应该行不通。
第二、三种方案根据回调方法的不同每种又可以分为两种方法:使用官方手册上的UnitySendMessage;使用MonoPInvokeCallBack。所以共四种方法。
直接看我将四种方法汇总在一块的代码吧:
//C#
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;
using AOT;
public class MonoCB : MonoBehaviour {
[StructLayout(LayoutKind.Sequential)]
struct Parameter {
public int a;
public int b;
}
delegate void CallBack(IntPtr param);
[DllImport ("__Internal")]
static extern void TestFunc(int a,int b,CallBack cb);
[DllImport ("__Internal")]
static extern void TestFunc2(int a,in