C#是以Assembly(汇编集)为一个基本单位组织代码的,dll就是一个assemble,dll之间有加载依赖顺序。dll是windows平台上的动态库,而so是linux平台上的动态库,最后.a是IOS平台的库文件。
导入Unity中,放到Assets任意目录下,可以直接使用
示例:
xx.hextern "C"{#include "gnugo.h"}extern "C" int _DLLExport Add(int x,int y);xx.cpp#include "xx.h"int _DLLExport Add(int x, int y){return x + y;}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.
导出的库文件为api.dll,在unity中调用:
using System.Runtime.InteropServices;// 运行时加载动态库[DllImport("api")]public static extern int Add(int x, int y);void Start(){int result = Add(1,2); // 调用}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.
示例:
Unity端:
using UnityEngine;public class Unity_Android : MonoBehaviour{    private AndroidJavaObject m_AndroidJavaObject = null;    void Start()    {        AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");        m_AndroidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");        if(m_AndroidJavaObject != null)        {            m_AndroidJavaObject.Call("CallUnityMethod", "Hello World");        }    }    public void UnityMethod(string str)    {        Debug.Log("Android: " + str);    }}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.
Android端:
public class MainActivity extends UnityPlayerActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    public void CallUnityMethod(String str)    {        System.out.print("Android Call");        UnityPlayer.UnitySendMessage("Drive", "UnityMethod", str);    }}1.2.3.4.5.6.7.8.9.10.11.12.13.
从Unity导出Xcode工程,在Xcode工程中,调用UnitySendMessage("Drive", "UnityMethod", str),调用场景中Drive的GameObject挂载的代码中的UnityMethod方法。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删