包含3節(jié)視頻教程
包括轉(zhuǎn)載教程,其他視頻教程,各種問題答疑等系列!特別是問題收集箱。包含了整個學(xué)習(xí)過程中遇到的細(xì)節(jié)小問題。這些收集是你未來幾年甚至十幾年一定會遇到的!
![]()
|
![]() 面我先說一下在Unity中結(jié)合Android NDK實(shí)現(xiàn)本地數(shù)據(jù)的共享的原理,如下圖所示 ,Unity工程加入NDK后工程大致可分為三個部分 Android(JAVA) 、 C/C++(.so)、Unity(C#)它們之間是可以相互調(diào)用的,在之前的文章中我向大家介紹了 Android與Unity之間相互調(diào)用的原理,Unity3D研究院之打開Activity與調(diào)用JAVA代碼傳遞參數(shù)(十八)。 這種方式只能相互傳遞String字符串,少量數(shù)據(jù)傳遞時可以使用這種方式。如果是大量數(shù)據(jù)這樣就有點(diǎn)限制了,其實(shí)我們可以把C/C++的代碼做為一個中轉(zhuǎn)站,實(shí)現(xiàn)兩邊的數(shù)據(jù)引用與共享。 ![]() unity3D游戲教程 首先在官網(wǎng)中下載NDK最新的安裝包,安裝包分為三個版本這里我下載使用的是MAC OS版本,最新版本已經(jīng)到了R8。 OK,我們在Eclipse中創(chuàng)建一個Android工程,在res與src平級文件夾目錄下創(chuàng)建一個jni的文件夾。接著在文件夾中創(chuàng)建兩個代碼文件,分別是C與C++還有一個配置文件Android.mk。 c.c代碼一共分為兩個方法,先說說方法Java_com_xys_UnityTestActivity_TestAddInt 這個方法是漏給Java代碼調(diào)用的,jint表示此方法的返回值為整形,數(shù)據(jù)類型還可以是jlong 、jfloat、jdouble、 jobject、jboolean、jbyte、jchar、jshort,搞程序的一看就應(yīng)該明白了吧?我就不一一解釋了。 方法名中java開頭是標(biāo)準(zhǔn)用法,com_xys表示當(dāng)前程序的包名,UnityTestActivity表示當(dāng)前類,TestAddInt表示方法名,在Android中就是調(diào)用這個方法的,這個方法實(shí)現(xiàn)了一個簡單的整形相加的操作。在說說第二個方法int addInt(),這個方法是留給Unity中C#語言調(diào)用的,它的結(jié)構(gòu)與上面不一樣不能在Java代碼中調(diào)用,同樣它也就是實(shí)現(xiàn)整形相加的操作。 先是C的文件 c.c [代碼]c#/cpp/oc代碼: 01#include 02#include 03 04//Android中java代碼調(diào)用此方法 05jint 06Java_com_xys_UnityTestActivity_TestAddInt( JNIEnv* env, jobject thiz ,jint a,jint b) 07{ 08 return addInt(a,b); 09} 10 11//Unity中C#代碼調(diào)用此方法 12int addInt(int a, int b) 13{ 14 return a + b; 15} 在看看C++文件,它和C文件的調(diào)用原理差不多,不過值得注意的是C++中一定要把需要調(diào)用的方法寫在extern “C”{ } 中,否則無法調(diào)用。 cplus.cpp [代碼]c#/cpp/oc代碼: 01#include 02#include 03 04//聲明一個類 05class MyClass 06{ 07 public: 08 static float add(float a, float b) 09 { 10 return a + b; 11 } 12 13}; 14 15//外部調(diào)用的方法需要寫在這里 16extern "C" 17{ 18 19 jfloat 20 Java_com_xys_UnityTestActivity_TestAddFloat( JNIEnv* env, jobject thiz ,jfloat a,jfloat b) 21 { 22 return MyClass::add(a,b); 23 } 24 25 float addFloat(float a,float b) 26 { 27 return MyClass::add(a,b); 28 } 29 30} 再看看第三個配置文件,文件中比較重要的兩個變量 LOCAL_MODULE表示生成出的.so的名稱 LOCAL_SRC_FILES 表示需要編譯的文件,如果是多個C/C++文件中間需要使用 \ 隔開。 源自:http://www.siluyouxi.com/game/code/u3d/1402.html 贊0 踩0 |
未知用戶
2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號-1
2005-2025 ZhuFeng Community All Rights Reserved
VIP