1.编写Unity 底层插件难免会遇到返回数据类型无法读取到,或者导致程序直接崩溃
崩溃1:C++ 直接返回 Vector2 程序直接崩溃
typedef struct Vector2
{
float x;
float y;
ctors
Vector2() : x(0), y(0) {};
Vector2(float x, float y) : x(x), y(y) {};
//....
}
崩溃1分析原因:Vector2结构体类型 和Unity 中的结构体类型不一致,导致内存溢出或者地址不对
崩溃1解决办法:C++ 返回 Vector2Features 封装Vector2 在结构体中
typedef struct Vector2Features
{
int id;
Vector2 Vector;
Vector2Features() {
id = 0;
Vector = Vector2();
};
Vector2Features(int i, Vector2 v) {
id = i;
Vector = v;
};
};
Unity C#脚本:
[StructLayout(LayoutKind.Sequential)]
public struct Vector2Features
{
[MarshalAs(UnmanagedType.SysInt)]
public int id;
[MarshalAs(UnmanagedType.LPStruct)]
public Vector2 Vector;
}