包含19節(jié)視頻教程
從零基礎(chǔ)學(xué)習(xí)3dmax的建模技術(shù),簡單易學(xué)的視頻教程,讓你快速掌握3dmax建模技巧,您可以本套教程的學(xué)習(xí)快速掌握3dmax的大部分技術(shù),并能通過這些技術(shù)適應(yīng)未來大多數(shù)的工作,通過幾節(jié)課就找到工作的會員大有人在,快來學(xué)習(xí)一下吧!
![]()
|
![]() 面我先說一下在Unity中結(jié)合Android NDK實現(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ù)這樣就有點限制了,其實我們可以把C/C++的代碼做為一個中轉(zhuǎn)站,實現(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)用這個方法的,這個方法實現(xiàn)了一個簡單的整形相加的操作。在說說第二個方法int addInt(),這個方法是留給Unity中C#語言調(diào)用的,它的結(jié)構(gòu)與上面不一樣不能在Java代碼中調(diào)用,同樣它也就是實現(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