iOS Unity3D遊戲引擎入門②

這篇文章還能夠在這裏找到 英語javascript

Unity3D for iOS初級教程:Part 2/3

Learn how to use Unity to make a simple 3D iOS game!java

這篇教材是來自教程團隊成員 Christine Abernathy, 他是Facebook的開發支持團隊的工程師。
歡迎來到Unity3D for iOS系列教程的第二部分!
在這個系列的第一部分中,你已經學習了Unity的一些基本技能來構建一個很是簡單的項目,並把它部署到iOS設備上。在繼續這篇教程以前,你要確認已閱讀過第一部分。
如今進入第二部分,你要添加一些功能來加強咱們的項目,這些功能包括更好的角色移動,和更好的遊戲背景。你也會學習如何使用Unity Remote來調試。
遊戲再次開啓!
ios

讓咱們開始:改變背景

打開你在教程第一部分的Unity項目。若是你尚未準備好,這裏是下載的連接: Unity ProjectXcode Project.
在教程的這個部分,你要在一個新的場景裏作修改,因此你能夠容易的打開老的那個來參考,若是你喜歡。
選擇FileSave Scene as…,並命名你的新場景爲Level_2. 這個新的Level_2場景會添加到項目視圖中。
全部你在前一個場景中用到的資源,例如,腳本,在你新的場景中均可以使用。你能夠改變Level_2場景中的GameObject,而不影響Level_1中一樣的物件。編程

好好地享受吧

首先你要加強角色的機動性。目前你那個英勇的小方塊只是會向前和向右旋轉。那種移動不是很是平滑和有趣的。
Character Controller是一個你能夠鏈接到GameObject的Unity組件,它幫助你建立更加逼真的運動。你能夠經過腳本函數來控制Character Controller.
舉例來講,你能夠調用一個預先定義的SimpleMove函數來移動角色。這個SimpleMove函數用一個Vector3做爲輸入,來表示做用於移動的速度。角色的移動會根據重力自動計算,這樣容許它爬坡和上下樓梯。
角色也會繞過任何障礙物,它會找出它的路徑,而不須要你寫代碼來關注這點。
來看看這到底是啥意思,在Hierarchy視圖中選擇這個方塊GameObject(你的角色),而後選擇「ComponentPhysicsCharacter Controller.」你會看見一個對話框讓你確認是否用Character Controller來替代Box Collider
Unity3D for iOS初級教程:Part 2/3
點擊」Replace」
在Inspector中你會看到一個針對Charactor COntroller的新組件。你將要建立一個全新的腳原本控制玩家的移動,因此你再也不須要在這個場景中綁定MoveSimple腳本到你英勇的小方塊上。
Unity3D for iOS初級教程:Part 2/3

在Inspector中,點擊MoveSimple腳本的齒輪圖標,而後選擇刪除組件。這個腳本就不會在Inspector中出現了。
Unity3D for iOS初級教程:Part 2/3

選擇AssetsCreateJavaScript建立一個新的Javacript資源,而後命名它爲MoveAround. 雙擊這個新的腳本,在MonoDevelop中打開它。刪除自動生成的函數,而後添加下面的代碼:xcode

var speed : float = 3.0;
var rotateSpeed : float = 3.0;
function Update () {
    var controller : CharacterController = GetComponent(CharacterController);
    // Rotate around y - axis
    transform.Rotate(0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);
 
    // Move forward / backward
    var forward : Vector3 = transform.TransformDirection(Vector3.forward);
    var curSpeed : float = speed * Input.GetAxis ("Vertical");
    controller.SimpleMove(forward * curSpeed);
}
@script RequireComponent(CharacterController)

保存你的修改。
在這個腳本中的最後一行指定這個腳本只能鏈接到有Character Controller組件的的GameObject上。
這個Update()函數獲取一個Character Controller組件的句柄。根據表明左右移動的輸入,讓它圍繞y軸作旋轉變換。缺省狀況下,左右移動由左右箭頭和A/D鍵來控制的。
Input.GetAxis()的值範圍是-1到+1. 圍繞着y軸,負值會產生一個逆時針旋轉,正值產生一個順時針的旋轉。
SimpleMove函數根據從Input.GetAxis(「Vertical」)獲取的輸入讓角色來朝前或朝後移動。這個輸入由先後箭頭或W/S鍵來觸發。與水平輸入同樣,the Input.GetAxis()的值範圍從-1到+1,負值和正值分別表明向後和向前移動。你使用一個速度因子來控制旋轉角度和移動的距離。
關聯新的腳本到英勇的小方塊上。如今你知道該如何作了。(提示:若是你不記得了,這是ComponentsScriptsMove Around.:])當你完成後,在角色的Inspector中,你應該看到一個新的Move Around腳本組件。
Unity3D for iOS初級教程:Part 2/3

爲啥不用the Unity Editor試試旋轉你的英勇的小方塊呢?點擊Play按鈕,而後體驗你新建立的移動效果 – 哦,體驗一下能夠左右旋轉,先後移動的快樂。
使用left/right/up/down按鍵四處轉轉,而後也測試一下W/A/S/D鍵。玩家如今移動的更加順暢了,感謝the Character Controller組件和你編寫腳本的基因。
繼續以前,拍拍背休息一下吧. :]網絡

用Unity Remote調試

在上個教程中,你也許注意到,在你的iOS設備上測試你的項目有一點麻煩。導出到Xcode項目,構建和在你的設備上運行的整個過程要花費一些時間,這些時間實際的增長到了開發過程當中。
好的消息是,這裏有一個更好的方式!最快的方式來在iOS上調試你的遊戲是使用一個叫作 Unity Remote的應用。這讓你跳過爲你的iOS構建項目,啓動xcode而後部署在你的設備上的這些步驟,
使用Unity Remote iOS應用,你能夠連接你的iOS到Unity Editor,而後從iOS設備來控制你的Unity Editor。這點可讓你快速的在Unity Editor中調試你的遊戲。app

Unity Remote能夠經過 AppStore免費獲取到。下載,而後安裝這個應用在你的設備上。編輯器

注意:要使用UnityRemote,須要你的iOS設備和你的電腦應該在同一個Wi-Fi網絡中。另外,要讓這種方式可以運做,Unity Editor窗口必須在前臺。若是你吧Unity Editor的窗口放到後臺,在iOS應用中,你會獲得「Waiting for game view. Press ‘Play’」的消息。ide

點擊Unity Editor中的Play。在你的iOS設備上,運行Unity Remote應用。從出現的列表中,選擇你的電腦。若是你的電腦沒有在列表中,試着在Unity Remote的IP設置中輸入你電腦的IP地址。
Unity3D for iOS初級教程:Part 2/3
當Unity Remote已經與你的電腦配對,你的iOS設備應該能夠控制在Unity Editor中運行的遊戲。在設備上顯示的分辨率不會很理想,可是這是最好的方法來快速展現你的遊戲。可是,你應該也要偶爾爲iOS構建項目,從xcode加載這個遊戲,這樣你才能夠在更實際的條件之下準確的測試遊戲的物理效果。
在iOS上測試這個遊戲。你會發如今你的設備上沒有辦法移動你的玩家,這是由於你的left/right/up/down按鍵在iOS上不存在(雖然你仍然能夠在你的mac上控制它)。下面,你將要實現一個搖桿功能來修正這點。函數

雙倍的搖桿,雙倍的快樂

對你來講幸運的是,Unity的標準的資源庫中包括了實現搖桿功能的資源。選擇AssetsImport PackageStandard Assets (Mobile)從包裏導入相關的條目(以下面所看見的)。
Unity3D for iOS初級教程:Part 2/3

選擇與與搖桿功能相關的指定項目。點擊 Import。當導入過程結束,項目面板會包含一個名叫 Standard Assets(Mobile)的新的文件夾。在Unity4中,你能夠看到導入的搖桿的腳本帶着一個警告,就像這個樣子(底部黃色的部分)
Unity3D for iOS初級教程:Part 2/3

要解決這個問題,在警告上雙擊。這會打開搖桿的腳本文件。把你的光標放在帶有警告的那行:

    gameObject.active = false;

修改這條語句爲:

    gameObject.SetActive(false);

如今當你切換到Unity Editor時,這條警告應該不存在了。瞭解了!
首先添加雙搖桿預製件到你的場景中。預製件是一個可複用的,而且一般是須要被定製的GameObject。你能夠從項目面板中將它拖出,給你的場景添加一個預製件,或者經過腳本以編程的方式添加。舉例來講,你何以構造一個預製件表明一個角色,而後以編程的方式添加多個角色到一個場景中。
在你的項目面板中,打開Standard Assets (Mobile)Prefabs文件夾。將the Dual Joysticks prefab拖到你的Hierarchy視圖中。
Unity3D for iOS初級教程:Part 2/3

點擊Game視圖,到遊戲視圖下,你能夠看見這個搖桿:
Unity3D for iOS初級教程:Part 2/3

回到場景視圖
點擊在Hierarchy視圖的Dual Joysticks GameObject邊上的三角。注意Dual Joysticks GameObject實際上有兩個子GameObject組成。

這個過程叫作父子化,是用來創建搖桿父子GameObject關係的。父子化是很是有用的,你能夠建立一個複合的GameObject,這個複合的GameObject包含其餘GameObject. 舉例來講,你可讓左右搖桿在同一時間有效或失效,並且若是他們能夠被視做一個簡單的物件,經過腳原本完成這步就會至關容易。
選擇LeftJoystick  GameObject,注意有一個Joystick script組件關聯在它上面。選擇the RightJoystick GameObject,查看是否同樣。
Joystick script探測附着在它上面的GUI紋理上的觸摸事件,在特定的約束下來獲取定位。舉例來講,圖形只在給定的範圍內移動。這個腳本也歸一化位置的輸出,讓它在-1到+1之間。這讓你能夠在iOS環境下使用搖桿來做爲Input.GetAxis()的替代。
到這步,你已近在場景中放置了兩個搖桿,可是它們尚未鏈接到你的英勇的小方塊上來驅動輸入。你將要改變腳原本分配右搖桿旋轉角色的任務,而左搖桿來先後移動你的角色。
修改MoveAround腳原本處理搖桿輸入。打開腳原本編輯和添加公共變量表明移動和旋轉搖桿(在其餘變量的上面):

var moveJoystick : Joystick;
var rotateJoystick : Joystick;

而後添加一個新的函數來查看搖桿的位置,而後返回-1到+1之間的輸出。就在Upate()函數後面添加。

function joyStickInput (joystick : Joystick) {
    var absJoyPos = Vector2 (Mathf.Abs(joystick.position.x),
                                   Mathf.Abs(joystick.position.y));
    var xDirection = (joystick.position.x > 0) ? 1 : -1;
    var yDirection = (joystick.position.y > 0) ? 1 : -1;
    return ( ( absJoyPos.x > absJoyPos.y) ? absJoyPos.x * xDirection : absJoyPos.y * yDirection);
}

搖桿的輸入是一個Vector2,有x和y份量。你使用x或y的絕對值中較大的那個做爲輸出。你使用搖桿的方向做爲乘數來表示一個負值或正值。輸出值的結果在-1到+1之間。
修改Update()函數來處理來之Unity編輯器或一個iOS設備的輸入:

function Update () {
    var controller : CharacterController = GetComponent(CharacterController);
    // Rotate around y - axis
    var rotatePos = Input.GetAxis ("Horizontal") ? 
                       Input.GetAxis ("Horizontal") : joyStickInput(rotateJoystick);
    transform.Rotate(0, rotatePos * rotateSpeed, 0);
 
    // Move forward / backward
    var forward = transform.TransformDirection(Vector3.forward);
    var movePos = Input.GetAxis ("Vertical") ? 
                     Input.GetAxis ("Vertical") : joyStickInput(moveJoystick);
    var curSpeed = speed * movePos;
    controller.SimpleMove(forward * curSpeed);
}

這個變換的Rotate()函數從左/右鍵(或A/D)鍵或旋轉搖桿的輸入獲取輸入。角色控制器的SimpleMove函數從上/下箭頭(或W/S)鍵或者左搖桿的輸入來獲得輸入。
保存你腳本的修改。選擇角色GameObject(這個方塊),而後注意MoveAround腳本組件有兩個針對移動搖桿和旋轉搖桿的新的公共變量。
Unity3D for iOS初級教程:Part 2/3

這些變量當前尚未被賦值。保持角色GameObject仍然被選中,拖動左搖桿GameObject到移動搖桿變量上。拖動右搖桿GameObject到旋轉搖桿變量上.(或者替代拖動,你可使用每一個變量邊上的選擇器,如以前指出的那樣)
Unity3D for iOS初級教程:Part 2/3

點擊Unity編輯器中的Player。在你的iOS設備上開啓Unity Remote。
測試搖桿的功能,而後確認你可使用左搖桿先後移動,使用右搖桿來左右旋轉。當你在你的iOS設備上移動搖桿的時候,你能夠在Unity編輯器中看到搖桿在移動。
Unity3D for iOS初級教程:Part 2/3

注意:你在這裏看到的搖桿的圖片也許被拉伸了。不要擔憂,在實際的設備上它們不會像這樣顯示的。

 

一個晴朗的天空

如今你已近改進了你的英勇的小方塊的移動效果,那麼來改善背景如何?到目前爲止,角色都在一個沉悶和灰暗的世界中,是時候美化一下了.:]
謝天謝地,這是很是簡單的。Unity在標準的資源包中包含了這個讓你能夠建立天空的資源,添加植被和不一樣高度的地形。
在這節中,你要用skybox組件添加一個天空。skybox是一個很大的方塊對象,添加到你遊戲的主攝像頭上。當你添加了這個組件,你能夠經過添加覆蓋在方塊上的材料,給這個方塊穿上衣服,並被渲染來建立一個天空的效果。
選擇AssetsImport PackageSkyboxes來開始導入過程。選擇Sunny2 Skybox.mat,而後點擊導入。
Unity3D for iOS初級教程:Part 2/3

當導入完成,你的Project視圖應該有一個新的Standard AssetsSkyboxes文件夾包括一個新的導入的資源。
Unity3D for iOS初級教程:Part 2/3

選擇主攝像頭對象,而後選擇ComponentRenderingSkybox
Unity3D for iOS初級教程:Part 2/3

這個新的組件在Inspector中出現了。注意它有一個變量來表明材質。這裏是你以前導入的skybox材料發揮做用的地方了。
點擊這個客製化的Skybox變量邊上的小圓圈圖標。一個選擇材質的對話框會彈出來,列出你項目全部可使用的材質。
Unity3D for iOS初級教程:Part 2/3

點擊Sunny2 Skybox材質,而後關閉選擇材質對話框。這個客製化的Skybox變量如今應該有一個Sunny2 Skybox材質付給它了。
Unity3D for iOS初級教程:Part 2/3

你的場景將奇蹟般的改變了,顯示你剛纔添加的晴朗天空,你能夠點擊Game欄目來在Game視圖中顯示天空,或者點擊Play按鈕。
Unity3D for iOS初級教程:Part 2/3
太陽出來的!儘管它看上去陰沉沉的,這會鼓勵你來給你的世界添加一些綠色的生命。

不要忘記添加綠色

切換回場景視圖。你能夠經過添加一個地形GameObject建立植被,而後添加一些材質(例如,草地)和一些對象(例如,樹)。
你再也不須要平面(plane)GameObject,而terrain(地形)會取代地面的職責。在Hierarchy視圖中右擊plane GameObject,而後選擇Delete.
選擇AssetsImport PackageTerrain Assets.
Unity3D for iOS初級教程:Part 2/3

點擊Import來導入全部選中的內容。地形資源應該出如今你的標準資源文件夾下。你可使用這個已導入的資源來改變地形GameObject的行爲。
選擇TerrainCreate Terrain來添加一個地形GameObject到你的場景中。選擇地形對象,而後使用Inspector改變它的位置到-1,0,-1。這步將地形拉伸了到足夠大,給你的角色有足夠的空間來移動。
Unity3D for iOS初級教程:Part 2/3

地形(腳本)欄包括讓你來裝點你的地形的工具:
Unity3D for iOS初級教程:Part 2/3

選擇繪畫工具帶來你能夠工做的刷子:
Unity3D for iOS初級教程:Part 2/3

你將要用grass來繪製你的地形。點擊Edit TexturesAdd Texture:
Unity3D for iOS初級教程:Part 2/3

在Add Terrain Texture對話框中,在Texture區域點擊Select,選中Grass (Hill) texture,關閉Select Texture2D彈出窗口,而後點擊Add:
Unity3D for iOS初級教程:Part 2/3

在你的場景視圖中點擊來繪製草地。要檢查你的創做結果,點擊Game欄目:
Unity3D for iOS初級教程:Part 2/3

美化老是這麼容易吧!
切換回場景視圖 – 如今你將要繪製一些棕櫚樹!在地形(腳本)欄,選擇Place Trees工具:
Unity3D for iOS初級教程:Part 2/3

點擊Edit TreesAdd Tree:
Unity3D for iOS初級教程:Part 2/3

在Add Tree對話框中,點擊Tree輸入框邊上的圓靶圖標,選擇棕櫚樹Game Object,而後點擊Add:
Unity3D for iOS初級教程:Part 2/3

設置 Brush Size爲20:
Unity3D for iOS初級教程:Part 2/3

經過點擊你想要添加樹木的地方來開始添加樹到你的場景中。提示:當你放置樹木的時候,放大場景而後移動場景。當你添加樹木的時候,試圖調整點光源的範圍和高度來看見更多的場景。
Unity3D for iOS初級教程:Part 2/3

結束後,你的場景應該看上去像這個樣子:
Unity3D for iOS初級教程:Part 2/3

Wow,至關不錯!它開始看上去像一個真實的世界在那裏。可是你的地形仍然看上有點平,不是嗎?
你能夠很容易的添加一些高度變化到你的地形中。在地形(腳本)欄,選擇最左面的工具來提高和下降地形的高度:
Unity3D for iOS初級教程:Part 2/3

設置Brush Size爲20,而後在場景的試圖中,點擊玩家周圍的2~3個點(不要太靠近,)來改變地形的高度。
Unity3D for iOS初級教程:Part 2/3

預覽這個遊戲,並在場景中四處走走。在場景中微調樹木的數量,直到看上去合適,可是記住在你想要保留任何改變前,中止遊戲。
Unity3D for iOS初級教程:Part 2/3

保存你的場景
用Unity Remote來測試你的項目,直到滿意爲止,在Xcode項目中構建它。選擇FileBuild Settings,而後在 Build Settings對話框中,點擊Add Current來添加Level_2場景。這個在場景中的新的場景會出如今構建清單中。不要選中Level_1場景,只要構建Level_2.
Unity3D for iOS初級教程:Part 2/3

若是被問起點擊Build,選擇替換前面的項目,而後加載Xcode項目。在你的iOS設備上部署和測試。
Unity3D for iOS初級教程:Part 2/3

不錯吧,嗯?想象這會須要多久時間完成這些,若是你還在使用OpenGL :]

向哪裏進發?

乾的不錯!你在拓展你的Unity技能上向前邁了一大步.:] 你的英勇的小方塊也將會更加接近終點線。
這裏有一些從項目開始到目前爲止的全部的代碼下載: Unity ProjectXcode Project.在這份教程的最後部分,你將要在項目上添加遊戲元素。經過添加玩家期待的鐘聲和口哨來給你的遊戲增色。

相關文章
相關標籤/搜索