Ⅰ 用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
Ⅱ 如何進行Unity3D與Android消息傳遞
1.Unity工程導出為Android Studio工程
(我個人用的U3D版本是5.1.1,已經支持直接將Unity工程導出為AS工程了,以前的版本我不敢保證.)
首先你要寫好Unity工程裡面的腳本,包括你希望Android調用的方法和調用Android方法的方法,這個在下面會有詳細敘述;接下來導出AS工程,方法是:
File裡面的Build Settings -> 平台選擇Android,在Player Setting裡面設置API版本和包名(包名很重要) -> 點擊Build Setting中的Google Android Project復選框 -> Export
2. AS打開導出的工程
首先隨便打開一個AS工程,然後FIle -> New -> Import Project -> 選剛才導出來的工程 -> 等待Gradle -> 以此工程為基礎繼續開發Android代碼
Ⅲ unity3d android怎麼調試
目前貌似不支持斷點調試,但可以通過日誌列印(logcat)來跟蹤。
在Android SDK中有個adb工具,使用此工具來跟蹤運行的android應用:
adb logcat
啟動logcat,並將設備上運行的Android應用的運行時信息全部列印出來。
adb logcat -s Unity
如果只想列印Unity的輸出信息,使用此命令。
adb logcat -d > logcat.txt
將列印信息輸出為文件。
當然,更直接的做法是在應用中集成自己的調試信息窗口,將如下代碼關聯到一個gameobject:
using UnityEngine;
using System.Collections;</p><p>public class GuiTextDebug : MonoBehaviour
{
private float windowPosition = -440.0f;
private int positionCheck = 2;
private static string windowText = "";
private Vector2 scrollViewVector = Vector2.zero;
private GUIStyle debugBoxStyle;
private float leftSide = 0.0f;
private float debugWidth = 420.0f;
public bool debugIsOn = false;
public static void debug(string newString)
{
windowText = newString + " " + windowText;
UnityEngine.Debug.Log(newString);
}
void Start()
{
debugBoxStyle = new GUIStyle();
debugBoxStyle.alignment = TextAnchor.UpperLeft;
leftSide = 120;
}
void OnGUI()
{
if (debugIsOn)
{
GUI.depth = 0;
GUI.BeginGroup(new Rect(windowPosition, 40.0f, leftSide, 200.0f));
scrollViewVector = GUI.BeginScrollView(new Rect (0, 0.0f, debugWidth, 200.0f),
scrollViewVector,
new Rect (0.0f, 0.0f, 400.0f, 2000.0f));
GUI.Box(new Rect(0, 0.0f, debugWidth - 20.0f, 2000.0f), windowText, debugBoxStyle);
GUI.EndScrollView();
GUI.EndGroup ();
if (GUI.Button(new Rect(leftSide, 0.0f,75.0f,40.0f), "調試"))
{
if (positionCheck == 1)
{
windowPosition = -440.0f;
positionCheck = 2;
}
else
{
windowPosition = leftSide;
positionCheck = 1;
}
}
if (GUI.Button(new Rect(leftSide + 80f,0.0f,75.0f,40.0f),"清除"))
{
windowText = "";
}
}
}
}
Ⅳ 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,是相同的效果;
Ⅳ 怎樣用Android開發Unity3D游戲
開發環境
Window 7
Unity3D 3.3.0
MB525 defy Android 2.1-update1
本次學習:
1.認識Unity
2.Unity3D環境搭建與Android軟體生成
3.Unity3D基本使用方法
1.認識Unity3D
Unity3D是一個讓開發者能夠在多平台製作同一款游戲的游戲開發工具,有專業的圖像處理和游戲引擎,能做出各式各樣的游戲。
羽化以前認為Android游戲開發只能在Eclipse
裡面死活敲代碼,也許是自己閱歷不夠,不知道游戲引擎能給游戲開發帶來如此大的便利,無論是3D游戲還是2D游戲都可以用Unity3D開發而且轉成
IPHONE游戲也很簡單,因為Unity3D很多移動開發功能IPHONE與Android是共用的,其中最主要的控制器就是一樣的,這樣我們就基本上
告別Eclipse了。。。
由於Unity3D裡面的腳本是用C#或者java
Script寫的,學習過這兩個語言最好,不會也沒關系,還可以學嘛(和羽化一樣),其實C#和JS與Java類似,看起來不會那麼陌生,要注意的是JS
中無論什麼變數聲明都是」var」表示,這點對於聲明經常出錯的羽化來說很好-0-
2. Unity3D環境搭建與Android軟體生成方法
這里給大家介紹兩個網站,在裡面可以下載到最新的UnitySetup-3.3.0包括破解補丁U3v3.3.0f4_Win和腳本編輯器
UnityScriptEditor2.55,還有很多學習資料,包括羽化正在學的Unity視頻教程(全英文啊=。=),還有全中文幫助文檔,雖然現在
資料很少,但可以看出Unity3D越來越給力中。。。
http://3d.ceeger.com/ Unity3D中文幫助文檔
http://www.u3dpro.com/ Unity3D專業論壇
安裝過程就不詳細寫了,很簡單的。這里要注意的是,安裝的系統用戶名不要是中文的,要不打開Unity3D以後Scene裡面看不到東西,這是羽化的切生體驗- -。
1)第一次打開Unity3D後會出現創建Project的界面,這就和Eclipse創建項目一樣的道理,這時候可以添加一些插件包,這步操作羽化留在了軟體打開後。
2)新建以後就出現了開發界面,這里簡單介紹下:
Scene 開發視圖:裡面可以拖拽物體位置、改變大小、旋轉角度等,是開發中最常的地方。
Game 游戲視圖:點上面的運行以後游戲就會在Game視圖裡面運行,沒點的時候可以看到攝像機當前的圖像。
Hierarchy 層試圖:放置游戲物件,在游戲運行時可以觀察游戲物件變化
Project 工程視圖:裡面可以新建文件夾管理腳本,渲染,圖片等。
Inspector 檢查視圖:顯示物件屬性等
最下面一條,一般情況下不會顯示東西,如果出錯或者列印語句都是顯示在下面:
先不管那麼多,生成個Android軟體再說。
3)在Project裡面右擊 ——〉 Import Package ——〉 Standard
Assets(Mobile)這是移動開發的包,全部Import導入吧。再在Project裡面選中導入的Standard
Assets(Mobile)———〉Control
Setups——〉CameraRelativeSetup,這會提示保存Scene,我們就保存一個,可以看到Project裡面多了一個我們保存的
Scene,游戲運行就是從Scene開始,這時應該可以看到這個包的顯示了。一眼就看出這是一個演示控制器的包,這個時候我們就不管這個工作原理,先放
在Android手機裡面看看效果。
4)點擊左上角的File菜單——〉Build Settings——〉選中Android——〉右邊Development
Build勾打上——〉點擊下面Player Settings,這時在Insperctor視圖裡面可以看到一些基本設定,第一個Resolution
and Presentation是游戲視圖設定,橫屏還是豎屏隨你可以默認它,點擊Other
Settings,這里主要設置Identification這個屬性,裡面第一個相當於項目包,這個一定不能默認,自己隨便寫個名字比如羽化就是
com.LB.first其他設定大家可以自己研究,對於生成這個軟體,這步必須改。
5)然後回到窗口點擊Build,這里第一次點會跳出一個選中Android SDK的路徑,大家都懂的,自己放哪的選哪,確定後,輸入一個apk的名字,就叫作LB,如果發生什麼錯誤,可以看看下面的提示。
6)軟體已經生成好了後就可以丟到手機裡面安裝試試了,你可以直接丟在SD卡裡面安裝,這里羽化給大家介紹個簡單的方法,對於模擬器還是真機都適用,首先
設置環境變數,在Path裡面添加如羽化自己目錄的D:android-sdk-windowsplatform-tools,這樣就可以在命令控制台里
面打命令了,比如羽化安裝的命令是cd C:UsersLiBeiDocumentsLB先到apk目錄下,再輸入adb install
LB.apk這里要注意若你原來安裝過相同名字軟體,先卸載了再裝。
7)實際運行效果左搖桿是控制位移,右搖桿是控制方向:
步驟看起很多,其實很簡單。
3.Unity3D基本使用方法
這里羽化推薦大家看看視頻,看視頻學起來得很快,羽化就講講自己照視頻做的例子,解壓後可以通過Open Project選項打開這個例子,選中Scene裡面的Scene1打開,運行是在電腦上。
1)場景創建
全是Cube搭建的,看一眼就知道了,Cube可以在上方Gameobject——〉create
other裡面創建,也點擊Hierarchy層視圖下面的Create創建,位置調整可以在Scene裡面通過左上角的物件選項慢慢調整,第一個是觀
察,第二個是調整位置,第三個是調整角度,第四個調整大小。
2)主視角
這里主視角是用Standard Assets(這要自己導入)——〉Character Controllers——〉First Person
Controller 可以看到這里能直接用的物件其實都是Prefab預設。這里可以看天空,其實是運用了Skybox組件,選中Main
Camera可以在菜單中Component——〉Rendering——〉Skybox。
3)光
若無光運行的時候漆黑一片,這里放了個Point Light點光,數值可自行調整,添加和Cube一樣。
4)腳本
腳本放在Scripts文件夾下,裡面Door是控制門開關,Shoot是滑鼠點擊事件,Respawn是墜落返原地。注意這里腳本寫好以後要拖到對應物體上才能運行。
5)動畫
開門其實是個動畫,創建在Component——〉Miscellaneous ——〉Animation
6)火焰
火焰是粒子產生的,粒子創建和Cube類似,Particle System裡面的數值要做相應調整就會有火焰效果了。
再介紹幾個Component裡面重要的組件
1)Rigidbody 剛體
剛體顧名思義,有重量,帶碰撞都是剛體的屬性,若你為一個物件添加這個組件,證明你需要前面這幾個屬性。
2)Character 人物
其實裡面放的都是控制視角或者是主角操作的腳本。
3)Trail Renderer 路徑渲染器
很有用的組件,可以看到自己走過的路徑,論壇上有個切水果刀光的例子就是用到它。
Ⅵ 如何進行Unity3D與Android消息傳遞
1.Unity工程導出為Android Studio工程
首先你要寫好Unity工程裡面的腳本,包括你希望Android調用的方法和調用Android方法的方法,這個在下面會有詳細敘述;接下來導出AS工程,方法是:
File裡面的Build Settings -> 平台選擇Android,在Player Setting裡面設置API版本和包名(包名很重要) -> 點擊Build Setting中的Google Android Project復選框 -> Export
2. AS打開導出的工程
首先隨便打開一個AS工程,然後FIle -> New -> Import Project -> 選剛才導出來的工程 -> 等待Gradle -> 以此工程為基礎繼續開發Android代碼
3. Android 調用 Unity 腳本中的方法
這里首先對Unity腳本進行一點說明,以C#為例:
在OnStart()裡面要寫入
this.name = "A"
某個你要調用的方法設置為public類型,名稱為B,參數為C
在一個Extend UnityPlayerActivity的Activity里,直接使用
UnityPlayer.UnitySendMessage("A","B","C");
就可以調用腳本中的方法了.
4.Unity腳本調用Android方法
首先你要知道的是,在Unity腳本里寫調用安卓方法的時候,這個方法還不需要存在,你也不需要把安卓的代碼壓成jar包放進Unity工程.
剛說過的導出工程時候的包名很重要,假設是com.hu.solare;再假設在工程被導入到AS後,你在這個包中編寫了MainActivity.class,其中包含方法onCall(String str).則你可以在Unity腳本中提前寫好:
AndroidJavaClass jc = new AndroidJavaCalss("com.hu.solare.MainActivity");
AndroidJavaObject jo=jc.GetStatic<AndroidJavaObject>("currentActivity");
jc.Call("onCall","String")
即可調用onCall方法.
Ⅶ 如何將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的使用。