導航:首頁 > 操作系統 > unityandroid

unityandroid

發布時間:2022-01-19 12:02:42

1. unity editor 和UNITY_android有哪些差別

你是問開發環境?開發時差別不大,資源格式會根據平台調整,預編譯平台依賴會起作用,一些shader渲染也有改變,烘焙顯示也是,整體來說,區別不大,你可以忽略。。。

2. 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的視圖。

3. 如何用unity3d發布android

unity3d是一個跨平台的游戲開發引擎,可以使用c#開發各種平台上的游戲,如windows,Mac,Android,windows phone,IOS,Flash等。下面說下如何將開發好的unity3d游戲發布到Android手機上
1.安裝unity3d
這是官網下載地址,這里能下載到最新版本的unity3d:http://unity3d.com/unity/download,安裝的話一路默認就行
2.安裝java sdk和Android sdk
unity3d中使用c#編寫的代碼如何才能在android手機上運行呢,答案是壓根就不能運行,unity3d通過mono框架將c#代碼轉換成Android代碼,所以若想發布Android程序,就需要安裝Android sdk,而Android又是基於java運行環境的,所以也需要安裝java sdk,下面附上下載地址。java sdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html;Android sdk下載地址:http://developer.android.com/sdk/index.html
java sdk的安裝一路默認就好,默認路徑為C:\Program Files (x86)\Java。
Androi sdk下載完畢後,解壓,然後運行SDK Manager.exe,在彈出的界面中勾選需要的內容

附上出處鏈接:http://blog.csdn.net/mynewdays/article/details/17932479

4. unity 4.6.7 支持哪些android平台

從unity4.6版本開始,unity已經對Android系統支持x86平台的編譯構建了,同時也支持了通用二進制 (通用二進製作為默認的編譯選項)。
大家都知道,目前市面上主流的Android設備主要是armeabi,armeabiv7a和x86平台,對於獨立CPU平台的支持有助於程序在該平台的運算和優化。下面簡單介紹一下如何配置。
1.打開unity項目
2.單擊unity菜單欄的File->build settings

3.在彈出的設置彈框中選擇Android,然後點擊"player setting"

4.在inspector視圖下的Other Settings框內,即可找到Device Filter,選擇x86,則最終構建出來x86平台的APK包,unity android配置和之前版本完全一樣,這里就不再贅述了。

如此,我們就完成了unity for android x86平台的配置了,如果想同時支持x86和armeabi平台,在device filter 中選擇(FAT AR Mv7+X86)即可。

5. unity可以用c#開發,那麼怎麼移植到android上的

為了實現交互,我們採用的是簡單的函數相互調用。如果我們在Unity3D中想調用Android代碼,那麼可以在腳本文件C#中這樣寫:
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity"); activity.Call("UnlockGame")

第一行代碼構造了"com.unity3d.player.UnityPlayer"類的一個對象,然後獲取了本類的靜態成員"currentActivity",取得了activity就可以調用Android代碼了(如果你在Unity導出的Eclipse工程中查看unity-class.jar這個文件中的類,你會發現com.unity3d.player這個package下就有UnityPlayer.class這個類,這個類中有個currentActivity)。這個UnlockGame函數是簡單的成員方法,一般直接寫在MainActivity中,也就是說Android代碼中必須要有UnlockGame這個函數,然後才能調用;而"com.unity3d.player.UnityPlayer"和"currentActivity"都是默認的參數。
如果要在Android工程中調用Unity3D中的方法,我們需要新建一個Android工程。可以這樣寫java代碼:
UnityPlayer.UnitySendMessage("AndroidManager", "AndroidCallBackUnlockGame", "");

這里調用了Unity3D中"AndroidCallBackUnlockGame"這個方法,最終激活了游戲。第一個參數表示Unity3D中某個gameObject,第二個參數是這個gameObject上的腳本中的某個方法,第三個參數是這個方法的參數。
上面只是講述了交互的基本原理,下面是詳細步驟。
(1)在Unity3D中創建腳本,如上面第一段代碼所示,加入調用Android函數的代碼;如果Android要調用C#代碼,也要寫下被Android代碼回調的C#函數。然後,把Unity項目導出為Android工程即可。這里需要注意下圖紅色部分,其中Bundle Identifier就是導出的Android工程的包名。
(2)打開Eclipse,導入工程,選擇import->Existing Android Code Into Workspace,最好把Copy Into WorkSpace選項也選上,這個工程通常叫做「UnityPlayerProxyActivity」。導入工程後,我們可以直接運行這個工程了。但這里是為了與Android代碼交互,所以還不能這樣做。通常的方法是,我們新建一個Android Application Project,包名必須與導入的工程包名相同;然後把導入的工程作為新工程的Library Project,在工程的Properties里設置
(3)將導入的Unity工程assets目錄里的bin和libs目錄(新版的沒有lib目錄)拖放到新工程的assets目錄里,即移動資源位置而已。說明一點,新建的Android工程作為了主工程,導入的Unity工程作為了Library Project,它們的Assets和Res資源將會最終合並在一起,但主工程必須要添加Library工程中所有需要的配置信息,也就是AndroidManifest.xml中的內容。這里還可能遇到資源ID沖突的現象,優先順序高的主工程將覆蓋優先順序低的工程。
(4)好了,現在我們有兩個工程,一個是新建的,一個是從Unity3D中導入的。這里必須學點Android開發的基礎知識,onCreate函數是入口函數,其它的自學吧。想在Android里調用Unity3D代碼,就用本文開頭的第二段代碼即可。通常,我們在新工程里創建一個Activity,在AndroidManifest.xml里進行設置要啟動的Activity。假設要啟動的是MainActivity,那麼對於MainActivity這個類,我們要讓它繼承UnityPlayerActivity這個類,然後在Oncreate里調用super.onCreate即可。然後,運行新工程,我們的Unity3D游戲也跟著啟動了。我們的主工程是新建的,沒有設置任何視圖,之所以啟動了游戲,是因為繼承了UnityPlayerActivity這個類,然後調用super.onCreate通過父類啟動了游戲。

6. 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

7. unity3d 怎樣發布android程序

1、下載安卓的SDK包。

2、打開Unity3d,點擊Edit里的Preferences,彈出如圖所示數據框,點擊第二項External Tools,將下邊Android SDK location的路徑指向下載的Android SDK。

3、在Unity3d中建好場景後點擊File->Building settings,選擇Android版本。

4、點擊player settings,找到Identification,將其中的 com.compan.ProctName的compan隨便做改動,比如去掉一個字母。

5、最後點擊Building,將會生成Android。

8. unity3d與android交互的sdk怎麼接

1、打開Android Studio——>configure——Android SDK。

注意事項:

SDK可能附帶了使其不能在不兼容的許可證下開發軟體的許可證。例如產品供應商提供一個專有的SDK可能與自由軟體開發抵觸。

9. unity3d android build and running時出現如下所示的提示,不知怎麼回事

可能是沒有安卓SDK(比較大的那個),或者導入安卓ADK文件夾不正確(要用SDK的根目錄)

10. 怎麼運行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

閱讀全文

與unityandroid相關的資料

熱點內容
哪個app可以聽小說 瀏覽:158
網路發送數據如何加密 瀏覽:201
教材完全解讀pdf 瀏覽:820
什麼是多台伺服器 瀏覽:36
菜鳥音樂編輯app哪個好 瀏覽:547
人工魚群演算法matlab 瀏覽:82
演算法coursera 瀏覽:124
濰坊諸城DNS伺服器地址聯通 瀏覽:10
共享文件夾不顯示任務欄 瀏覽:251
唱歌給黨聽是哪個app的活動 瀏覽:499
bp演算法源代碼 瀏覽:648
發票伺服器怎麼選 瀏覽:387
哪個app陪伴運動 瀏覽:882
學編程每天六點起床 瀏覽:954
烏鴉搜索演算法復現 瀏覽:77
android3d切換 瀏覽:751
資源管理器選定文件夾 瀏覽:989
分數公約數的演算法 瀏覽:589
yii2引入php文件 瀏覽:564
華為p20方舟編譯器評測 瀏覽:187