【這教材是來自教程團隊成員 Christine Abernathy, 他是Facebook的開發支持團隊的工程師。】
Unity是最為流行的游戲引擎之一。這是有充分緣由的:Unity有一個讓它非常容易上手的強大的可視化編輯器,功能強大,好的社區支持,有吸引力的價格,等等!
如果你渴望嘗試Unity,沒有比這篇教程更適合你的了!在這篇教程中,你會學習如何用Unity創建一個簡單的iOS游戲 – 並且之前不需要有任何經驗!:]
在這篇教程中,你要創建的這個簡單游戲是讓玩家在限定的時間內,繞過沿途的障礙物順利達到終點。
在過程中,會向你介紹Unity的開發環境和工作流程,並且學習游戲設計的基本概念。
如果你渴望嘗試Unity,沒有比這篇教程更適合你的了!在這篇教程中,你會學習如何用Unity創建一個簡單的iOS游戲 – 並且之前不需要有任何經驗!:]
在這篇教程中,你要創建的這個簡單游戲是讓玩家在限定的時間內,繞過沿途的障礙物順利達到終點。
在過程中,會向你介紹Unity的開發環境和工作流程,並且學習游戲設計的基本概念。
這篇份教程將會分為三個部分:
在第一部分中,通過創建一個游戲,這個游戲具有一個帶有控制機制的簡單角色,通過這個游戲使你學會使用Unity的基本操作。你也會學習如何將的項目部署到iOS平台上。
在第二部分中,你會掌握如何使用內建的控制器對象和標准庫中的腳本來增強角色的移動;如何用Unity Remote來調試;如何美化游戲的場景。
在第三部分中,你將會添加游戲規則到你的項目中,並且建立起游戲設計的概念,這些概念包括添加預制件,計時器,菜單和音效來增強游戲的體驗。
准備好了添加一個強大的新框架到你的技能欄里了嗎?請繼續閱讀!:]
當你完成這個系列的教程,你就會熟悉Unity的開發工作流,它包括四個基本的部分:
- 在Unity Editor中搭建你的游戲場景
- 用MonoDelelop Editor撰寫腳本
- 用Unity Romote遠程調試
- 用Unity Editor發布到你的iOS設備上
在教程的第一部分中,你要安裝Unity,學習編輯器界面的基本功能,然后通過創建一個項目,來向你介紹游戲基本的概念。
第一部分結束時,你會在游戲中得到有一個可以通過觸摸觸發而移動的角色。你也會在Unity Editor和iOS設備上測試你的項目。
這篇教程使用的是Unity版本4 – 如果你還沒有安裝,那就前去下載Unity吧。
第一部分結束時,你會在游戲中得到有一個可以通過觸摸觸發而移動的角色。你也會在Unity Editor和iOS設備上測試你的項目。
這篇教程使用的是Unity版本4 – 如果你還沒有安裝,那就前去下載Unity吧。
Unity提供了一個功能完整的, 具有30天免費試用時間的專業版本。這個版本允許你開發游戲,並且可以部署游戲,並運行在iOS平台上。雖然Unity可以運行在Mac和Windows平台上,這份教程是基於Mac環境的。
創建項目
當你下載並且安裝完Unity之后,開啟Unity。如果這是你第一次啟動Unity, 會提示你激活你的程序。選擇Activate the free 30-day trial of Unity Pro選項,就像下面截屏所示:
然后你需要創建一個Unity賬號,如果你還沒有的話,確認你的郵件地址,然后通過Unity登錄。
當你登錄后,你會被問及一些問題。如果你翻到列表的最下面,然后點擊”Not Right Now.”,這樣你就可以跳過這些問題:]。最后,你就可以開始使用Unity了。
到了這步,一個缺省的項目創建好並呈現在你的面前 – 就像下面這樣:
到了這步,一個缺省的項目創建好並呈現在你的面前 – 就像下面這樣:
扔掉那個項目,然后通過選擇菜單中的FileNew Project來創建一個新的項目。一個項目導向會呈現在你面前:
在項目向導中,點擊”Set”然后導覽到你想要保存這個項目的文件夾下。輸入DashAndZag作為項目的名稱,點擊“保存”,最后是”Create Project”。(會詢問你是否想要保存之前打開的那個缺省的項目,但是你可以選擇不這樣做,除非基於某種原因你想保留它…)
注意:在項目創建的階段,這個項目導覽包含了一些你可以導入的標准庫。目前先忽略這點。你會在這篇教程的后面導入你需要的庫。
Unity會關閉當前的項目然后再次用你新的項目啟動:
<ignore_js_op style="word-wrap: break-word;">
<ignore_js_op style="word-wrap: break-word;">

啊哈,一個全新的畫布!但是這些控件條,窗口和標簽欄究竟是啥?我們要從哪里開始呢?
開始了解UI吧…
值得花一些時間來調整一個真正適合你的Unity Editor界面,所以讓我們瞧一瞧。在右上角編輯器的Layout標簽欄那里停一下。將視窗的模式改為Wide:
<ignore_js_op style="word-wrap: break-word;">
這里將你看到打散的各個部分,每個部分都用高亮標出:
<ignore_js_op style="word-wrap: break-word;">
<ignore_js_op style="word-wrap: break-word;">

這里將你看到打散的各個部分,每個部分都用高亮標出:
<ignore_js_op style="word-wrap: break-word;">

- 項目視圖:你的Unity項目包含的資源目錄的內容會在這個欄目里顯示出來。這里有腳本,場景,預制件和其他你創建的Unity對象。
- Hierarchy(層次列表)視圖:這里包含了當前場景中的GameObject。在Unity游戲中,每個出現的對象稱之為GameObject。這些對象可以是你從the GameObject菜單下創建的簡單的對象,或者是你導入的資源。你那個初始的項目包含一個GameObject:主攝像頭。
- 工具條:工具條允許你在場景視圖或游戲視圖中操作對象,來控制你的編輯器視圖如何被顯示,也能控制編輯器中游戲的預覽。
- 場景視圖:在這個視圖里,你可以擺放你的GameObject的位置來搭建你的游戲。這個場景視圖包括了一個場景Gizmo(就是右上角帶有坐標軸的那個東東)它標明了場景鏡頭的當前方位。
- 游戲視圖:這是一個來自你游戲中攝像頭的視角。當你點擊工具欄上面的Play按鈕,你會看到這個游戲視圖。另外,你也可以通過窗口頂部的標簽來切換游戲和場景視圖。
- Inspector(檢查器):這個東西提供了被選中的GameObject的進一步詳細信息。你可以改變這些對象的屬性,例如尺寸,位置,或者是關聯的腳本來改變這個GameObject的行為。
你將會很熟練的使用工具欄中的變換工具來放置GameObject,並在場景視圖中逛逛。好吧,讓我們轉到下節:
Hand工具讓你控制場景中你的視角
<ignore_js_op style="word-wrap: break-word;">

最好理解Hand工具的方式是想象你自己掉到了3D場景中,周圍有很多GameObject. 在你前面的物件是可見的,而那些在你身后的是不可見的。
你或許希望在場景中后退幾步,這樣可以看到更大的視角,向左或向右移動看見其他物件,或者旋轉和平移看看你身后有些啥。這個Hand工具就是為你做這些的。
當你開始添加越來越多的GameObject后,你會發現在放置GameObject之前你會越來越多的使用這個工具來在場景中調整你的視角。
要看看Hand工具是如何工作的,首先選中它(在工具條的最左邊),然后從Hierarchy視圖中選擇主攝像頭(只是讓你在場景的視圖中有東西可以看到)。你可以拖動畫布來移動整個場景。
要縮放,你可以使用你的鼠標滾輪,或者按住Control鍵並拖動鼠標。你可以通過按住Option鍵,拖動鼠標來旋轉。如果你想在任何時候重置你的視角,你可以點擊場景右上角Gizmo的其中一個軸。
<ignore_js_op style="word-wrap: break-word;">

把玩一會Hand工具,直到你熟練在場景中移動,並可以使用Control和Option組合來縮放和旋轉。
你經常要在Hand工具和其他工具之間切換,所以記住它的快捷鍵是有必要的。缺省情況下,這些按鍵一個挨着一個,在你的鍵盤的左上角 – Q, W, E, 和R,分別代表Hand, Move, Rotate和Scale.
注意:Hand工具並沒有移動物件。它僅僅改變你場景的視角,所以它看上去就好像物件被移動了。使用各種Hand工具選項練習在場景中移動。
移動它或放開它
使用Move工具,你可以在3D空間里移動GameObject。
<ignore_js_op style="word-wrap: break-word;">
<ignore_js_op style="word-wrap: break-word;">

選擇主攝像頭(如果你在場景視圖里沒有看到它,可以再Hierarchy視圖中雙擊它),然后點擊Move工具。你應該會看到在主攝像頭邊上出現一個gizmo,有箭頭代表三個軸。通過這些,你可以移動這個物件:
<ignore_js_op style="word-wrap: break-word;">

紅色的箭頭代表X軸,綠色箭頭是y軸,然后藍色箭頭是z軸。你可以通過選中這個物件,按住鼠標左鍵,然后在gizmo中拖動,來移動一個GameObject.
選中主攝像頭,移動一下。看一下在Inspector中的transform組件。Position欄目中有x, y和z值代表GameObject的位置。當你移動物件的時候,注意這些值的變化。
選中主攝像頭,移動一下。看一下在Inspector中的transform組件。Position欄目中有x, y和z值代表GameObject的位置。當你移動物件的時候,注意這些值的變化。
你可以改變GameObject的transform位置,通過使用Move工具,或者直接在這些輸入區域輸入你想要的位置。
如果你只想在一個方向移動物件,選擇gizmo中相應的軸,按住左鍵,拖動那個軸。通過僅僅在x軸移動主攝像頭來測試這點,在Inspector中查看,僅有x-position的值改變了。在y和z軸重復同樣的動作。
如果你只想在一個方向移動物件,選擇gizmo中相應的軸,按住左鍵,拖動那個軸。通過僅僅在x軸移動主攝像頭來測試這點,在Inspector中查看,僅有x-position的值改變了。在y和z軸重復同樣的動作。
你已經知道如何在場景中變換你的個人的視角,也知道了在場景中如何移動物件。到目前為止都還不錯哦!
你帶着我轉一轉
Rotate工具讓你在3D空間旋轉GameObject
<ignore_js_op style="word-wrap: break-word;">

要了解Rotate工具,並知道如何使用它,更深入的討論場景的Gizmo是很有必要的。在場景視圖右上角可以找到場景的Gizmo,不同的視圖有着不同的模式。
有一種模式(如左下方那個圖)讓你通過一個3D透視,以一種自由的方式觀察你的場景。如果你想要更好的表現你的游戲在3D空間的樣子,這是非常有用的。
你可以點擊gizmo下面的文字,切換到isometric視角(如右下方圖片展示的那樣)。這種模式當一個物件被旋轉的時候,它更加具有可視性。
你可以點擊gizmo下面的文字,切換到isometric視角(如右下方圖片展示的那樣)。這種模式當一個物件被旋轉的時候,它更加具有可視性。
<ignore_js_op style="word-wrap: break-word;">

另一個模式是x軸視圖,它讓你能夠觀察你的場景,就好像沿着x軸從上往下看。如果你想要在y-或z-軸移動物件,而保持x-軸不變時,這種模式非常有用。
<ignore_js_op style="word-wrap: break-word;">

在類似的方式下,你有y-和z-軸模式讓你從那個方向獲得場景的視角。
<ignore_js_op style="word-wrap: break-word;">

<ignore_js_op style="word-wrap: break-word;">

選中主攝像頭。在Gizmo上點右鍵,選擇Free, 切換到自由透視模式。
<ignore_js_op style="word-wrap: break-word;">

然后點擊gizmo下面的文字,在isometric和perspective模式之間切換。反復點擊x- y-和z-軸模式觀察場景Gizmo和場景視角的變化。
再次選擇自由視角來測試旋轉。主攝像頭仍然被選中的情況下,點擊Rotate工具。你應該看見一個Gizmo出現在主攝像頭上,它包含了代表三個旋轉軸的不同顏色的圓環。
<ignore_js_op style="word-wrap: break-word;">

左鍵點擊主攝像頭的的中心,用你的鼠標拖動旋轉主攝像頭。當你旋轉這個物件的時候,注意Inspector的TransformRotation屬性的變化。注意,你可以手動的編輯Inspector中這些值,如果你願意的話。
點擊主攝像頭中心位置,你是要打算沿着所有的軸自由的旋轉。通過點擊代表某個軸的顏色的圓環,你可以沿着這根軸旋轉GameObject。舉例來說,若只要沿着x-軸旋轉,點擊紅圈選中它,然后按住鼠標拖動來旋轉這個物件。若只要沿着y或z軸旋轉,重復相同的步驟。
點擊主攝像頭中心位置,你是要打算沿着所有的軸自由的旋轉。通過點擊代表某個軸的顏色的圓環,你可以沿着這根軸旋轉GameObject。舉例來說,若只要沿着x-軸旋轉,點擊紅圈選中它,然后按住鼠標拖動來旋轉這個物件。若只要沿着y或z軸旋轉,重復相同的步驟。
一切都歸結為視點
另一個關鍵的值得學習的概念是局部和全局(世界)的視角的區別。
通過InspectorTransformRotation字段,重置主攝像頭的旋轉角度到0,0,0。點擊那個叫做”local”的工具條。然后選擇移動工具,這樣你可以看見場景的Gizmo:
注
意場景的Gizmo和主攝像頭的Gizmo方向是一致。在場景中,x-軸指向同一個方向,並且y-和z-軸也一樣。現在用Inspector的設置TransformRotation值為0, 0 -20,沿着z-軸來旋轉主攝像頭.
<ignore_js_op style="word-wrap: break-word;">
注意主攝像頭的Gizmo現在繞着z-軸旋轉 – 這表示物件的軸在它自己的局部坐標系中。這與場景Gizmo是不同的,場景坐標顯示的是全局空間的操作。切換到全局視角來查看之間的不同。

注意主攝像頭的Gizmo現在繞着z-軸旋轉 – 這表示物件的軸在它自己的局部坐標系中。這與場景Gizmo是不同的,場景坐標顯示的是全局空間的操作。切換到全局視角來查看之間的不同。
在這篇教程的后面,你將會學習如何移動GameObject,發現你會發現當移動物體時,使用的你指定的不同空間(世界或者局部)的差異。
看一下被旋轉的主攝像頭,如果你在局部坐標控件的x-方向移動它,它會在與你在世界坐標中的x方向移動它最終的位置不一樣。把這點記在你的腦子里,今后會有用!
在你繼續之前,重置旋轉角度到0, 0,0,讓我們回到一個干凈的狀態。
看一下被旋轉的主攝像頭,如果你在局部坐標控件的x-方向移動它,它會在與你在世界坐標中的x方向移動它最終的位置不一樣。把這點記在你的腦子里,今后會有用!
在你繼續之前,重置旋轉角度到0, 0,0,讓我們回到一個干凈的狀態。
縮放工具
縮放工具允許你,你已經猜到,在尺寸上縮放GameObject
<ignore_js_op style="word-wrap: break-word;">
與其他GameObject的操作工具比較,你只能夠改變三個軸中的一個,當然你可以選擇改變InspectorTransform組件來替代這個工具。
選擇主攝像頭,然后注意縮放的Gizmo,在每個軸的末端包含一個方塊把手,還有一個在中間。
要在所有軸方向自由的縮放,選擇物件中間的方塊,然后左擊,然后向上移動讓GameObject放大,向下移動讓它變小。看一看InspectorTransformScale的屬性。當你放大或縮小這個物件的時候,你應該看到數字變大或變小。
<ignore_js_op style="word-wrap: break-word;">
<ignore_js_op style="word-wrap: break-word;">

與其他GameObject的操作工具比較,你只能夠改變三個軸中的一個,當然你可以選擇改變InspectorTransform組件來替代這個工具。
選擇主攝像頭,然后注意縮放的Gizmo,在每個軸的末端包含一個方塊把手,還有一個在中間。
要在所有軸方向自由的縮放,選擇物件中間的方塊,然后左擊,然后向上移動讓GameObject放大,向下移動讓它變小。看一看InspectorTransformScale的屬性。當你放大或縮小這個物件的時候,你應該看到數字變大或變小。
<ignore_js_op style="word-wrap: break-word;">

通過選擇紅色的gizmo把手,測試沿着x軸縮放,然后握住向外移動把手。用Inspector的TransformScale x-值來核對只有一個改變了。也試一試y和z軸。
當你玩轉了這些控制按鈕后,在InspectorTransform欄目下重置主攝像頭為下面的設置:
當你玩轉了這些控制按鈕后,在InspectorTransform欄目下重置主攝像頭為下面的設置:
- Position: 0,1,-10
- Rotation: 0,0,0
- Scale: 1,1,1
你的Transform菜單應該看上去像這樣:
在這份教程中,你將要學習其他編輯器界面組件。包括使用Play按鈕來試玩一個游戲和使用Unity調試器。
除了孤獨沒有其他:添加GameObject
現在你已近涉及了一些基本概念,你要開始添加GameObject來給攝像頭作伴 – 只有它自己,確實很孤獨:]
現在相機面對的是一個非常荒涼的世界。 不要害怕 – 准備來添加一個方塊類型的GameObject來代表主角,還有一個平面類型的GameObject來代表主角在上面移動的地板。
當你用Unity來設計一個游戲,最好的實踐是對於要開發的游戲先不要用任何花哨的資源來代表一個主角。在這種方式下,你可以關注優化游戲玩法和主角的移動上,而不被其他圖像元素所分心。
另外一個注意點是Unity是一個很好的游戲引擎,但是你不要想用它來創建圖像資源。在圖形部門,那里應該有許多工具都是相當不錯
的,而Unity善於從范圍較廣的那些工具中導入資源。
的,而Unity善於從范圍較廣的那些工具中導入資源。
通常情況下,典型的游戲開發的分工是,游戲開發使用Unity開發游戲玩法,而美術設計並行的使用他們喜歡的圖像工具創建各種資源。當兩方工作收斂時,這時候導入圖像資源來給游戲增色是合理的。
現在你已近認知了那點,讓我們開始吧!通過選擇Game ObjectCreate OtherPlane.添加一個平面類型的GameObject來代表地面。
這個新的平面GameObject應該出現在Hierarchy視圖中。在Hierarchy視圖中選擇地面,然后使用Inspector設置TransformPosition為 0,0,0.再用Inspector來放大它到50, 1, 50.你的場景將會看上去像這樣:
這個新的平面GameObject應該出現在Hierarchy視圖中。在Hierarchy視圖中選擇地面,然后使用Inspector設置TransformPosition為 0,0,0.再用Inspector來放大它到50, 1, 50.你的場景將會看上去像這樣:
下一步,你將要添加主角GameObject,在你的游戲中將會用一個方塊來表示。就是這樣的,英勇的小方塊!
選擇Game ObjectCreate OtherCube,然后一個新的方塊類型的GameObject將會出現在Hierarchy視圖中。在Hierarchy視圖中選擇這個方塊,然后用Inspector設置TransformPosition為0,0,0.你的場景應該看上去像這樣:
點擊移動工具,然后點擊場景Gizmo的y軸來只在y軸方向有約束的移動。向上移動英勇的小方塊讓它稍稍高於地面(地板)。你也可以設置變換位置到0,1,0來向上移動這個立方體一點點。
現在到了激動人心的時刻了 – 點擊在Unity編輯器的工具條上的Play按鈕(在最上面)來預覽你的游戲:
你正在使用 Unity編輯器測試你的游戲。這個編輯器應該切換到游戲視圖,並且你應該看到像這樣的一些東西
你所看見的游戲的視圖是通過你的場景中的主攝像頭看見的東西。你的主角,這個英勇的小方塊,出現在遠處,地面的上方 – 一個人的世界,但是勇敢的屹立在那里!
因為你還沒有添加任何其他組件來改變玩家的行為,所以游戲中沒有啥事情會發生。另外場景也有一些暗。下一步,你可以首先添加一個光源到你的場景中。
通過再次點擊Play按鈕停止游戲預覽。回到場景視圖,添加一個光源。選擇Game ObjectCreate OtherPoint Light。通常情況下,在今后調整它的位置前移動光源到原點。使用Inspector設置transform position為0,0,0.
因為你還沒有添加任何其他組件來改變玩家的行為,所以游戲中沒有啥事情會發生。另外場景也有一些暗。下一步,你可以首先添加一個光源到你的場景中。
通過再次點擊Play按鈕停止游戲預覽。回到場景視圖,添加一個光源。選擇Game ObjectCreate OtherPoint Light。通常情況下,在今后調整它的位置前移動光源到原點。使用Inspector設置transform position為0,0,0.
現在調整光源的高度和亮度,讓你可以看清場景的更多范圍。這里有個提示:使用移動工具,然后沿着y軸做有約束的移動。
要調整亮度,修改Light組件中的Range和Intensity設置。使用”手型”工具來旋轉,如果你希望得到場景更好的視角。
一個好的方式來觀察你是否有了足夠的光線是使用Game面板切換到Game視圖(相當於點擊Play按鈕)。來回嘗試直到你可以看見你的角色:
當你調整完之后,點擊Play按鈕來合適你的修改。當你切換到游戲視圖,你的視圖應該同下面的相似:
恭喜你,你已近添加了這個教程在這個階段你需要的所有的GameObject!記住,作為一個好的實踐,你首先要把注意力放在游戲玩法上,然后再添加圖像元素。
既然你已經做了一些有意義的事情,繼續前進,保存項目中的場景。一個項目可以有一個或多個場景組成。在游戲中,你可以認為一個場景等同於游戲的一關。
在這個教程中,你保存教程的每個部分作為一個場景。這是人為制造魔種游戲關卡的概念,但是它讓你可以從一個場景到另一個場景,來重用那些資源。
要保存場景,選擇FileSave Scene,在Save Scene對話框中,命名你的場景為Level_1。你的項目視圖應該被你剛才創建的場景所更新。
既然你已經做了一些有意義的事情,繼續前進,保存項目中的場景。一個項目可以有一個或多個場景組成。在游戲中,你可以認為一個場景等同於游戲的一關。
在這個教程中,你保存教程的每個部分作為一個場景。這是人為制造魔種游戲關卡的概念,但是它讓你可以從一個場景到另一個場景,來重用那些資源。
要保存場景,選擇FileSave Scene,在Save Scene對話框中,命名你的場景為Level_1。你的項目視圖應該被你剛才創建的場景所更新。
開始移動:事件函數
游戲目前太靜態了!它迫切需要運動讓它動起來。
你可以通過創建你自己的腳本或者使用預先打包的腳本關聯到相關的GameObject來執行一個動作來添加移動。舉例來說,在這個教程的第一部分,你將會創建一個腳本,當玩家被觸碰的時候,移動你的角色。你創建的這個腳本需要響應觸摸事件來改變英勇的小方塊的位置和旋轉角度。
你可以通過創建你自己的腳本或者使用預先打包的腳本關聯到相關的GameObject來執行一個動作來添加移動。舉例來說,在這個教程的第一部分,你將會創建一個腳本,當玩家被觸碰的時候,移動你的角色。你創建的這個腳本需要響應觸摸事件來改變英勇的小方塊的位置和旋轉角度。
Unity支持以下這些語言來實現腳本化:JavaScript, C#,和 Boo。在這個教材里,你會用到JavaScript. Unity的腳本語言包括預先定義的事件函數,你可以使用這些函數來定義某個GameObject的行為。
- 你將要經常用到的事件函數是Update()函數。如果你在你的腳本里定義這個函數,它會在每幀被調用一次。你的游戲顯示的內容每幀會被重繪一次,因此Update函數在特定的幀率下負責顯示的更新。
一個游戲運行在每秒一定數量的幀率下,另外有一件是需要記住的事是這個幀率非常依賴游戲運行的平台,並且還會被被其他應用占用操作系統的資源。這里的意思是你不應該做任何事件敏感的事情,並且你不能假設它會以固定的頻率被調用。 - 另外一個預先定義的事件函數,FixedUpdate(),會被已固定的頻率, 獨立於剛才提到的幀率來調用。如果你的腳本定義了這個函數,它會以固定的間隔被調用(調用和調用之間與Update方法比較有很大的不同)。
在FixedUpdate函數中,你應該來處理任何物理相關的工作,因為物理的計算是非常時間敏感的。舉例來說,你可以有一個游戲對象使用物理引擎,例如剛體(你會在之后學習到更多這方面的信息)。當這個物件與其他物件碰撞后,你想要計算作用於物件的力,那你就應該在FixedUpdate()函數里做這件事。
對於像是改變物件的位置或旋轉角度等操作,最好是在Update()函數里去做。 - 第三個有用的函數是Start(),它會在第一幀更新發生之前被調用。你一般會把初始化的操作放在這里。
- 最后,Awake()函數當游戲開始的時候被調用。它是另外一個放置初始化代碼的好地方。
對對碰
讓我們來試一試。通過選擇AssetsCreateJavascript創建一個新的腳本。一個帶有缺省名字為NewBehaviorScript新的腳本會出現在項目視圖中。在腳本的名字中單擊,然后重新命名它為MoveSimple。
雙擊腳本打開它。它應該在捆綁Unity編輯器的MonoDevelop中打開,然后包含下列代碼:
雙擊腳本打開它。它應該在捆綁Unity編輯器的MonoDevelop中打開,然后包含下列代碼:
[C#]
純文本查看
復制代碼
1
2
3
4
|
#pragma strict
function Start () {
}
function Update () {
}
|
Start()和Update函數已經為你創建好了,因為它們是常常用到的函數。你現在不需要Start()函數。在#pragma行后面,添加下面的變量來控制英勇的小方塊的移動和旋轉速度:
[C#]
純文本查看
復制代碼
1
|
var speed :
float
= 3.0;
var rotateSpeed :
float
= 10.0;
|
用之后的代碼替換空的Update()函數:
[C#]
純文本查看
復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function Update () {
// Detect mouse left clicks
if
(Input.GetMouseButtonDown(0)) {
// Check if the GameObject is clicked by casting a
// Ray from the main camera to the touched position.
var ray : Ray = Camera.main.ScreenPointToRay
(Input.mousePosition);
var hit : RaycastHit;
// Cast a ray of distance 100, and check if this
// collider is hit.
if
(collider.Raycast (ray, hit, 100.0)) {
// Log a debug message
Debug.Log(
"Moving the target"
);
// Move the target forward
transform.Translate(Vector3.forward * speed);
// Rotate the target along the y-axis
transform.Rotate(Vector3.up * rotateSpeed);
}
else
{
// Clear the debug message
Debug.Log(
""
);
}
}
}
|
保存你的修改。
這段代碼首先查看鼠標的點擊事件,特指來之鼠標左鍵的輸入。參數“0”表示左擊,“1”表示右擊,“2”表示中鍵點擊,當我們使用GetMouseButtonDown函數的時候。如果點擊被監測到,那么代碼構建一條從主攝像頭到鼠標點擊位置的射線。
collider.Raycast()函數監測到關聯這個腳本的碰撞體是否被射線命中。如果碰撞體命中,這個collider.Raycast()調用返回true.這個函數有三個參數:
- 你構建的射線。
- 一個RaycastHit對象,如果碰撞發生,它會包含更多的信息。
- 一個射線長度的參數。
假設有一個true的結果,后面的代碼根據speed變量朝前輕推你的角色,以及基於rotateSpeed變量旋轉你的角色。transform.Translate()來移動GameObject的位置,通過它的Vector3輸入來指定方向和距離。
Vector3是一個3D的向量,表示物件的方向和長度,或矢量。這個向量可以打散成x,y和z三個部分。
在代碼中,你英勇的小方塊是朝前方移動一個乘上速度的變量的的距離。Vector3.forward等同於Vector3(0,0,1),並且速度的乘數是3,將會使方塊移動Vector3(0,0,3)
角色移動的方向是在角色的局部空間里。要體驗這個方向,選中方塊,然后使用move工具,然后查看z軸方向。那是角色將要移動的方向。
transform.Rotate()函數根據Vector3輸入的一個角度旋轉GameObject。歐拉角被用作描述GameObject的旋轉。在這個旋轉的案例里,物件會沿着z軸旋轉歐拉角z度,沿着x軸是歐拉角x度,最后沿着y軸代表歐拉角y度。
在上面的代碼里,使用Vector3.up或者Vector(0, 1, 0)來旋轉角色,它表示沿着y軸旋轉。這個旋轉角度是乘上了旋轉速度。這個旋轉是相對於角色的局部坐標系的。所以你英勇的小方塊會沿着它的y軸旋轉,正如你所知道的,有別於沿着世界坐標系旋轉。
注意:一個真實的游戲不會使用這種類型的移動來控制一個角色。它們用在這里目的是簡單的演示涉及移動GameObject的基本概念,在這個教程之后的部分被更加合理的移動所替代。
這段代碼里包含了兩個Debug.Log()語句。當游戲運行的時候,這個日志輸出被打印到Unity的控制台。你可以在Unity編輯器的底部看到最后的日志的輸出。你也可以通過選擇WindowConsole打開控制台來查看日志的輸出,也包括清除日志。
你也可以把目光保留在Unity編輯器的底部,關注在日志的輸出上,那里有任何腳本的錯誤會被顯示出來。
通過代碼,現在你已經定義了一個行為。你可以分配這個腳本到一個GameObject上。在Hierarchy視圖中選擇那個方塊,然后選擇ComponentScriptsMove Simple。這步稱之為添加一個腳本行為到一個GameObject,你只要選擇你已經創建的(名叫MoveSimple)的腳本。
注意Inspector中現在包含了一個Move Simple腳本欄。你在代碼中定義的公共變量,speed和rotateSpeed,在Inspector視圖中可見了。你可以在不需要修改腳本的前提下,修改這些變量改變被關聯的GameObject行為.
這個意思就是,如果你有兩個角色在場景中都帶有MoveSimple腳本關聯到它們,在InspectorMove SimpleSpeed 字段下,通過增加speed的值,來讓一個角色比另外一個移動的快一些。
點擊Play來試玩游戲,觸碰角色一下,然后注意在Inspector中改變的transform position和rotation屬性。
注意transform position從0,1,0開始變化到0,1,3 – 換句話說,在z軸方向有3單位的移動,是因為speed的乘數的關系。旋轉也從1,1,1變換到1, 10, 1, 這個非常接近rotateSpeed乘數。
當游戲運行的時候,你可以在Inspector中改變速度和旋轉的變量。在點擊角色后,增加速度並且觀察變換位置。
停止游戲,然后注意觀察速度和旋轉角度變量被設置會它們原來的值。任何你在玩游戲的過程中改變的都是臨時的。這讓你有機會搗鼓各種設置,然后返回最初的設置狀態當你已經完成你的預覽。如果你想要持久的變化,你可以在測試游戲之前再次這樣做。
注意當你玩游戲的時候,根據玩家是否被點擊或不被點擊,控制台記錄准確的調試信息。
你會注意到當你移動英勇的小方塊時,他離開攝像頭越來越遠 – 這不是一個好的感覺。就像一個負責任的家長,你希望通過修改你的游戲,讓主攝像頭跟追在你的角色后面,並保持固定的距離。這是第三人稱游戲典型的手法。
選擇AssetsImport PackageScripts然后在Items to Import欄目的中,僅選擇SmoothFollow腳本,然后點擊Import
注意:如果你沒有得到import selection對話框,當你選擇AssetsImport PackageScripts,那么試圖退出Unity然后重新啟動。這點對我來說是有效的。
在你的項目視圖中一個新的Standard Assets文件夾應該會出現在那里。如果你導覽到它的子文件夾下,你應該可以看到也SmoothFollow的腳本。雙擊這個腳本在MonoDevelop中打開它,這樣你看到代碼的關鍵部分。
.
[C#]
純文本查看
復制代碼
|
var target : Transform;
|
上面代表用於被跟蹤目標的公共變量。目標的位置信息用來設置跟隨者的位置和旋轉角度。
跟隨者的位置和旋轉角度在LateUpdate()中設置,這是另一個預先定義的事件函數。這個函數在UPdate()函數完成后被調用。 你可以將依賴那些在Update()發生的操作的代碼放到那里。
當英勇的小方塊的位置和旋轉在MoveSimple腳本中定義的Update()改變后,這個攝像頭可以在SmoothFollow腳本的LateUpdate()中更新它的自己位置和旋轉角度。
跟隨者的位置和旋轉角度在LateUpdate()中設置,這是另一個預先定義的事件函數。這個函數在UPdate()函數完成后被調用。 你可以將依賴那些在Update()發生的操作的代碼放到那里。
當英勇的小方塊的位置和旋轉在MoveSimple腳本中定義的Update()改變后,這個攝像頭可以在SmoothFollow腳本的LateUpdate()中更新它的自己位置和旋轉角度。
[C#]
純文本查看
復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
|
..
var wantedRotationAngle = target.eulerAngles.y;
// 1
var currentRotationAngle = transform.eulerAngles.y;
..
currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
..
var currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);
..
transform.position = target.position;
// 2
transform.position -= currentRotation * Vector3.forward * distance;
transform.position.y = currentHeight;
..
transform.LookAt (target);
// 3
..
|
這里列舉上面代碼的關鍵點:
- 計算跟隨者需要的旋轉的角度,來匹配目標的旋轉。這個旋轉沿着y軸。
- 依賴與distance變量的偏移來讓跟隨者保持在目標后面。也使用來之#1的結果沿着y軸旋轉跟隨者。最后確保跟隨者以高於目標一個固定的高度。
- 確保跟隨者總是面對目標
核對那個為Smooth Follow的新欄目已被添加到主攝像頭的Inspector中。
注意在這點上,Target變量沒有被賦值,有一個None在它邊上。你想要分配一個方塊GameObject到這個輸入上。當主攝像頭仍然被選中的前提下,然后在Inspector中Smooth Follow腳本可見,拖動方塊GameObject從Hierarchyshi視圖到Target變量。另外一個選項是,你可以點擊在Target值邊上那個帶有一個點的小圓圈來得到一個物件的列表來選擇。
Target變量應該鏈接到方塊(你的角色)。
點擊Play按鈕。你應該立即在視圖里看到變化,就像你從一個給定高度向下看着玩家。點擊玩家來移動它,然后觀察攝像頭如何跟隨玩家。注意在Inspector中的主攝像頭位置信息,然后它在英勇小方塊移動時的變化。
停止游戲,然后進入下一步之前保存場景。部署到iOS上如果你像我那樣,你會迫不及待的想看看這如何在iOS設備上運行的。:]好消息是試用版的Unity Pro允許你在iOS上測試你的項目。
在實際設備上測試你的Unity項目是一個好的實踐(i.e. 不是模擬器)。你不想讓你的測試只到模擬器為止,即是你只能做到這點。因為游戲開發特別依賴相關的硬件,你應該在實際的設備上測試,這樣你可以盡早發現性能上的問題。.
要部署到一個iOS設備上,你需要注冊一個Apple的開發者賬號,這樣才可以有設備部署能力。如果你還沒有,去蘋果那里,花掉99美金 – 我們在這里等你.:]
Unity可以為你的游戲創建一個Xcode項目,這讓你可以部署到一個iOS設備上。要完成這步,選擇FileBuild Settings:
選擇iOS平台,然后點擊Switch Platform. 然后點擊Player Setting按鈕,你可以在Build Settings對話框的底部找到這個按鈕。Unity編輯器的Inspector應該顯示Player Settings,這里可以定製你的iOS部署所需要的參數。根據下面來修改:Resolution and Presentation
- Default Orientation: Landscape Left
其他設置
- Bundle Identifier: 需要Bundle Identifier來正確在你的設備上構建你的應用。
- SDK Version: Device SDK
- Target iOS Version: 4.3
回到Build Settings對話框。在Build section的場景列表中添加那個要生成Xcode項目的場景。因為你的項目僅有一個場景,這里不用動腦。通過點擊Add Current按鈕來添加Level_1場景。
點擊Build按鈕來啟動構建的過程。你會被問要指定的位置來保存這個Xcode項目。導覽到你想要保存的的位置來保存你的xcode項目,在Save As字段中輸入DashAndZag,然后選擇保存。Unity會創建這個Xcode項目,然后打開包含xcode項目文件的文件夾。這個項目會有一個叫做Unity-iPhne.xcodeproj的文件。用Xcode打開這個項目,確保scheme設置為Unity-iPhone,選擇你的設備,然后編譯這個項目。
<ignore_js_op style="word-wrap: break-word;">

運行這個應用。你應該首先觀察到一個啟動的屏幕作為Unity缺省的logo.然后,你的游戲應該出現了:
觸碰這個英勇的小方塊然后讓它四處移動。你已經構建和部署了你的第一個Unity項目在iOS上了。(文章轉載自互聯網)