iOS Unity3D遊戲引擎入門②

來源:互聯網
上載者:User

標籤:方向   save   imp   多個   ntp   deb   順時針   dir   tin   

歡迎來到Unity3D for iOS系列教程的第二部分!
在這個系列的第一部分中,你已經學習了Unity的一些基本技能來構建一個非常簡單的項目,並把它部署到iOS裝置上。在繼續這篇教程之前,你要確認已閱讀過第一部分。
現在進入第二部分,你要添加一些功能來增強我們的項目,這些功能包括更好的角色移動,和更好的遊戲背景。你也會學習如何使用Unity Remote來調試。
遊戲再次開啟!

讓我們開始:改變背景

開啟你在教程第一部分的Unity項目。如果你還沒有準備好,這裡是下載的連結: Unity Project, Xcode 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

點擊”Replace”
在Inspector中你會看到一個針對Charactor COntroller的新組件。你將要建立一個全新的指令碼來控制玩家的移動,所以你不再需要在這個情境中綁定MoveSimple指令碼到你英勇的小方塊上。

在Inspector中,點擊MoveSimple指令碼右上方的齒輪表徵圖,然後選擇刪除群組件。這個指令碼就不會在Inspector中出現了。

選擇AssetsCreateJavaScript建立一個新的Javacript資源,然後命名它為MoveAround. 雙擊這個新的指令碼,在MonoDevelop中開啟它。刪除自動產生的函數,然後添加下面的代碼:

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指令碼組件。

為啥不用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中調試你的遊戲。

Unity Remote可以通過 AppStore免費擷取到。下載,然後安裝這個應用在你的裝置上。

注意:要使用UnityRemote,需要你的iOS裝置和你的電腦應該在同一個Wi-Fi網路中。另外,要讓這種方式能夠運作,Unity Editor視窗必須在前台。如果你吧Unity Editor的視窗放到後台,在iOS應用中,你會得到“Waiting for game view. Press ‘Play’”的訊息。

點擊Unity Editor中的Play。在你的iOS裝置上,運行Unity Remote應用。從出現的列表中,選擇你的電腦。如果你的電腦沒有在列表中,試著在Unity Remote的IP設定中輸入你電腦的IP地址。

當Unity Remote已經與你的電腦配對,你的iOS裝置應該可以控制在Unity Editor中啟動並執行遊戲。在裝置上顯示的解析度不會很理想,但是這是最好的方法來快速展示你的遊戲。但是,你應該也要偶爾為iOS構建項目,從 xcode載入這個遊戲,這樣你才可以在更實際的條件之下準確的測試遊戲的物理效果。
在iOS上測試這個遊戲。你會發現在你的裝置上沒有辦法移動你的玩家,這是因為你的left/right/up/down按鍵在iOS上不存在(雖然你仍然可以在你的mac上控制它)。下面,你將要實現一個搖杆功能來修正這點。

雙倍的搖杆,雙倍的快樂

對你來說幸運的是,Unity的標準的資產庫中包括了實現搖杆功能的資源。選擇AssetsImport PackageStandard Assets (Mobile)從包裡匯入相關的條目(如下面所看見的)。

選擇與與搖杆功能相關的指定項目。點擊 Import。當匯入處理程序結束,項目面板會包含一個名叫 Standard Assets(Mobile)的新的檔案夾。在Unity4中,你可以看到匯入的搖杆的指令碼帶著一個警告,就像這個樣子(底部黃色的部分)

要解決這個問題,在警告上雙擊。這會開啟搖杆的指令檔。把你的游標放在帶有警告的那行:

    gameObject.active = false;

修改這條語句為:

    gameObject.SetActive(false);

現在當你切換到Unity Editor時,這條警告應該不存在了。瞭解了!
首先添加雙搖杆預製件到你的情境中。預製件是一個可複用的,並 且通常是需要被定製的GameObject。你可以從項目面板中將它拖出,給你的情境添加一個預製件,或者通過指令碼以編程的方式添加。舉例來說,你何以構 造一個預製件代表一個角色,然後以編程的方式添加多個角色到一個情境中。
在你的項目面板中,開啟Standard Assets (Mobile)Prefabs檔案夾。將the Dual Joysticks prefab拖到你的Hierarchy視圖中。

點擊Game視圖,到遊戲視圖下,你可以看見這個搖杆:

回到情境視圖
點擊在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指令碼組件有兩個針對移動搖杆和旋轉搖杆的新的公開變數。

這些變數當前還沒有被賦值。保持角色GameObject仍然被選中,拖動左搖桿GameObject到移動搖杆變數上。拖動右搖桿GameObject到旋轉搖杆變數上.(或者替代拖動,你可以使用每個變數邊上的選取器,如之前指出的那樣)

點擊Unity編輯器中的Player。在你的iOS裝置上開啟Unity Remote。
測試搖杆的功能,然後確認你可以使用左搖桿前後移動,使用右搖桿來左右旋轉。當你在你的iOS裝置上移動搖杆的時候,你可以在Unity編輯器中看到搖杆在移動。

注意:你在這裡看到的搖杆的圖片也許被展開了。不要擔心,在實際的裝置上它們不會像這樣顯示的。

 

一個晴朗的天空

現在你已近改進了你的英勇的小方塊的移動效果,那麼來改善背景如何?到目前為止,角色都在一個沉悶和灰暗的世界中,是時候美化一下了.:]
謝天謝地,這是非常簡單的。Unity在標準的資源套件中包含了這個讓你可以建立天空的資源,添加植被和不同高度的地形。
在這節中,你要用skybox組件添加一個天空。skybox是一個很大的方塊對象,添加到你遊戲的主網路攝影機上。當你添加了這個組件,你可以通過添加覆蓋在方塊上的材料,給這個方塊穿上衣服,並被渲染來建立一個天空的效果。
選擇AssetsImport PackageSkyboxes來開始匯入處理程序。選擇Sunny2 Skybox.mat,然後點擊匯入。

當匯入完成,你的Project視圖應該有一個新的Standard AssetsSkyboxes檔案夾包括一個新的匯入的資源。

選擇主網路攝影機對象,然後選擇ComponentRenderingSkybox

這個新的組件在Inspector中出現了。注意它有一個變數來代表材質。這裡是你之前置入的skybox材料發揮作用的地方了。
點擊這個客制化的Skybox變數邊上的小圓圈表徵圖。一個選擇材質的對話方塊會彈出來,列出你項目所有可以使用的材質。

點擊Sunny2 Skybox材質,然後關閉選擇材質對話方塊。這個客制化的Skybox變數現在應該有一個Sunny2 Skybox材質付給它了。

你的情境將奇蹟般的改變了,顯示你剛才添加的晴朗天空,你可以點擊Game欄目來在Game視圖中顯示天空,或者點擊Play按鈕。

太陽出來的!儘管它看上去陰沉沉的,這會鼓勵你來給你的世界添加一些綠色的生命。

不要忘記添加綠色

切換回情境視圖。你可以通過添加一個地形GameObject建立植被,然後添加一些材質(例如,草地)和一些對象(例如,樹)。
你不再需要平面(plane)GameObject,而terrain(地形)會取代地面的職責。在Hierarchy視圖中右擊plane GameObject,然後選擇Delete.
選擇AssetsImport PackageTerrain Assets.

點擊Import來匯入所有選中的內容。地形資源應該出現在你的標準資源檔夾下。你可以使用這個已匯入的資源來改變地形GameObject的行為。
選擇TerrainCreate Terrain來添加一個地形GameObject到你的情境中。選擇地形對象,然後使用Inspector改變它的位置到-1000,0,-1000。這步將地形展開了到足夠大,給你的角色有足夠的空間來移動。

地形(指令碼)欄包括讓你來裝點你的地形的工具:

選擇繪畫工具帶來你可以工作的刷子:

你將要用grass來繪製你的地形。點擊Edit TexturesAdd Texture:

在Add Terrain Texture對話方塊中,在Texture地區點擊Select,選中Grass (Hill) texture,關閉Select Texture2D快顯視窗,然後點擊Add:

在你的情境視圖中點擊來繪製草地。要檢查你的創作結果,點擊Game欄目:

美化總是這麼容易吧!
切換回情境視圖 – 現在你將要繪製一些棕櫚樹!在地形(指令碼)欄,選擇Place Trees工具:

點擊Edit TreesAdd Tree:

在Add Tree對話方塊中,點擊Tree輸入框邊上的圓靶表徵圖,選擇棕櫚樹Game Object,然後點擊Add:

設定 Brush Size為20:

通過點擊你想要添加樹木的地方來開始添加樹到你的情境中。提示:當你放置樹木的時候,放大情境然後移動情境。當你添加樹木的時候,試圖調整點光源的範圍和高度來看見更多的情境。

結束後,你的情境應該看上去像這個樣子:

Wow,相當不錯!它開始看上去像一個真實的世界在那裡。但是你的地形仍然看上有點平,不是嗎?
你可以很容易的添加一些高度變化到你的地形中。在地形(指令碼)欄,選擇最左面的工具來提升和降低地形的高度:

設定Brush Size為20,然後在情境的試圖中,點擊玩家周圍的2~3個點(不要太靠近,)來改變地形的高度。

預覽這個遊戲,並在情境中四處走走。在情境中微調樹木的數量,直到看上去合適,但是記住在你想要保留任何改變前,停止遊戲。

儲存你的情境
用Unity Remote來測試你的項目,直到滿意為止,在Xcode項目中構建它。選擇FileBuild Settings,然後在 Build Settings對話方塊中,點擊Add Current來添加Level_2情境。這個在情境中的新的情境會出現在構建清單中。不要選中Level_1情境,只要構建Level_2.

如果被問起點擊Build,選擇替換前面的項目,然後載入Xcode項目。在你的iOS裝置上部署和測試。

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

向哪裡進發?

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

iOS Unity3D遊戲引擎入門②

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.