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方法。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删