朱峰社區(qū)首頁 朱峰社區(qū)

搜索資源 注冊|登陸

等待

返回 展開菜單
按功能 按軟件

問題收集

問題收集

包含3節(jié)視頻教程

包括轉(zhuǎn)載教程,其他視頻教程,各種問題答疑等系列!特別是問題收集箱。包含了整個學(xué)習(xí)過程中遇到的細(xì)節(jié)小問題。這些收集是你未來幾年甚至十幾年一定會遇到的!

關(guān)閉

Unity3D研究:Android實(shí)現(xiàn)本地數(shù)據(jù)共享

關(guān)注:763 留言:0 樓主:877088934@qq.com 發(fā)帖時間:15年9月14日

877088934@qq.com

普通會員

877088934@qq.com

社區(qū)摯友:3級

關(guān)注3969人

  • 積分

    61

  • 登陸

    4

  • 發(fā)帖

    52

間隔線

面我先說一下在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

http://www.cgwwo.com/thread-27208-1-1.html

http://www.cocoachina.com/bbs/read.php?tid=323659

贊0 踩0

未知用戶

2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號-1
2005-2025 ZhuFeng Community All Rights Reserved

VIP

朱峰社區(qū)微信公眾號

回頂部

1.復(fù)制文本發(fā)給您的QQ好友或群、微信等;好友點(diǎn)擊鏈接以后,轉(zhuǎn)發(fā)就成功了。 2.如朋友點(diǎn)擊您的鏈接,您需要需刷新一下才行;同一個好友僅能點(diǎn)擊一次。
購買VIP,觀看所有收費(fèi)教程!!