Unity C++插件
来源:互联网 发布:淘宝数据提取6.0 编辑:程序博客网 时间:2024/05/20 06:29
可以用C++语言为Unity编写插件,C++插件提供给Unity C#脚本调用的函数必须声明在C中:
extern "C" {
float FooPluginFunction ();
}
这是为了避免Name Mangling机制带来的影响。
Unity C#脚本调用插件函数:
[DllImport("PluginName")]
private static externfloat FooPluginFunction ();
Unity 插件编写文档http://docs.unity3d.com/Documentation/Manual/Plugins.html。
Unity是基于Mono开源项目编写的。与微软的.NET Framework不同,Mono项目是跨平台的。Mono应用程序代码都是托管的,Mono应用程序可以通过使用System.Runtime. InterOpServices库创建C#绑定来调用已存的非托管代码。UnityC#脚本调用C++插件也是从托管代码调用非托管代码的过程。
http://www.mono-project.com/Interop_with_Native_Libraries。
从Unity插件调用Unity C#脚本函数,可以用mono运行时库实现:
http://www.mono-project.com/Embedding_Mono#Invoking_Methods_in_the_CIL_universe。
Mac OS平台实现参考:
http://www.reigndesign.com/blog/unity-native-plugins-os-x。
从C代码调用托管C#代码另一个比较简洁的方式是,把C#委托传入C代码并赋值给C函数指针,通过调用C函数指针来实现对C#委托的调用。这个方法需要Mono System. Runtime.InterOpServices支持。
C#代码:
usingSystem.Runtime.InteropServices;
class Demo {
delegate int MyCallback1 (int a, int b);
[DllImport ("MyRuntime")]
extern static void RegisterCallback(MyCallback1 callback1);
static int Add (int a, int b) { return a +b; }
void Init ()
{
//C# Add函数注册给C代码
RegisterCallback (Add);
}
}
C代码:
typedef int(*callback-t) (int a, int b);
static callback_tmy_callback;
void RegisterCallback(my_callback_t cb)
{
my_callback = cb;
}
//实现对托管C#代码调用
int InvokeManagedCode(int a, int b)
{
if (my_callback == NULL){
abort();
}
return (*my_callback) (a, b);
}
- Unity插件
- Unity插件
- Unity插件
- 【unity插件】unity可视化编辑Shader插件
- 【Unity插件】FingerGestures 插件使用
- [Unity插件]背包系统插件
- [Unity插件]战争迷雾插件
- Unity插件--UniSky
- Unity C++插件
- Unity 插件ResourceCheck
- 【Unity插件】LitJson杂谈
- 【Unity 插件】 Shader Editor
- Unity集成android插件
- Unity如何使用插件
- unity插件和工具
- Unity插件-AutoTileSet介绍
- Unity andriod插件入门
- unity 推荐插件
- 计算机以及其他学习资料图书下载-办公
- 手势检测,识别与跟踪资料汇总
- 程序算法与人生选择
- 上帝好奇地问的企业即时通讯软件
- Cocos2D-X屏幕适配新解
- Unity C++插件
- quartz简单配置
- csdn,见证我成长的过程
- SQL区分大小写
- java最基本的基础知识
- 数据同步算法研究
- 自动输入Git密码的小程序(仅做备忘用)
- WTL\MFC\ATL CSTRING的前世今生
- vim diff