1. 程式人生 > >Unity3D遊戲開發之Unity與Android互動呼叫研究

Unity3D遊戲開發之Unity與Android互動呼叫研究

  • 各位朋友,大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是blog.csdn.net/qinyuanpei。在前一篇文章中,我們研究了Android平臺上Unity3D的手勢操作並在之前的基礎上實現了手勢旋轉、放縮等功能。今天呢,我們繼續來研究Unity在Android平臺上擴充套件的內容。眾所周知,Unity3D是一個強大的跨平臺遊戲引擎,和大多數喜歡Unity的朋友一樣,博主在體驗了Unity強大的跨平臺能力後,被深深地震撼了,試想以前我們如果要開發一款遊戲的話,我們需要對DX、OpenGL等圖形庫有足夠的瞭解,由於遊戲對效能的嚴格要求,諸如Unreal、CryEngine等頂級的商業遊戲引擎通常都是使用

    C/C++這種底層的語言來開發,使得許多開發者望而卻步。而此時此刻,得益於Unity3D強大的跨平臺能力,博主可以用自己喜歡的C#語言來編寫遊戲,這無疑說明博主和成千上百使用Unity的開發者一樣,我們正處於一個商業化引擎逐漸成熟的時代,作為開發者的我們是幸福的。

    記得"仙劍之父“姚壯憲作為評委參加Unity亞洲區的比賽時曾經感慨道:"我學生時也是痴迷於自己不斷鑽研遊戲開發,從各種小遊戲和小工具做起,並不斷的回頭優化改良以前的作品,積累經驗技巧。那時候沒有商業引擎可以用,需要自己給自己做底層引擎。現在的年輕人是幸福的,有Unity這樣向大眾公開的引擎可以學習和使用,可以把精力更多地專注在遊戲作品本身的創作,更應該把握這樣的環境"。所以相比遊戲界的前輩們用QBasic來寫《仙劍奇俠傳》這樣的遊戲作品,我們這代人無疑要幸福得多,可是我們這代人身上的擔子卻並不輕啊。如今的時代是一個多元化的時代,無論是在應用開發領域還是遊戲開發領域,目標使用者平臺多樣化成為我們不得不去面對的問題。以目前國內的移動手機平臺為例,主流的移動手機平臺就有IOS、

    Android、Window Phone三種。儘管從理論上來講,我們可以不用寫一行Object-C或者Java程式碼就可以開發出IOS、Android上的應用,可是如果我們需要和該平臺的某些介面進行互動的時候,我們就不得不考慮Unity和這些平臺的對接。舉一個最為常見的例子,大家都知道在移動平臺上流行一種應用內付費的模式,可是Unity並沒有為我們提供相應的API,在IOS平臺上由於蘋果應用商店的唯一合法性,我們想在該平臺上實現應用內付費就必須使用蘋果官方提供的SDK,而蘋果官方主推Object-C,所以我們不可避免地要和Object-C打交道。同樣地,在Android平臺上由於Android的開源導致Android裝置的多樣性、應用商店的多樣性,我們選擇將自己的應用上架的時候,同樣面臨著和Java或者C++(JNI)打交道的問題。所以,我們今天就來研究下Unity和其它平臺的互動呼叫的問題,由於博主手頭上只有一部用了很長時間的Android手機,所以我們今天就以Android平臺為例,探討下Unity和Android的互動吧!

    Unity和Android互動通常有兩種方式:

    1、Unity呼叫為Android平臺編寫的外掛

    2、將Unity專案匯出為Android專案,然後編寫Android程式

    這兩種方式在實際的應用中各有優劣,我們今天先來講解第一種方法,第二種方法博主稍後再和大家分享。首先來說說第一種方法的原理,我們首先用Eclipse編寫一個Java的庫檔案(.Jar),在這個庫檔案中我們會封裝一系列的方法來為Unity提供介面,我們將這個庫檔案匯出後可以將其放置到一個特定的目錄下(Plugins/Android),然後我們就可以利用Unity提供的API來呼叫這些方法。好了,下面我們來看具體的過程吧,首先我們建立一個Android專案,並將其設為一個庫,這裡將其包名設為com.android.android2unity,這個包名很重要,我們在Unity中將用到這個包名。我們接下來在MainActivity.java這個類中編寫程式碼,它將作為我們封裝Android API的一個類。在編寫程式碼之前,讓我們來做這樣一件事情,將位於D:Program FilesUnityEditorDataPlaybackEnginesandroidplayer eleaseinclasses.jar(不同的計算機上,這個位置可能會有所不同,大家按照自己的路徑新增即可)這個庫加入到我們的專案中來,如圖:

    \

    這個庫是Unity為Android提供的一個庫,主要提供了支援該平臺的Player,具體的大家可以自己去檢視它的類空間。好了,我們下面編寫這樣一個指令碼:

    01.package com.android.android2unity; 02. 03.import android.app.AlertDialog; 04.import android.content.Context; 05.import android.content.Intent; 06.import android.os.Bundle; 07.import android.os.Vibrator; 08.import android.widget.Toast; 09. 10. 11./* 引入Unity的包  */ 12.import com.unity3d.player.UnityPlayerActivity; 13.import com.unity3d.player.UnityPlayer; 14. 15./* 如果需要Activity與Unity對接,可以通過繼承UnityPlayerActivity來實現  */ 16./* 我們需要重寫Activity的相關方法,在此節程式碼中,我們只需要呼叫Android API  */ 17.public class MainActivity extends UnityPlayerActivity { 18. 19.//當前上下文 20.private Context mContext=null; 21. 22.@Override 23.protected void onCreate(Bundle savedInstanceState) { 24.super.onCreate(savedInstanceState); 25.//初始化上下文 26.mContext=this; 27.} 28. 29./* 定義一個呼叫Unity方法的方法 ,基於UnitySendMessage實現 。由於當前Activity沒有采用   */ 30./* Android的佈局檔案,所以我們無法使用Android的事件來完成這個方法的呼叫,我們  */ 31./* 採用Unity呼叫的方法,雖然這樣顯得捨近求遠,可是我們知道了如何在Android中呼叫   */ 32./* Unity中定義的方法   */ 33.public void InvokeUnity(String mStr) 34.{ 35.UnityPlayer.UnitySendMessage("Vabille","SetCameraColor"""); 36.} 37. 38./* 定義一個開啟Activity的方法,我們將在Unity中呼叫此方法 */ 39.public void StartWebView(String mUrl) 40.{ 41.

    相關推薦

    Unity3D]Unity3D遊戲開發UnityAndroid互動呼叫研究

    本文轉載自: http://blog.csdn.net/qinyuanpei/article/details/39348677    記得"仙劍之父“姚壯憲作為評委參加Unity亞洲區的比賽時曾經感慨道:"我學生時也是痴迷於自己不斷鑽研遊戲開發,從各種小遊戲和小工具做起,並

    Unity3D遊戲開發UnityAndroid互動呼叫研究

    各位朋友,大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是blog.csdn.net/qinyuanpei。在前一篇文章中,我們研究了Android平臺上Unity3D的手勢操作並在之前的基礎上實現了手勢旋轉、放縮等功能。今天呢,我們繼續來研究Unity在Android平臺上擴充套件的內容

    [Unity3D]Unity3D遊戲開發UnityAndroid互動呼叫研究

         各位朋友,大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是blog.csdn.net/qinyuanpei。在前一篇文章中,我們研究了Android平臺上Unity3D的手勢操作並在之前的基礎上實現了手勢旋轉、放縮等功能。今天呢,我們繼續來研究Unity

    Unity3D遊戲開發“重寫Unity Android Splash,實現啟動無黑屏”

    轉自:http://www.manew.com/thread-98428-1-1.html Splash設定相信搞unity的朋友都知道這個東西,就是遊戲啟動的時候的啟動畫面,在unity中如果不設定splash的話我們就能夠看到unity遊戲啟動的時候就會出現一張uni

    Android Unity3D遊戲開發躲避方塊

    開發環境 Window 7 Unity3D 3.4 MB525 defy  Android 2.1-update1        羽化的第四篇部落格,這次給大家送上自己初學Unity時寫的一個小遊戲Demo,我叫它“躲避方塊”,其實這個遊戲可以無限擴充套件,可以做成聯機

    android+unity3D遊戲開發音效播放

                    音效讓我們的遊戲更逼真,更有情調,呵呵,今天我們來播放一首賽車加速的音效吧。 首先先把我們的賽車音效加入到工程裡面(這個會吧,直接拖進去就行了); 然後就是新建一個javascript文字,指令碼程式碼如下: var oldboy:Audio

    【轉】【UNITY3D 遊戲開發五】Google-protobufFlatBuffers資料的序列化和反序列化

    ★protobuf有啥缺陷?前幾天剛剛在“光環效應 ”的帖子裡強調了“要同時評估優點和缺點”。所以俺最後再來批判一下這玩意兒的缺點。◇應用 不夠廣由於protobuf剛公佈沒多久,相比XML而言,protobuf還屬於初出茅廬。因此,在知名度、應用廣度等方面都遠不如XML。由於這個原因,假如你設計的系統需要提

    UNITY3D 遊戲開發五】Google-protobufFlatBuffers資料的序列化和反序列化

     關於Protobuf 通過本文的轉載和分享的相關連結,足夠了解使用了,所以這裡不贅述了。但是這裡Himi順便提一下“FlatBuffers” ,它是 Protocol Buffers升級版,其主要區別在於FlatBuffers在訪問資料前不需要解析/拆包這一步。

    Unity3D遊戲開發資料持久化PlayerPrefs的使用

    1、Unity3D中的資料持久化是以鍵值的形式儲存的,可以看作是一個字典。 2、Unity3D中值是通過鍵名來讀取的,當值不存在時,返回預設值。 目前,在Unity3D中只支援int、string、float三種資料型別的讀取,所以我們可以使用這三種資料型別來儲存簡單的資料。目前Unity3D中用於資料持

    Unity3D遊戲開發】materialsharedMaterial的區別 (三八)

    如果你需要修改模型材質的顏色,或者是修改材質Shader的一些屬性, 通常情況是用獲取模型的Renderer元件,然後獲取它的material屬性。 舉個簡單的例子,修改顏色或者直接更換shader material.color = Color.red; material.shader = Resources

    [Unity3D]Unity3D遊戲開發刀光劍影特效的實現

            我實在不明白有的人為什麼不喜歡武俠/仙俠類遊戲,或許是由於武俠/仙俠類遊戲身上被永遠烙上的國產標籤吧!博主最近在玩一部叫做《雨血》的遊戲,博主不禁感慨:在這樣一個流星蝴蝶不再閃爍、網遊成風、國產雙劍後續創新不足的後國產時代,居然還能夠有這樣一部再次讓博主熱血沸

    Unity3D遊戲開發如何減少安裝包大小

    第一步要做的就是:看看哪些檔案是最佔空間的,那麼它們就是首選優化物件了。 你可以在剛剛完成一次build之後在“Editor Log”中找到這些資訊。 如何開啟Editor Log: 在Mac上看起來就是這樣的了: 可以看出這份log提供了一份資源總括:各種型別資源

    Unity3D遊戲開發遊戲開發遇上Excel

    各位朋友,大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是http://blog.csdn.net/qinyuanpei。 今天我們的話題是Excel,作為常用的辦公軟體的Excel相信大家都不陌生啦。可是如果我們認為Excel只是辦公軟體的話,那

    [Unity3D]Unity3D遊戲開發Xml解析實現NPC對話系統

            各位朋友,大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是。今天我們來說說Unity3D中Xml的解析,為什麼要說Xml的解析呢?因為在專案中我們常常需要從外部讀取內容或者將內容以一定地形式儲存起來,而Xml就是我們最為常用的一種檔案形式。如圖所示

    Unity3D遊戲開發使用disunity提取Unity3D遊戲資源

    各位朋友,大家好,我是秦元培。今天博主想和分享的是使用disunity提取Unity3D遊戲素材。這個工具呢,博主在Unity3D遊戲開發之反編譯AssetBundle提取遊戲資源這篇文章中其實已經提到過了,不過因為有些朋友對如何使用這個工具依然存在問題,所以博

    Unity3D遊戲開發C++外掛接入

      各位朋友大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是http://qinyuanpei.com。雖然Unity3D引擎依靠強大的跨平臺能力睥睨高手林立的遊戲引擎世界,我們在使用Unity3D遊戲引擎的時候基本上不會去接觸底層的東西,可是有時候

    【轉】【UNITY3D 遊戲開發七】C# 中的委託、事件、匿名函式、Lambda 表示式

    "委託是一個類,它定義了方法的型別,使得可以將方法當作另一個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用If-Else(Switch)語句,同時使得程式具有更好的可擴充套件性。" from: http://www.himigame.com/

    [Unity3D]Unity3D遊戲開發滑鼠旋轉、縮放實現3D物品展示

    各位朋友,大家好,我是秦元培,歡迎大家關注我的博主,我的部落格地址是blog.csdn.net/qinyuanpei。最近博主重點研究了攝像機旋轉、縮放等問題,那麼今天為大家分享的是一個在3D展示中比較常用的功能,即通過滑鼠右鍵實現旋轉、滑鼠滾輪實現縮放、滑鼠中鍵實現平移

    Unity3D遊戲開發SQLite讓資料庫開發更簡單

    各位朋友大家好,歡迎大家關注我的部落格,我是秦元培,我是部落格地址是http://blog.csdn.net/qinyuanpei。在經歷了一段時間的忙碌後,博主終於有時間來研究新的東西啦,今天部落格向和大家一起交流的內容是在Unity3D遊戲開發中使用SQLi

    Unity3D遊戲開發虛擬現實專案開發流程

    一、系統設計與資料的收集與整理 與專案投資單位溝通並進行系統設計; 收集整理規劃圖、效果圖、現場照片; 拍攝比干文化及景區介紹的專題片; 撰寫並錄製解說詞; 二、製作三維模型 主要使用三維建模軟體3dsmax的多邊形建模技術,實現三維場景模型的製作,主