使用Unity做2.5D游戲教程(一)


最近在研究Unity 3D,看了老外Marin Todorov寫的教程很詳細,就翻譯過來以便自己參考,翻譯不好的地方請多包涵。

如果你不了解2.5D游戲是什么,它基本上是個3D游戲而你可以想象是壓扁的,所以游戲是只是沿着2D軸。

一些好的例子是:Super Mario Brothers WiiLittle Big Planet, or Paper Monsters.

一個很好的方法去做2.5D游戲或者3D游戲,是通過一個流行,簡單和價格實惠的游戲開發工具叫做Unity。

所以在這個教程系列里面,我打算讓你看到怎么使用Unity去創作一個簡單的2.5D游戲叫做“Shark Bomber!”

教程目標:

如果你是剛開始接觸Unity,但喜歡學習它,這個教程就針對你。你可以從頭開始一步一步學到怎么去創作一個簡單的游戲。

在這個游戲中,你可以控制一個小的但是全副武裝的飛機,你的工作是去轟炸邪惡的鯊魚,保護那些可愛的小丑魚。

Unity 不使用 Objective-c,所以對與這個教程,你不必具備任何Objective-C 經驗。然而有面向對象語言的經驗是加分的,理想的是 C#,Java,or Actionscript.

請記住,這個是一個Mac環境下開發的用戶教程,windows用戶可能無法精確找到相關設置。所以,請記住,你將只能在ios設備上做測試而不是模擬器。所以一定確保你有一個ios設備。

OK,讓我們潛入Unity,但是確保避免那些鯊魚!

安裝 Unity

首先讓我們安裝這個Unity 工具,如果你已經在你的mac下安裝了就可以跳過此步。

可以參考之前寫過的博客的前半部分:

http://www.cnblogs.com/jiangshiyong/archive/2012/06/20/2555731.html

重要提示:本教程中,您需要選擇“Start Pro / iOS Trial”選項,這樣你就可以發布到AppleStore(而不是簡單的“免費”選項!),或者在破解下只能學習使用,不能發布到AppleStore。

注冊完成后,Unity啟動,你應該看到一個窗口,看起來像這樣:

 

關閉“Welcome to Unity”彈出框,去到File>New Project,選擇一個磁盤上的某個文件夾並命名項目SharkBomber。確保所有的包都取消選中,然后單擊“創建項目。


現在你面對一塊空白的面板。哇,有很多的按鈕,是吧?不要擔心 - 在下一節中,我們會一點一點去了解它們。

1.Unity 編譯器 介紹:

讓我們做一些額外設置,從一個已知配置里面得到一些東西。

在應用程序窗口頂部的右上角你會發現一個選擇框Layouts,從列表中選擇“Tall”.這將重新排列窗口的內容(默認是"Wide"僅供參考)。

現在找到左上角的欄(及在工具欄的下方),叫“Game”,拖動它到底部窗口附近直到你看到它將撲捉到底部的跡象,就把它拖到那吧。

 

 現在你應該看到下方圖片上的布局:

 讓我們快速過一下這些不同的面板:

1.Scene:在這里你可以到處移動你的3D模型,可以瀏覽你的3D世界。

2.Game:這就是你所選的攝像機(主攝像頭)看到的實時畫面直到你使用編譯器。以及當你點擊“Run”時

你的游戲運行,你可以測試你的游戲。

3.Hierarchy:你的對象樹(例如很像HTML DOM),目前你只有一個攝像頭,但我們之后會添加一些東西。列表中的對象目前在現場。

4.Project:這是你項目中的內容,你的資產,音頻文件,一切你現在或以后將要使用到的內容。

5.Inspector:這里你可以看到在場景中所有選定的屬性,你可以調整它們。Unity的獨特之處是,當你運行你的場景時候,Inspector是活動的,所以它也是你的調試工具。

6.Toolbar:這里,你有這些工具來交互在你的場景中的對象,運行和暫停按鈕來測試你的場景,

 在你的Unity3D項目中,你可以有許多不同的場景,你可以在它們之間進行切換。目前,你有一個空的場景在編譯器中打開,讓我們把它保存下來。

   1.在Project面板中單擊右鍵,選擇“Create>Folder”- 一個新的文件夾出現了。

   2.把它重命名為“Scenes”- 你可以通過左鍵單擊文件夾名稱或通過選擇文件夾然后按下“Enter”鍵。

   3.現在,你在主菜單上選擇“File/Save scene”-導航保存對話框到【你的項目目錄】/Assets/Scenes下

     把這個場景命名為“LevelScene”.

 OK - 完成。讓我們來看看 - 在Project面板中打開Scenes文件夾 - 有你的LevelScene場景。爽!

 現在,我們開始准備運行游戲-點擊上面的Play按鈕!沒有太大變化-但事實上你的游戲已經在Game面板中運行了!不要忘記停止該游戲,再次點擊Play按鈕(這一點很重要!)。

 2.設置一個iPhone Unity3D的項目

關於Unity的優點之一是它可以為iPhone ,Mac,Wii和其它平台開發游戲。在本教程中,我們將建立一個iPhone游戲,所以我們需要先設定一些細節。

從菜單欄中,選擇“File>Build Settings”,然后點擊“Add current”按鈕來為你的項目添加目前所選的場景。添加后你可以看到它得到一個序列為0的編號,這意味着它是游戲開始時第一個要加載加載的場景。這正是我們想要的。

從Platform列表中選擇IOS,然后點擊“Switch platform”按鈕。Unity 的logo現在就出現在Ios一行上。

 這是我們所需要的所有設置,單擊“Player settings”,然后關閉這個彈出窗口。你會注意到這個Player setting 在Inspector面板中打開,我們也需要在這里設置幾項事情。

在Inspector面板下的這個“Per-Platform Settings”,確保選擇卡中顯示一個 iPhone圖標選中,如下:

 

這里有很多設置,你從Xcode中了解過它們中的大部分,所以你一會可以自己探索和玩。

現在使用這個Inspector進行以下更改:

    1.在這“Resolution and Presentation”項下,“Default orientation”(默認方向)選擇“Landscape Left”。

  2.在這“Other settings”項下,“Bundle Identifier” 輸入框中填入你想填任意內容(除了給出的默認內容)。

    3.在這“Other setings”項下,設置“Target Device” 為  “iPhone only”。

最后一觸摸:在左下方,這個“Game”標簽下,你有不同的方向/決議去選,-選擇“iPhone Wide(480*320)”來匹配默認的橫向布局。

如圖,紅線圈住的就是這些設置:

 

 

恭喜,你現在有了一個基於“Hello World”的項目,你可以嘗試在你的iPhone上運行。

 

3.在你的iPhone上運行游戲

 為了測試到現在為止我們所做的一切,我們打算在Xcode和你的iPhone上完成測試這個項目。

啟動你最喜愛的Xcode版本 - 關閉歡迎界面如果有一鍵切換回Unity.這是一招Unity如何分辨

用哪個Xcode版本,-只需要運行它。

 回到Unity,從菜單欄中選擇“File>Build&Run”,這將再次彈出這個Build Settings,點擊“Bulid

 and Run”按鈕。

 你會問你在哪里保存你的Xcode項目。在你的項目目錄里面創建一個名為“SharkBomberXcode”文件夾,

(這是你Xcode的東西駐留的地方),作為一個文件名放在“SharkBomber”.

 

過幾分鍾后這個項目被編譯,你將有一個Xcode窗口打開的叫做 Unity-iPhone的項目。Unity已經生成了

Xcode項目源代碼,你現在可以把這個生成的項目通過Xcode編譯和運行。

你可能想看看源代碼 - 但它實際上是一個導入一些框架的樣板,包括一些dll 文件和一些assets(資源文件)

,所以沒有太多你可以玩的。

你有兩個目的,所以確保你的ios 設備是插入的,並且選擇“Unity-iPhone” target和你的設備。(我不能

在模擬器上運行,如果你夠偉大,但現在我只能連上真機運行),

夢想成真 -點擊Run 按鈕,你的Unity 項目現在運行在你的iPhone上。

干得好,你可以看到Unity的默認啟動畫面,並且藍色背景的場景一角有些字“trial version(試用版)”。

停止運行任務,切換回Unity,並且保存你的項目。

4.設置場景

首先讓我們在scene上設置主攝像頭。在“Hierarchy”面板中選擇“Main Camera”,在Inspector面板中找到

“Projection” 並把它設置成 “Orthographic(正楷)”,  "Size" 設置成“10”,在"Clipping Planes " 設置“Near” 為“0.5”,“Far”為“22”。現在你在這個scene里面看到在你的攝像機旁邊有個盒子---這是個界限在這個場景上從你的角度什么將會看到。

請注意我們已經設置相機 “Projection”(投影)為“Orthographic” (正面),這意味着深度坐標不會影響怎么觀看在屏幕上觀看東西--我們將有效地創建一個2D游戲。一會讓我們做一些工作知道你熟悉Unity,然后我們將切換到3D投影。

 設置你的相機Position(位置)(在Inspector面板上)x,y,z軸為【0,0,0】,注意從現在開始,當我寫Position(位置)為[x, y , z]時,就是設置這三個屬性的值。

在這個Project 面板中單擊右鍵,然后選擇“Create/Folder”,場景新文件夾“Textures”.然后下載這個背景圖片

http://cdn5.raywenderlich.com/downloads/background.png

我已經把它跟其它一起放在游戲項目中。下載圖片后,拖拽這個背景圖到你剛剛創建的“Textures” 文件夾中,

完成之后, 選中文件夾“Textures”下的“background” texture,並在左邊的“Inspector”面板中觀察這個紋理

(texture)的屬性:在底部Preview面板中會看到“RGB Compressed PVRTC 4bits.”,所以Unity 發現了我們

導入的紋理(圖片)並把它進行了壓縮。

 

 從菜單欄選擇“GameObject\Create other\Plane”,你會看到在攝像機旁邊有一個藍色長方形。

這個是我們剛剛加到場景(scene)中的飛機,我們接下來應用我們已經得到的紋理。

選中“Hieararchy”面板中的“Plane”,在“Inspector”面板中的頂部一個text filed中 的叫“Plane”輸入

“Background”. 這樣操作改變這個對象的名字,這樣就是讓你怎樣重新命名一個對象。有時候不能

命名成功,你需要再點擊下其它的文本框才行。

 把這個“background”紋理(texture)從“Project”面板中拖拽到"Hierarchy"面板中的“Background”

對象上。在“Inspector”面板中設置這個飛機(剛才的重新命名Background)的位置(position)為

[4, 0, 20],Rotation(旋轉)為 [90, 180, 0],Scale(縮放)為[10, 1, 5],這就是你在“Scene”

面板中面對着相機這個飛機的模型和選擇,這樣這個相機將看到這個飛機作為游戲的背景。

 

 

 現在,為了清楚地看到我們所擁有的場景,我們需要一些光(就像在現實生活中),在菜單欄中選擇

 “GameObject\Create other\Directional Light”,這將會發一些光在你的場景中。在“Hierarchy”

面板中選擇“Directional Light”,並在“Inspector”屬性面板中設置Position位置坐標為【0,0,0】.

現在我們有了所有的設置和場景的背景,現在是時候添加一些對象並讓它們動起來!

5.添加3D對象到場景(Scene)

 從菜單欄中選擇“GameObject\Create other\Cube” ,這樣添加一個立方體到你的場景中。這將是這個游戲

的玩家,所以將它重名為“Player”.設置位置為【-15,5.3,8】.你將會看到這個立方體出現在“Game”面板的屏幕

中的左側--這也是我們的飛機開始啟動的地方,並且將要在海面上移動到達屏幕的另一端。

 

 現在讓我們導入飛機模型!我們將使用免費的3D模型 ,Reiner網站上免費發布的 Reiner`s Tilesets(也看看它的模型的許可http://www.reinerstilesets.de/lizenz/)。開始,下載他的飛機模型(http://www.reinerstilesets.de/zips3d/mesh_airplane_linnen.zip)並對其進行內容進行解壓縮。

 在"Project"面板里點擊右鍵並選擇"Create/Folder",重命名這個文件夾為“Models”.從你剛才解壓縮的飛機模型文件夾中拖拽文件“airplane_linnen_mesh.obj”,並把它放到“Project”面板中的“Models”文件夾中。

 然后右鍵點擊這個“Models”文件夾並選擇“Create/Folder”,並重命名這個新的子文件夾為“Textures”,這里我們可以保存應用到這個模型的紋理文件。拖拽文件“airplane_linnen_tex.bmp”並把它放到最近新建的“Textures”文件夾中。

 下一步,在“Hieratchy”面板中選中這個“Player”對象,然后觀看這個右上角的“Inspector”面板,

那個"Mesh Filter"選項過濾器是條狀的設置你的項目對象的幾何(現在它設置一個立方體的幾何形狀);

在子目錄下里面有個叫“Mesh - Cube”的一行,你會發現一個點在中間的小圓圈,並點擊它 ——

這將打開一個彈出窗口,你應該雙擊這個飛機模型,這將改變的的幾何對象為一個飛機。

  現在一個精致的細節——飛機看起來有點搞砸了。我沒有3D專家,但我發現了怎樣在Unity中修復它:在“Project”面板中選中“airplane_linen_mesh”,然后在"Inspector"面板中找到“Normals”選項並選擇“Calculate”,然后向下滾動滑動條並點擊“Apply”(應用)按鈕。

  酷,現在你在場景中看到一個流暢的飛機!讓我們來使用它的紋理:在你的“Project”面板中拖拽“airplane_linnen_tex”紋理文件,並把它放到“Hierarchy”面板中的“Player”. Unity 自動應用這些紋理到我們的場景中的飛機模型上。

  最后給飛機潤色:為“Player”對象設置 Rotation(旋轉)為 [0,90,350],Scale(縮放) 為[0.7,0.7,0.7],這將對這個飛機進行平面旋轉和縮放,使它看起來像剛飛過海面。下面將要使我們飛機飛!

6.使用C#開始Unity3D編程

 正如我們已在Unity的Build Settings 對話框中所看到,Unity 可以創建你的項目到一個 Wii game,一個iPhone game,獨立的Mac game,等等。因為U,nity就是如此無所不能的中間層,你只需要一次編程你的游戲。一旦它需要某種或不同的構建就可以將它轉換為特定於平台的代碼。

 奇怪的是,在Unity中編程你將使用C#(而非Objective -C!),當Unity生成你的Xcode項目中時,它將C#代碼自動翻譯成特定於平台的代碼。

  在“Project”面板中單擊右鍵並選擇“Create/Folder”,重命名這個新的文件夾為“Class”.右鍵點擊這個“Class”文件夾並選擇“Create/C Sharp Script”,並重命名新文件為“PlayerClass”. 在"Project"

面板中單擊右鍵並選擇“Sync MonoDevelop Project” - 這將打開 MonoDevelop IDE- 只是你可以在C#下編程的IDE.

注意:MonoDevelop是從 Linux中移植過來的程序,正如你所看到的用戶界面皮膚,稱為Gnome(侏儒),所以如果它不時地崩潰是正常的,尤其是當你嘗試改變窗口的大小。如果出現這種情況,只需通過點擊“Sync MonoDevelop Project”重新啟動。

 以上是MonoDevelop GUI的三大塊:

1.瀏覽你的 MonoDevelop項目-在in Assets/Class目錄下你將會發現 PlayerClass.cs文件。

2.目前開源類概況。

3.編輯區——有一些語法高亮顯示和代碼自動完成功能,將有助於你的編碼。

瀏覽你的項目找到 PlayerClass.cs文件,在編輯器中雙擊打開它。確認類看起來如下:

using UnityEngine;
using System.Collections;
public class PlayerClass : MonoBehaviour {
 
	// Use this for initialization
	void Start () {
 
	}
 
	// Update is called once per frame
	void Update () {
 
	}
}

 這個“using”條款包括庫和框架,UnityEngine庫給你些比如能讓你訪問iPhone的加速器,鍵盤輸入和其他方便的東西之類的。

 你可以定義自己的新類並繼承MonoBehaviour,它給你提供了很多免費的東西:當給定事件被觸發時你可以覆蓋被回調的一長串清單方法。

 只需幾行在你空啟動和更新方法下面 -這是2個重要的事件。

   *Start 被調用在你的對象出現在場景的適合,所以你可以進行你的初始化(類似於viewDidAppear:

    in UIController)。

  *Update 被調用在每當每幀渲染(即可能是30​​,60或100次每秒,你永遠不知道多久),這里就是做你的動作,游戲邏輯等

  現在讓我們卻換回Unity一會。我們要使飛機飛過海,當它在場景的右側消失后而在左側再次出現。讓我們來測量下我們需要將飛機移動到距離左邊什么位置。在"Scene"面板的右上角,你會看到方向軸 Gizmo- 點擊

這個X手柄(它是一種紅椎,我將管它叫手柄):

 這個將選擇場景和使它水平朝向你。再次點擊在這個gizmo左邊的手柄--這將旋轉周圍的場景,你可能需要點擊左側的手柄幾次,直到場景看起來像這樣子:

 現在你可以使用鼠標在場景中滾動放大/縮小,並讓它在“Scene”面板中適應大小。確保在上方的工具欄中的移動工具被選中,並在“Hierarchy”面板中選擇這個“Player”.

 現在你看到一個新的gizmo(發明)出現,連接在飛機上一個綠色和一個紅色的箭頭。現在你可以拖動箭頭軸,它們將使飛機沿着箭頭的方向移動:

 你需要做的是點中紅色箭頭(橫軸),並拖拽飛機到右邊知道超出“Game”面板下方。

 開始在“Scene”面板中拖動,同時觀看“Game”面板中的表現。把飛機停留在場景可視范圍之外,並觀看它在“Inspector”面板中的position(位置)。position 的X軸應該在“17.25”附近,-所以這是在場景右邊的邊距,你可以拖拽飛機向左移動距離左邊距坐標為“-17.25”,所以我們將使用“18”和“-18”來包裹飛機的飛行。把飛機帶回到原來在場景左側的位置。

  切換回 MonoDevelop,在PlayerClass.cs文件中坐如下改變:

//just after class declaration line
public float speed;
 
//inside the Update method
if (transform.position.x > 18) {

//get new speed
	speed = Random.Range(8f,12f);
	transform.position = new Vector3( -18f, transform.position.y, transform.position.z );
}		
transform.Translate(0, 0, speed * Time.deltaTime);

  正如你所猜想那樣,你剛才在你的類中定義了一個公共類屬性叫做“speed”,但是Unity的特別之處是所有的公共類屬性都可通過這個“Inspector”面板訪問!

  所以你可以在IDE中設置你類中屬性的值,你可以監視你的屬性值當游戲一邊實時運行時。它是多么的酷啊!

 這個“transform”變量是針對每場游戲對象(場景中的一切都是一個游戲對象)處理對象空間位置:旋轉,位置,縮放等的屬性。因此每次Update的調用是為了變換這個對象的位置,一遍它移動到場景的右邊。

  我們不能只是每次調用 Update時候設置變量讓這個飛機移動,因為沒有人知道每秒到底有多少次被實際調用。 相反,我們定義速度為每秒為單位,從上次調用更新所進過的時間分離出速度(Time.deltaTime).通過這種方式,對象總是獨立於當前幀速率以相同速度移動。

 調用翻轉有三個值--在每個軸上它有翻轉。  你可以注意到 我們移動飛機在z軸上(第三個參數)-我們只能這么做因為我們要在場景中旋轉這個飛機,所以翻轉Z軸把它移動到玩家角度的右側。

  查看"if"語句- 我們檢查 如果transform.position.x大於18(為什么?)。如果如果是的話,我們將飛機的位置設置為相同的數值坐標但是“-18”在X軸。我們使用新建Vector3(x,y,z)設置坐標位置--我們將會使用大量的這些vectors為所有的定位;你注意到我們設置一個隨機速度(8~12),這只是讓飛機更隨機的移動變得更有趣一些。

 這是我們准備看這個飛機移動!

 切換回Unity.從“Project”面板中拖動這個“PlayerClass”文件到“Hierarchy”面板上的“Player”對象上--這樣你就附加一個類到一個游戲對象上。選中“Hierarchy”面板中的“Player”並觀看右側的“Inspector”面板-- 你將會在下方看到一個新的選項出現叫做“Player Class(Script)”,在那里你可以看到新的公共屬性!“Speed”,為它設值“12”。

 ok ,准備好了。點擊Play 按鈕!你可以同時在"Scene"和“Game”面板中看到飛機飛來飛去,從右邊飛出從左邊飛回來。同時可以注意到在“Inspector”面板中Position的X軸也是變化的 -它向你顯示在任何給定的時刻飛機在哪。當然飛機飛行的每時每刻速度都是隨機變化的。

一旦大功告成享受愜意時,不要忘記再次點擊Play按鈕停止這個游戲。

需要休息嗎?沒問題-只需要保存你的Unity項目,你可以稍后再開啟。當你帶個一個Unity項目時候,它默認打開一個空的場景。為了加載你正在工作的場景- 雙擊在“Project”面板中的“LevelScene” -現在你可以繼續工作了。

7.跳動的鯊魚

 下載並解壓縮鯊魚模型(http://www.reinerstilesets.de/zips3d/mesh_shark.zip)。同樣,拖拽這個“shark.obj”文件到“Project”面板中的"Models"文件夾中,拖拽“sharktexture.bmp”文件到“Models/Textures”文件夾下。

 從菜單欄中選擇“GameObject/Create other/Capsule” - 在“Hierarchy”面板中重命名這個“Capsule”對象為“Shark”.

在你的“Project”面板中拖拽“sharktexture.bmp”紋理文件,並把它放到“Hierarchy”面板中的“Shark”上.在“Inspector”面板中的“Mesh Filter”一項中點擊有一點在中間的圓圈,在彈出的窗口中雙擊這個Shark 模型。現在你應該在“Scene”和“Game”面板中看到Shark的幾何形狀。

 從“Project”面板中Models/Textures文件夾下拖拽“sharktexture”到“Hierarchy”面板中的“Shark”對象上- 這會給你的鯊魚一個凶殘的嘴和一對邪惡的眼睛!--我已經准備想轟炸它!

 確認“Shark”對象被選中,然我我們在"Inspector"面板中設置以下屬性::Position – [20, -3, 8], Scale – [1.2, 1.2, 1.2] –這將把鯊魚正好放到攝像機可見范圍的右側。--它將會從這里朝着場景屏幕的左端開始移動。

 

現在我們希望這個鯊魚與我們的炸彈相撞(通過爆炸,轟轟轟)。我們希望這個鯊魚的對撞機或多或少的匹配這個鯊魚的幾何形狀。正如你所看到的那樣在場景中的鯊魚里面有個綠色的膠囊形狀(capsule).這個就是鯊魚的對撞機(collider).讓我們用它匹配這個邪惡鯊魚的型體。

 在“Inspector”面板中找到這個“Capsule Collider” 並進行如下設置:Radius to “1″, Height to “5″, Direction “X-Axis”, Center to [0, 0, 0].現在你可以考到膠囊對撞機(capsule collider)已經旋轉過並且或多或少的更加匹配鯊魚的型體!

 

  最后,在“Project”面板中的“Models”文件夾下選中“shark”模型,然后在"Inspector"面板中找到“Normals”選項並選擇“Calculate”,然后向下滾動滑動條並點擊“Apply”(應用)按鈕。。

  在“Project”面板中單擊右鍵並選擇“Create/Folder”,右鍵點擊“Class”文件夾並選擇“Create/C Sharp Script”,並重命名新文件為“FishClass.”. 在"Project"

面板中單擊右鍵並選擇“Sync MonoDevelop Project”。MonoDevelop(編輯器) 就會彈出來。打開這個“FishClass.cs”文件並在里面添加如下代碼:

using UnityEngine;
using System.Collections;
 
public class FishClass : MonoBehaviour {
 
	public float speed = 6f;
 
	// Update is called once per frame
	void Update () {
		if (transform.position.x < -30 || transform.position.x > 30) {
			//turn around
			transform.Rotate(new Vector3(0,180,0));
			transform.Translate( new Vector3(-10, -transform.position.y + Random.Range(-4,-1),0) );
 
			//get new speed
			speed = Random.Range(6f,10f);
		}
		transform.Translate( new Vector3(-speed*Time.deltaTime,0,0) );
	}
}


 這和我們所擁有的飛機非常相似。我們有個速度屬性(單位為每秒)並在Update事件中處理我們使用transform.Translate來移動這個鯊魚。

 注意這次我使用:

transform.Translate( new Vector3(x,y,z) );

 這只是用來演示其中一些方法可以采用不同的參數 -然而分別通過3個值和1個矢量效果是相同的。 

  現在,讓我們來看看鯊魚當到達屏幕的范圍做什么(-30~30的范圍情況下,所以有一個當鯊魚在屏幕之外的時刻時,你不能很輕易伏擊當它進入時候)。

 當鯊魚到底左右邊界時它會轉身朝着邊界移動一下和改變速度。這樣它只是來來回回,連續來回。

 調用transform.Rotate(new Vector3(x,y,z)),通過給定的值明顯的繞軸選擇物體,transform.Translate(new Vector3(x,y,z))你上次已經知道了。

 很容易!切換回Unity並把這個“FishClass”腳本 放到“Hierarchy”面板中的“Shark”對象上。現在點擊Play按鈕:你可以看到巨大的鯊魚來來回回等待被轟炸。干得好!

 

8.添加小魚

 讓我們做同樣地步驟對我們的小魚對象。我要把它變成一個很好的快速參考列表:

 1.下載並解壓ClownFish model.

 2.拖拽“mesh_clownfish.obj”到“Project”面板中的“Models”文件夾里,並把“clownfish.bmp”放到“Models/Textures”文件夾下。

 3.選擇“GameObject/Create other/Capsule”並在“Hierarchy”面板中重命名這個“Capsule”為“ClownFish”。

 4.點擊“Mesh Filter”下的帶圓點的圓圈按鈕,並從彈出框中雙擊這個clownfish幾何體。

 5.拖拽這個“clownfish”模型紋理到 “Hierarchy”面板的“ClownFish”對象上。

 6.當選中“ClownFish”對象時,在“Inspector”面板中改變以下這些屬性:

  • Position to [-20, -1, 7]
  • Rotation to [0, 180, 0]
  • Scale to [0.4, 0.3, 0.3]

  7.從“Project”面板中拖拽“FishClass”腳本文件到“Hierarchy”的“ClownFish”對象上。這將指派相同的通用的fish class到這個clownfish身上。

  8.選擇在"Project"面板中“Models”文件夾下的“mesh_clownfish”,然后在“Inspector”面板中找到“Normals”並選擇它的“Calculate”選項,然后滑動到下方點擊"Apply"按鈕。

  點擊Play按鈕並觀看發生了什么-- 現在你擁有兩個移動的魚而無需編寫任何額外的代碼!

一切很完美 - 魚類游來游去,飛機海平面飛行。我們需要一些轟炸。

9.設定炸彈

 下載並解壓縮這個Can model.同樣,拖拽這個“colourcan.obj”文件到“Project”面板中的"Models"文件夾下並把“cantex.bmp”文件放到“Models/Textures”文件夾下。

 從菜單欄中選擇“GameObject/Create Other/Capsule”,重命名這個對象為“Bomb”.從這個 “Mesh Filter”彈出框中雙擊這個炸彈罐幾何體。拖拽“Project”面板“Models/Textures”文件夾下的“cantex”紋理到“Hierarchy”面板中的“Bomb”對象上。 在“Inspector”面板中點擊 “Capsule collider”中的這個按鈕 ,出現彈出框:

 

 在出現的彈出框中,選擇“Reset” - 這種方式 對撞機(collider)將自動分配集合尺寸。酷吧!

 接下來選擇“Project”面板“Models”文件夾下的“colourcan”模型,然后在“Inspector”面板中找到“Normals”並選擇“Calculate”選項,然后滑動到下方點擊"Apply"按鈕。

 現在讓我們加入一些新的東西!再次選中這個"bomb"對象,並在“Inspector”面板中找到“Capsule Collider”(膠囊對撞機)中選中這個“Is Trigger”復選框!選中這個可以讓炸彈對象與其他對象碰撞是觸發事件。

  但要做到這一點,我們還需要分配剛體(Rigid Body)炸彈(至少一個碰撞對象需要有一個剛體) 。從菜單欄中選擇“Component/Physics/Rigidbody”(在“Hierarchy”面板中的Bomb對象必須選中)。

 一旦你這樣做,一個新的選項帶出現在“Inspector”面板中叫做“Rigidbody”。取消選中“Use gravity”(使用重力,我們不會利用重力),並勾選上“Is Kinematic”這樣可以控制編程機身。這是所有我們需要啟動的碰撞內容。

 10.預制游戲對象

  請記住“Hierarchy”面板顯示的是目前場景中有什么,“Project”面板中持有你所有的對象?這不得不做一些事情來達到我們的目標 -- 有多少炸彈裝上飛機,它們將釋放入海。

 我們將做什么 ——我們將預制游戲(它將准備設置場景顯示),但是我們不會把它添加到場景,我們要實例化(或者克隆如果你是個科幻小說迷)這個“prefab”(預制)成一個真正的活動場景中的游戲對象。

 在"Project"面板中單擊右鍵並且選擇“Create/Folder”,重命名它為“Prefabs”。右鍵單擊“Prefabs”文件夾並且選擇choose “Create/Prefab”.重命名這個新建的prefab為“BombPrefab”。注意這個小立方體的Icon是白色的——這表示一個空的預制。

 現在——拖拽“Hierarchy”面板中的"Bomb"到“Project”面板中的“BombPrefab”上。注意這個立方體的icon現在變為藍色——意味着是一個完整的預制,准備被克隆。同樣重要的——現在觀看“Hierarchy”面板——“Bomb”字體變成了藍色——這意味着現在這個對象是一個預制的實例。

 現在,我們有自己的炸彈集合,我們並不需要場景中原來的炸彈——右鍵單擊“Hierarchy”面板中的"Bomb"對象並選擇"Delete"。

 讓我們Coding! 切換回MonoDevelop編輯器,並打開PlayerClass.cs文件,在“speed”屬性聲明廈門添加:

public GameObject bombPrefab;

 你猜到了嗎?在這個屬性中我們將對BombPrefab保留引用並且按照我們的意願行事。注意屬性的類型為“GameObject”,正如我早前說過的那樣游戲中所有的東西都是一個GameObject(很像Cocoa中的NSObject),所以它是安全的為任何事物設置這樣的類型。

  現在切換回Unity並選擇“Hierarchy”面板中的“Palyer”對象。正如你期望那樣,在“Inspector”面板中在“Player Class(Script)”下有一個新的屬性“BombPrefab”。讓我們設置它的值:從“Project”面板中拖拽“BombPrefab”到“Inspector”面板中叫“None(GameObject)”上邊——現在這個字段表示BombPrefab預制附加了值。

  我們將需要為子彈創建一個C# class,在“Project”面板中“Class”文件夾上右鍵單擊並選擇“Create/C Sharp Script”,重命名為“BombClass”。右鍵單擊並選擇“Sync MonoDevelop Project”——MonoDevelop工具彈出。打開BombClass.cs並用下面代碼替換內容:

using UnityEngine;
using System.Collections;
 
public class BombClass : MonoBehaviour {
	private float ySpeed = -4f;
 
	// Update is called once per frame
	void Update () {
		transform.Translate( new Vector3(0f, ySpeed*Time.deltaTime, 0f) );
		if (transform.position.y < -11) {
			Destroy(this.gameObject);
		}
	}
}

 到目前為止這非常類似於我們所做過的一切——我們translate對象的每一幀,當超出屏幕邊界時候做出適當的反應。在這個炸彈的事例中,我們只是要銷毀對象 ,因為我們總是可以從bomb  prefab(炸彈預制)中制造新的。

 在代碼中注意到 “this”指的是這個C# bomb class,而這個gameObject屬性指的是在場景中的對象,所以我們銷毀在場景中的對象並把它鏈接到所有的組件上。  在第二部分中,我們將會掉的游戲對象的層次結構,當你訪問組件附加到對象的編程。

 

11.轟炸鯊魚

 你一直在等待最后一部分——無極的暴力:

 打開PlayerClass.cs文件,在Update方法的末尾添加:

if (Input.anyKeyDown) {
	GameObject bombObject = (GameObject)Instantiate(bombPrefab);
	bombObject.transform.position = this.gameObject.transform.position;

}

 讓我們解釋這些代碼行::

 1.Input是讓你存取鍵盤,鼠標,加速器和觸摸的類。 當一個鍵被按下時 Input.anyKeyDown是 true,這只發生一次。,即按鈕第一次按下時。然后直到另一個鍵被按下時Input.anyKeyDown 再次是 false。anyKeyDown實際上是一個方便的抽象對象——它實際上是true當一個鼠標按鈕被點擊時,或鍵盤按鍵按下或iPhone屏幕上的觸摸點擊。

 2.(GameObject)實例化(bombPrefab)是個神奇的線,沖一個預制(prefab)創建一個實例,並將其添加到場景中。

 3.最后我們設置炸彈的position位置跟飛機使相同的。

 酷——我們創建了我們的炸彈當玩家點擊屏幕時候,它開始往下掉並且超出屏幕時它會自己銷毀。

 讓我們嘗試一下它!切換回Unity並點擊Play按鈕——現在如果你在“Game”面板中點擊,你會看到一個炸彈在飛機的位置點上創建。

  點擊很多次——很多炸彈被創建。你應該聽到炸彈的聲音。但炸彈降落不下來!為什么呢?你已經能自己找到問題的解決方法嗎?答案稍后公布。

 

我希望你想通了,但這里的問題是:你尚未分配這個BombClass腳本到這個 Bomb Prefab(預定炸彈身上),這是為什么降落不下來的原因。在“Project”面板中的"Class"文件夾下拖拽BombClass文件到同樣面板下的“Prefabs”文件夾中的“BombPrefab”文件上。在“Inspector”面板中,如果你看到Bomb Class Script框請勾選住。現在再次點擊Play按鈕。

 

  現在還不是十全十美——這些鯊魚當你打它們時不會死。既然我們已經配置了(colliders)對撞機和剛體組件的炸彈,我們只需要添加代碼來響應碰撞。切換回MonoDevelop編輯器中,並添加如下代碼到BombClass類中:

void OnTriggerEnter(Collider obj) {
	if (obj.gameObject.name == "Shark") {
		//reset shark
		obj.gameObject.transform.rotation = Quaternion.identity;
		obj.gameObject.transform.position = new Vector3(20f, -3f, 8f);
		Destroy(this.gameObject);
	}
}


 讓我們再次解釋這些代碼行:

  1. OnTriggerEnter是個方法調用,當這個剛體附着與另一個剛體碰撞時,第二個剛體作為一個參數傳遞。

  2.這里,我們檢查炸彈命中的對象是否是“Shark”;

  3.如果這個鯊魚被命中,然后第一對象旋轉復位。

  4.第二,我們設置鯊魚回到原來的位置。

  5.最后我們調用 destroy this.gameObject方法,使炸彈從場景中消失。

  很容易!難道不是嗎?這是所有你需要的——切換回Unity,運行你的游戲! 命中鯊魚消失,新的鯊魚又進來了。

 

  你可以選擇菜單欄 “File/Build&Run”,然后當Xcode彈出框出現,點擊“Run”,現在你擁有了iPhone上的游戲! 

 

 

源代碼如下:sample project

在本系列的第2部分,我們要提升一下檔次,使這個游戲真的富有挑戰性和樂趣!

 如需轉載,請注明翻譯出處 http://www.cnblogs.com/jiangshiyong/p/3074917.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM