転送データのパラメータマッピングの概要にユニティネイティブプラットフォーム

転送データのパラメータマッピングの概要にユニティネイティブプラットフォーム

通信ユニティでのモバイルゲーム開発のメカニズム、特にいくつかのネイティブプラグインの開発に関連して、ユニティネイティブプラットフォームを使用する必要があります(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];    
}
公開された109元の記事 ウォンの賞賛403 ビュー880 000 +

おすすめ

転載: blog.csdn.net/cordova/article/details/102161586