㈠ unity3d怎麼打包android
方法原理倒是很簡單,通過對比Unity打包的apk,與普通的Android apk的文件差別,找出Unity文件存放的目錄,隨後對應存放到Android studio工程目錄中,最後通過Android studio完成對Unity相關文件的打包。
首先將apk添加zip的後綴,方便用beyond compare進行對比:
1. 發現只是多了assert/bin目錄,在這個目錄之下,可以看到unity相關dll庫 ;
2. 將該文件,拷貝到Android studio工程的src/main/assert目錄之下;
3. 在Android studio調試時,可以將aar library工程設置為app工程,這樣就可以編譯apk運行到手機了;
4. 用Android studio對該工程進行編譯,發現assert/bin目錄成功被打包進去;
5. 直接apk install 運行,可以看到跟Unity編譯打包的apk,是相同的效果;
㈡ 如何使用Unity製作Android游戲
第一步先搭建環境
1,下載安裝java的JDK:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
(JDK中,包含JRE)
如果是64位的系統,推薦安裝64位的java。
2,下載安裝Android Studio,生成 Android SDK:
Google已經逐步轉向Android studio了,我也比較推薦用這種來開發。
ps. 2014年剛寫這篇文章的時候,用的是Android studio 1.0.0 的版本,現在(2017-03-10)已經是2.3了,並且老的ADT方式,已經被廢棄了…………所以本文也與時俱進,刪除了ADT方式的配置。
國內有不少鏡像源(現在連網路軟體里都有了),貼兩個下載地址:
官方下載地址:
https://developer.android.com/studio/index.html
國內社區:
http://www.android-studio.org/
安裝時,分開裝【Android studio】和【Android SDK】,
3,更新(管理)SDK:
默認安裝的包,是跟包一起發布的(一般只包含最新的SDK),所以,可以根據開發需要,下載所需的老舊SDK包:
【windows】-->【Android SDK Manager】,打開SDK管理器(也可以點擊菜單欄上的圖標)
打開後,會發現有如下幾種狀態:未安裝(Not installed)、已安裝(Installed)、可更新。在前面的復選框里,勾選你需要的包,然後 install即可。
這里,我要開發支持Android4.2.2的游戲,下載的就是 Android 4.2.2(API 17),如下圖所示。
附註A:
SDK包代表的意思:
Documentationfor Android SDK:Android的SDK文檔,一般在最新的API里才有。
SDK Platform: Android的SDK套件
Samples for SDK: SDK的使用例子,在\sdk\samples目錄中會看到對應文件
ARM EABI v7a System Image:這是一個核心鏡像,提供對NDK使用的支持。是創建模擬器需要的文件
Intel Atom x86 System Image:支持x86的Android模擬器。創建模擬器需要的文件
MIPS System Image : MIPS系統(處理器)的核心鏡像,創建模擬器需要的文件
Google APIs:谷歌地圖提供的一套API
Sources for Android SDK:SDK的源碼,在\sdk\sources目錄中會看到對應文件夾,比如:android-17
4,讓unity與JDK、SDK、NDK關聯
啟動unity,選擇【Edit】-->【Preferences】-->【External Tools】,在彈出的對話框中,選擇【Android SDK Location】,【Browse..】指定 Android SDK 的位置,使unity與 Android SDK 關聯。
注意,SDK, 和JDK是必須的,NDK非必須。設置好JDK和SDK就可以出包了,目前是這樣。
NDK需要去安卓官網進行下載:
https://developer.android.com/ndk/downloads/index.html
---------------如果只想Build出APK包,那麼上邊的步驟就可以了,下面的不用了------------------------
5,安裝Android設備驅動
打開Eclipse,然後打開Android SDK Manager,確保【Google USB Driver 】已經安裝。如果沒安裝,就自己勾選,安裝一下,否則會爆出找不到安卓設備的錯誤。
6,連接手機
插好USB數據線,打開手機的USB調試模式(Android版本不同,打開方式略有不同)。【設置】-->【開發人員選項】-->【USB調試】
如果是win7系統,那麼點擊:【開始】-->【設備和列印機】 ,找到【Android】設備。正常情況(驅動完好,可以連接),是下圖這樣:
ps.如果在【Android】設備上出現嘆號,那麼右鍵【屬性】-->【更新驅動程序】。指定文件夾,比如我的是:D:\ptools\android_SDK\sdk\extras\google\usb_driver。
如果還是有黃色嘆號,也可以用個更絕的辦法:用360手機助手,或者QQ手機助手之類的工具。這些工具會自動安裝安卓的USB調試驅動。
完成環境搭建
至此,unity的Android環境,搭建完畢!希望可以幫助到你 有想要的unity插件到http://www.narkii.com/club/去找 上面有很多
㈢ unity怎麼調用android
方法/步驟
1
首先我們要創建一個android項目
步驟閱讀
2
因為項目需要使用Unity提供的介面,所以需要將介面classes.jar引入至當前工程但中。介麵包的所在地,打開Finder->應用程序->Unity->點擊Unity圖標,滑鼠右鍵選擇「顯示包內容」->Contents->PlaybackEngines->AndroidPlayer->bin->classes.jar
。介麵包引入工程後,開始編寫JAVA代碼。
3
UnityTestActivity是主Activity,Unity程序一起動就會調用這個Activity,它是在AndroidManifest.xml中配置的。它需要繼承UnityPlayerActivity,然而它就是剛剛我們引入的classes.jar包中提供的介面類。UnityTestActivity對外提供了兩個方法介面,StartActivity0(String
name) 方法與StartActivity1(String
name)方法,這兩個方法是在Unity中使用C#腳本調用的,意思是調用後程序將打開一個新的Activity,參數name也是由C#腳本傳遞過來的,接著將傳遞的String參數繼續傳遞給新打開的Activity。
步驟閱讀
4
接下來就是設置xml文件和布局文件了。對於會android編程的同學就很熟悉了。
5
把寫好的java代碼發布成jar包。接下來就創建unity工程,Unity工程中文件夾的結構如下,Plugins->Android的名稱不能修改,必需保持一致。接著把Eclipse中Android的工程文件拷貝至這里,除了Android工程中的src文件夾,將其它文件夾全部拷貝至Plugins->Android文件夾中。最後在Plugins->Android文件夾中創建bin文件夾,然後將剛剛生成的.jar文件拷貝進來,jar的名稱可以隨便修改,但是jar包裡面必須是com->xys->你的class文件,否則運行程序後提示找不到類文件。
步驟閱讀
6
接下來就是如何在C#中調用android的方法的代碼了。
加入如下代碼。
AndroidJavaClass jc = new
AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo =
jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("StartActivity0","第一個Activity");
先得到AndroidJavaClass,然後得到AndroidjavaObject就是當前Activity的對象,也就是我們在上面創建的主UnityTestActivity.JAVA。拿到它的對象後調用jo.Call()參數1表示調用UnityTestActivity.JAVA類中的方法名稱,參數2表示該方法傳遞過去的參數。如下圖所示:「第一個Activity」與「第二個Activit」就是我在C#中傳遞過去的字元串。
7
發布成android平台apk
㈣ 用UNITY3D開發android游戲要學習什麼
你可以先去【繪學霸】網站找「游戲特效/unity3D」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=305,306&zdhhr-11y17r-560576480037136404
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】:
www.cgwang.com/course/gecoursemobilecheck/?zdhhr-11y17r-560576480037136404
在「游戲特效/unity3D」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
㈤ 如何在unity中生成android工程
最近使用unity開發android程序,但是如何能夠生成android工程,並且結合android sdk 一起開發,下面就給大家講解一下:
首先在unitu界面之下選擇file下拉菜單中的BuildSettings,然後在BuildSettings中點擊addCurrent添加場景如圖:
打開android eclipse 導入生成的android工程,就可以運行在android手機上了!有想要了解更多的unity插件,可以到納金論壇上去找 希望可以幫助到你
㈥ Unity打包安卓版本與手機安卓版本不一致會怎樣
一般導出設置會讓你設置最低android版本和目標版本,手機上的android版本低於你設置的最低版本在不能安裝。要是你的手機android版本高於你導出設置的最低版本,則正常運行。但是你設置的目標版本低於你手機android版本,運行也基本沒問題,但是一些高版本的新特性你的這個應用是不能享受的。也就是沒有新特性功能。
㈦ unity怎麼打開unity做的安卓程序,急急急
unity不能打開apk,如果想要提取apk里的資源,可以先解壓apk後使用資源提取器(網上可以搜到),前提是該APK沒有進行加密;
㈧ unity3d與android交互的sdk怎麼接
1、打開Android Studio——>configure——Android SDK。
注意事項:
SDK可能附帶了使其不能在不兼容的許可證下開發軟體的許可證。例如產品供應商提供一個專有的SDK可能與自由軟體開發抵觸。
㈨ 如何將unity模型導入android程序中
1.Android端代碼可以在Eclipse中開發(AndroidStudio沒有試,應該也可以)
2.Unity3D端代碼要在Unity中開發
3.Android和Unity3D端,兩邊都需要加入一些代碼從而可以使之關聯交互。
4.將Android端代碼編譯成jar文件以插件形式放入到Unity端中
5.在Unity中將整個項目Build成apk文件,然後安裝到手機或模擬器里運行
本文主要講解1,2,3。對於4,5建議大家去看雨松MOMO的Unity博客的第17篇和第18篇。
UnityPlay:
在編寫Android端和Unity3d端代碼前,有必要先了解一下可以使兩部分交互的類UnityPlay。
個人理解UnityPlay是個Unity提供給外部交互的一個介面類。
為什麼是「個人理解」?這我不得不爆粗口了,TMD官網根本就沒有相關的API和文檔(如果大家有誰找到一定給我來一份,就當我罵自己了)。
在關聯Android時,想拿到UnityPlay以及相關類的jar包可以從下面的地址找到:Unity安裝路徑\Editor\Data\PlaybackEngines\androidplayer\bin在bin文件夾下有一個classes.jar的jar文件,它就是我們想要的。
而在bin同目錄下有一個src文件,點擊到最後有3個類,分別是UnityPlayerActivity.java,UnityPlayerProxyActivity.java,UnityPlayerNativeActivity.java。前兩個打開個後只有一行代碼,說的是UnityPlayerActivity和UnityPlayerProxyActivity都繼承自UnityPlayerNativeActivity。而打開UnityPlayerNativeActivity中居然有代碼,而且我估計這應該是UnityPlayerNativeActivity的源碼。
由於關於UnityPlay的資料我只找到這么一個,所以我把UnityPlayerNativeActivity中的代碼都貼出來,如果我註解有不對的地方希望大家指正。
/**
* UnityPlayerActivity,UnityPlayerProxyActivity都繼承自UnityPlayerNativeActivity
* 而UnityPlayerNativeActivity繼承自NativeActivity
* 在該類里定義了一些和ANDROID生命周期相同的回調方法,留給自定義的Activity子類重寫。
*/
public class UnityPlayerNativeActivity extends NativeActivity
{
//UnityPlayer的引用,並且我們不能改變這個引用變數的名字,它被native code所引用
protected UnityPlayer mUnityPlayer;
protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
// 設置顯示窗口參數
getWindow().takeSurface(null);
setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
getWindow().setFormat(PixelFormat.RGB_565);
// 創建一個UnityPlayer對象,並賦值給全局的引用變數
mUnityPlayer = new UnityPlayer(this);
//為UnityPlayer設置一些參數
if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1);
boolean trueColor8888 = false;
// UnityPlayer.init()方法需要在將view附加到layout之前調用。它將會調用native code
mUnityPlayer.init(glesMode, trueColor8888);
// 從UnityPlayer中獲取到Unity的View視圖
View playerView = mUnityPlayer.getView();
// 將Unity視圖載入到根視圖上
setContentView(playerView);
// 使Unity視圖獲取焦點
playerView.requestFocus();
}
protected void onDestroy ()
{
// 當Activity結束的時候調用UnityPlayer.quit()方法,它會卸載之前調用的native code
mUnityPlayer.quit();
super.onDestroy();
}
// 下面幾個方法都是ANDROID相關回調方法,確保在ANDROID執行相應方法時UnityPlayer也需調用相應方法
protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mUnityPlayer.configurationChanged(newConfig);
}
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
mUnityPlayer.windowFocusChanged(hasFocus);
}
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.onKeyMultiple(event.getKeyCode(), event.getRepeatCount(), event);
return super.dispatchKeyEvent(event);
}
}
看完這個類後就知道了為什麼在自定義的Activity中繼承了UnityPlayerActivity等類以後,只要重寫了onCreate並調用super.onCreate()方法後不需要任何其他的代碼就會自動的顯示出Unity3D的視圖。因為初始化Unity視圖的代碼都在UnityPlayerNativeActivity父類中實現了。
ANDROID端代碼:
在寫ANDROID代碼的時候,一定要導入Unity3D提供給我們的jar包,jar包的位置我在上面說了。引入jar包加入到buildpath中這些最基本的我就不多說了。
要想和Unity交互,我們就不能繼承ANDROID提供給我們的Activity,我們需要繼承剛才jar包中引入的Unity提供的Activity類,一共有這么3個:
UnityPlayerActivity,UnityPlayerProxyActivity,UnityPlayerNativeActivity。具體區別不知道,因為沒有文檔,沒有API,沒有源碼(這里再次鄙視一下)。剛才我們看過UnityPlayerNativeActivity的代碼(雖然很短,但我覺得這個就是源碼),知道UnityPlayerActivity,UnityPlayerProxyActivity都是它的子類,而且最終父類為NativeActivity。所以我們繼承Unity提供的最外層的子類是最好的選擇,我這里選擇的是UnityPlayerActivity,因為名字最簡單,覺得該封裝的都應該封裝好了。
public class MainActivity extends UnityPlayerActivity {
private Button topButton;
private Button bottomButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 設置test為我們的根布局
setContentView(R.layout.test);
// 通過剛才的源碼分析,知道mUnityPlayer為一個全局的引用變數,而且已經在父類中設置好了,所以直接拿來用就可以了
View playerView = mUnityPlayer.getView();
// 將Unity的視圖添加到我們為其准備的父容器中
LinearLayout ll = (LinearLayout) findViewById(R.id.unityViewLyaout);
ll.addView(playerView);
// 上面的button設置監聽器
topButton = (Button) findViewById(R.id.topButton);
topButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//發送消息給Unity端,該函數第一個參數為接受消息的類對象,第二個該類對象用接受消息的方法,第三個參數為傳遞的消息
//所以下面的意思就為:調用Main Camera下面的Previous方法,傳送的消息為空
UnityPlayer.UnitySendMessage("Main Camera","Previous","");
}
});
// 為下面的button設置監聽器
bottomButton = (Button) findViewById(R.id.bottomBtn);
bottomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//調用Main Camera下面的Next方法,傳送的消息為空
UnityPlayer.UnitySendMessage("Main Camera","Next","");
}
});
}
}
最後看一下Android端的布局文件,布局很簡單,上下各有一個button按鈕,兩個按鈕中間是Unity的視圖。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/topButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="PREVIOUS" />
<LinearLayout
android:id="@+id/unityViewLyaout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomBtn"
android:layout_below="@+id/topButton"
android:orientation="horizontal" >
</LinearLayout>
<Button
android:id="@+id/bottomBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="NEXT" />
</RelativeLayout>
Android端的代碼就介紹完了,很簡單。唯一的難點就是UnityPlayerActivity和UnityPlayer的使用。
㈩ unity工程是怎麼在android上運行的
首先我們要創建一個android項目 因為項目需要使用Unity提供的介面,所以需要將介面classes.jar引入至當前工程但中。介麵包的所在地,打開Finder->應用程序->Unity->點擊Unity圖標,滑鼠右鍵選擇「顯示包內容」->Contents->PlaybackEngines->AndroidPlayer->bin->classes.jar 。介麵包引入工程後,開始編寫JAVA代碼。 UnityTestActivity是主Activity,Unity程序一起動就會調用這個Activity,它是在AndroidManifest.xml中配置的。它需要繼承UnityPlayerActivity,然而它就是剛剛我們引入的classes.jar包中提供的介面類。UnityTestActivity對外提供了兩個方法介面,StartActivity0(String name) 方法與StartActivity1(String name)方法,這兩個方法是在Unity中使用C#腳本調用的,意思是調用後程序將打開一個新的Activity,參數name也是由C#腳本傳遞過來的,接著將傳遞的String參數繼續傳遞給新打開的Activity。 接下來就是設置xml文件和布局文件了。對於會android編程的同學就很熟悉了。 把寫好的java代碼發布成jar包。接下來就創建unity工程,Unity工程中文件夾的結構如下,Plugins->Android的名稱不能修改,必需保持一致。接著把Eclipse中Android的工程文件拷貝至這里,除了Android工程中的src文件夾,將其它文件夾全部拷貝至Plugins->Android文件夾中。最後在Plugins->Android文件夾中創建bin文件夾,然後將剛剛生成的.jar文件拷貝進來,jar的名稱可以隨便修改,但是jar包裡面必須是com->xys->你的class文件,否則運行程序後提示找不到類文件。 接下來就是如何在C#中調用android的方法的代碼了。 加入如下代碼。 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("StartActivity0","第一個Activity"); 先得到AndroidJavaClass,然後得到AndroidjavaObject就是當前Activity的對象,也就是我們在上面創建的主UnityTestActivity.JAVA。拿到它的對象後調用jo.Call()參數1表示調用UnityTestActivity.JAVA類中的方法名稱,參數2表示該方法傳遞過去的參數。如下圖所示:「第一個Activity」與「第二個Activit」就是我在C#中傳遞過去的字元串。 7 發布成android平台apk