転送データのパラメータマッピングの概要にユニティネイティブプラットフォーム
通信ユニティでのモバイルゲーム開発のメカニズム、特にいくつかのネイティブプラグインの開発に関連して、ユニティネイティブプラットフォームを使用する必要があります(iOS版、Androidの)データおよびイベントの伝送を実現する、間。これはネイティブのデータ転送処理のプラットフォームは、データは過去のデータの広がりのないタイプできなくなりますので、変換されたデータを受け取る権利が非常に重要であるため、スクリプト・データ変換C ++のデータ型へのデータの伝送を必要とします。
UnityおよびiOSのネイティブプラットフォーム会場との間の通信方式について:Unityは、IOSと通信します
基本データ型を直接転送することができます
int型、float型、ブール、同じようにバイト基本データ型を直接転送して、変換することができますどこピックを使用してCでのバイトunsigned char型++:
Unity中:
[DllImport("__Internal")]
public static extern int Test(int param1, float param2, bool param3);
ネイティブインタフェース:
extern "C" int Test(int param1, float param2, bool param3)
{
}
直接配列を受けCHAR文字列文字列
Unity中:
[DllImport("__Internal")]
public static extern int Test(string param1);
ネイティブインタフェース:
extern "C" int Test(char* param1)
{
}
ユニティ・オブジェクト(テクスチャ、バッファメッシュ、等)のIntPtrは、受信されたボイドを用いた伝送に変換しました*
Unity中:
[DllImport("__Internal")]
public static extern int Test(IntPtr rt, IntPtr vb, IntPtr ib);
RenderTexture rt = RenderTexture.GetTemporary(Screen.width, Screen.height, 0);
Mesh mesh = new Mesh();
IntPtr rtPtr = rt.GetNativeTexturePtr();
IntPtr VB = mesh.GetNativeVertexBufferPtr(0);
IntPtr IB = mesh.GetNativeIndexBufferPtr();
Test3(rtPtr, VB, IB);
ネイティブインタフェース:
extern "C" int Test(void* rt, void* vb, void* ib)
{
//id<MTLTexture> tex = (__bridge id<MTLTexture>)rt;
//id<MTLBuffer> VB = (__bridge id<MTLBuffer>)vb;
}
アレイ上の伝送
基本データ型の配列を直接転送することができます。
Unity中:
[DllImport("__Internal")]
public static extern int Test(int[] param1, float[] param2, bool[] param3);
ネイティブインタフェース:
extern "C" int Test(int* param1, float* param2, bool* param3)
{
}
基礎となるデータ型でコースの側面を[受信のIntPtrのアレイの形で渡されるオブジェクトの統一アレイのIntPtrポインタが渡されInrPtrアレイ、C ++空隙**は、ポインタの配列は、配列の最初のアドレスへのポインタを渡すのIntPtr転送することが可能です]:
Unity中:
[DllImport("__Internal")]
public static extern int Test(IntPtr param1);
RenderTexture rt1 = RenderTexture.GetTemporary(Screen.width, Screen.height, 0);
RenderTexture rt2 = RenderTexture.GetTemporary(Screen.width, Screen.height, 0);
RenderTexture rt3 = RenderTexture.GetTemporary(Screen.width, Screen.height, 0);
IntPtr[] rtsArr = {rt1.GetNativeTexturePtr(),rt2.GetNativeTexturePtr(),rt3.GetNativeTexturePtr()};
GCHandle rtsHandle = GCHandle.Alloc(rtsArr, GCHandleType.Pinned);
Test(rtsHandle.AddrOfPinnedObject());
ネイティブインタフェース:
extern "C" int Test(void** param1)
{
void* rt1 = param1[0];
void* rt2 = param1[1];
void* rt3 = param1[2];
}