用unity編寫遊戲:初學者指南

在不斷髮展的獨立遊戲開發領域,Unity已經成為一種事實上的標準:它的低成本、易用性和廣泛的功能集使它成為快速遊戲開發的理想選擇。...

This guide is available to download as a free PDF. Download this file now. Feel free to copy and share this with your friends and family.

互聯網經濟的一個令人驚訝的特點是獨立電子遊戲的興起。曾經是千人、數百萬美元的三甲工作室的專屬領域,現在已經開發出許多工具集,將現代遊戲開發資源帶到個人或程序員和設計師的小型臨時集合手中。我們之前討論過最好的獨立遊戲,所以一定要查看這些遊戲,以獲得一些關於Unity等工具可以實現什麼的靈感。

unity-feat

這些獨立遊戲開發團隊表現出了靈活性和風險承受能力,在許多情況下,這使得他們能夠比他們的大預算對手更快地推動遊戲創新。近年來,有許多令人震驚的成功獨立遊戲首映,包括Minecraft、Limbo和Super Meat Boy,即使你不需要技能來**這樣的遊戲,你也可以使用Buildbox來**遊戲。

在快速發展的獨立遊戲開發領域,Unity已經成為事實上的標準:它的低成本、易用性和廣泛的功能集使它成為快速遊戲開發的理想選擇。統一是如此靈活,你甚至可以使自己的自定義遊戲控制器與一點DIY的訣竅!

甚至像***(eveonline的開發者)這樣的大型工作室也使用它來快速原型化遊戲概念。Unity提供了一個“盒子裡的遊戲引擎”--一個物理和渲染引擎,帶有幾種腳本語言的掛鉤,幾乎可以適應任何類型的視頻遊戲。

雖然Unity確實提供了一個可視化的編輯器來操作遊戲環境,但Unity並不是一個“零編程”的遊戲創建者工具。它要求你通過編程來產生結果,但同時也給了你一個比任何“遊戲**者”程序都要靈活和強大得多的工具。

團結不會為你做的工作,但它確實大大降低了進入的門檻。從頭開始完全用C++和OpenGL,它可能需要幾天的時間點,那裡實際上有東西呈現在屏幕上。使用Unity,大約需要10秒鐘。Unity以一種快速、直觀的方式將遊戲創建的基本元素交給新手程序員。

今天我將指導您完成在Unity中**遊戲所需的所有知識,遊戲分為十個主要章節:

§1–統一版本

§2–安裝Unity

§3–面向對象範例簡介

§4–統一基礎

§5–示例:遊戲的基本元素

§6–統一腳本

§7–示例:腳本編寫Pong

§8–探索文檔/瞭解更多

§9–構建遊戲/編譯為獨立應用程序

§10閉幕詞

1統一的版本

Unity有兩種基本風格:專業版和免費版。有很多不同之處,但從廣義上講,pro版本支持許多視覺改進(如實時軟陰影和後處理),以及大量相對次要的功能,這些功能對更復雜的遊戲非常有幫助。

也就是說,對於您可能想要構建的大多數相對簡單的遊戲來說,Unity的免費版本已經足夠了。對於感興趣的人,我們將在下面更詳細地分解關鍵差異。

1.1定價

統一的自由版本當然是自由的。但是,有一些限制:免費版的Unity不能授權給任何年收入超過10萬美元的公司。雖然這樣的組織超出了本指南的範圍,但如果您懷疑自己可能會成為這樣的組織,那麼使用spring的Pro版本可能是明智的。

Unity的專業版是每月75美元,永久許可證是1500美元,並且對你用它創建的遊戲沒有限制。我們將在本指南中使用30天的****期,以便您儘可能完整地瞭解可用功能。Studica還提供為期一年的學生執照,費用為129美元。

1.2特點

Unity的免費版本中缺少許多特性。但是,最重要的區別如下:Unity的免費版本缺少許多渲染選項,這些選項可以讓遊戲看起來更好、運行更快(LOD支持、屏幕空間後處理、高級著色器、實時軟陰影和延遲渲染)。它還缺乏完整的mechanim動畫系統和一些人工智能工具。

一般來說,對於複雜的、大規模的項目,或者圖形性能很重要的項目,pro版本是值得的。我使用的是pro版本,因為我為Oculus Rift開發了虛擬現實遊戲,並且屏幕空間的後期處理支持是正確與耳機交互所必需的。

2安裝unity

Unity很容易安裝。您可以從unity3d.com/get-unity/download下載可執行文件。

下載後,運行它,然後按照安裝程序的說明進行操作。安裝完成後,將出現一個標題為“激活Unity許可證”的窗口。選中標有“激活Unity Pro 30天****版”的複選框,然後選擇“確定”。

祝賀 你!你現在有一個30天的統一親審判。試用期滿後,如果您不想購買專業版,可以切換到免費版,保留現有內容。

三。面向對象範式簡介

在開始使用Unity之前,重要的是我們要稍微複習一下基礎知識。Unity支持C#和JavaScript進行遊戲編程;我們將在本教程中使用C#。

首先,如果您以前從未編程過,請將本教程放在一邊,花幾天時間學習Microsoft的C語言入門,直到您覺得使用該語言完成簡單任務很舒服為止。

如果您希望與C#有些不同(但不一定是一種可以在Unity中使用的語言),那麼請參閱我們的指南,為初學者提供六種最簡單的編程語言。

如果您以前使用命令式或面嚮對象語言(如C或Java)進行過編程,請瀏覽入門知識,熟悉C與過去使用的其他語言的區別。不管是哪種方式,在你覺得用C#解決簡單的問題很舒服之前不要繼續學習教程(例如,如果我讓你寫一個打印前100個素數的程序,你應該可以不用諮詢Google就可以寫這個程序)。

這裡要理解的最重要的概念是面向對象的範例(簡稱OOP)。在面嚮對象語言中,程序被劃分為稱為對象的功能單元。每個對象都有自己的私有變量和函數。特定於對象的函數稱為方法。

這裡的想法是模塊化:通過隔離每個對象,並通過其方法強制其他對象與之交互,您可以減少可能的無意交互的數量,並擴展為bug。您也可以創建對象,您可以在以後不進行修改的情況下重用。在統一中,您將構建這些對象並將它們附加到遊戲實體(它們將管理其行為)。

對象是從類實例化的:類只是一個列出對象定義的文件。所以,如果你想要一個Mook對象來處理遊戲中敵人的AI,你可以編寫一個“Mook”類,然後將這個文件附加到每個敵人實體上。當你運行遊戲時,每個敵人都會裝備一個“Mook”物體的副本。

將新腳本附加到對象如下所示:

007Ys3FFgy1h1oi25956sj31hc0u0dj1

首先,選擇對象並轉到檢查器。單擊“添加組件”按鈕。

007Ys3FFgy1h1oi263wvwj31hc0u0diy

轉到“新建腳本”,輸入所需的名稱,然後單擊“創建並添加”。

007Ys3FFgy1h1oi26zmj7j31hc0u077p

現在你有一個新的腳本,你可以編輯雙擊它!

類文件如下所示:

using UnityEngine;public class Mook : MonoBehaviour { private float health; void Start () { health = 100; } void Update(){ if (health > 0) { /* Search for player if you encounter the player on the road, kill him if you get shot, remove a random amount of health */ } }}

我們來分解一下:

  • 使用UnityEngine:這行告訴C#我們想使用Unity的庫,它允許我們連接到Unity遊戲引擎。
  • 公共課Mook:Mono行為:這條線聲明類及其名稱--Mook。
  • Private float health:它聲明一個私有類變量(只能從類內部更改)。變量在Start中給定一個值。
  • Void Start():聲明一個名為Start的方法。啟動是一種特殊的方法,只在遊戲啟動時運行一次。
  • Void Update():Update是另一種特殊方法,它在每一幀上運行。你的大部分遊戲邏輯都在這裡。
  • //如果你在路上遇到玩家,殺了他:這一行是評論(任何以雙斜槓開頭的行都會被C#忽略)。註釋是用來提醒自己特定代碼的作用。在本例中,此註釋用於替代一個更復雜的代碼塊,該代碼塊實際執行註釋所描述的操作。

除了Start和Update之外,您還可以用幾乎任何名稱實例化自己的方法。但是,您創建的方法除非被調用,否則不會運行。讓我們為一個名為addTwoNumbers的假設類聲明一個方法,該類將兩個數字相加:

public float addTwoNumbers(float a, float b) { return a+b;}

這聲明瞭一個public(可供其他對象訪問)方法,該方法返回一個名為addTwoNumbers的float,該方法將兩個float作為輸入(稱為a和b)。然後返回兩個值之和作為輸出。

從同一類中調用此方法(例如,從內部更新)如下所示:

float result = addTwoNumbers(1, 2);

從另一個類調用方法類似:

addTwoNumbers instance;float result = instance.addTwoNumbers(1, 2);

同樣,這只是創建我們類的一個實例,訪問適當的方法並向它提供我們想要添加的數字,然後將結果存儲在result中。很簡單。

如果你的腳本附加到一個對象上,而這個對象有一些特殊的屬性(比如粒子發射器),而這些屬性在正常的遊戲對象參數集下是無法訪問的,那麼你可以選擇使用GetComponent方法將其視為一個不同類型的遊戲實體。

其語法如下所示:

GetComponent<ParticleSystem>().Play();

如果你不熟悉這些內容,請回到C#入門。在我們繼續的過程中,這會讓你省去很多挫折。

4統一基礎

在本節中,我們將學習Unity引擎的基本機制。Unity中的工作流是這樣的:

  1. 創建一個實體來服務於遊戲中的角色(空白的遊戲對象可以用於抽象的邏輯任務)。
  2. 編寫或查找一個類文件,並將其作為腳本添加到實體中(使用inspector視圖中的addcomponent按鈕)。
  3. 運行&gt;測試&gt;調試&gt;重複,直到它工作,然後繼續遊戲的下一個元素。

Unity提供了許多基本視圖選項卡,可以根據用戶的喜好以各種方式進行佈局。五大要素是:

  1. 遊戲:顯示可與之交互和測試的遊戲的運行實例。
  2. 場景:提供遊戲世界的靜態、可編輯版本。
  3. 檢查器:允許您通過在編輯器選項卡中選擇來修改遊戲世界中的單個實體。
  4. 項目:允許您瀏覽項目的文件,並將模型、材質和其他資源拖到編輯器選項卡中,以將它們放置在遊戲世界中。
  5. 層次:此選項卡顯示世界上的所有對象,允許您在場景中查找遠處的對象,並通過單擊和拖動將實體彼此關聯。

所有這些東西的位置見下圖:

007Ys3FFgy1h1oi27qrr1j31hc0u0go9

4.1統一實體

4.1.1網格

網格是三維幾何體統一表示的方式。您可以使用Unity的內置基本體對象(立方體、球體、圓柱體等),也可以從Blender或Maya等建模軟件包中導入自己的3D模型。Unity支持多種3D格式,包括.fbx和.3ds。

操縱網格的基本工具是界面左上角的縮放、旋轉和平移按鈕。這些按鈕將控制圖標添加到編輯器視圖中的模型中,然後可以使用編輯器視圖在空間中操縱它們。若要更改對象的紋理或物理特性,請選擇它們並使用“檢查器”視圖分析材質和剛體元素。

4.1.2 gui元素

傳統的GUI精靈和文本可以在編輯器中使用GUI文本和GUI紋理遊戲對象來顯示。但是,處理UI元素的一種更健壯、更真實的方法是使用3D文本和Quad GameObjects(具有透明紋理和無光透明著色器)將HUD元素作為實體放置到遊戲世界中。

在層次視圖中,可以將這些遊戲性元素拖到主攝影機上,使其成為子對象,確保它們隨攝影機移動和旋轉。

GUI元素(文本和紋理)可以使用inspector選項卡中的相關字段調整其大小和比例。

4.1.3材料

材質是紋理和著色器的組合,可以從“項目”選項卡直接拖動到遊戲對象上。Unity Pro附帶了大量明暗器,您可以使用應用這些明暗器的對象的“檢查器”選項卡調整附加到明暗器的紋理。

若要導入紋理,請將其轉換為.jpg、.png或.bmp,然後將其拖動到Unity項目目錄下的assets文件夾中(默認情況下,該文件夾顯示在“我的文檔”中)。幾秒鐘後,一個加載條將出現在編輯器中。完成後,您可以在“項目”選項卡下找到作為紋理的圖像。

4.1.5燈光

燈光是一種遊戲物體,它將光線投射到世界上。如果場景中沒有燈光,則將以相同的亮度級別繪製所有多邊形,從而使世界看起來平坦、褪色。

可以對燈光進行定位、旋轉,並且可以自定義多個內部特徵。“強度”滑塊控制燈光的亮度,範圍控制燈光淡出的速度。

場景視圖中的指導線顯示照明的最大範圍。使用這兩種設置可以達到所需的效果。您還可以調整燈光的顏色、燈光所指向的表面上顯示的圖案(cookie),以及當您直視燈光時屏幕上顯示的光斑類型。cookie可以用來偽造更真實的光照模式,創建戲劇性的假陰影,並模擬投影儀。

三種主要的光是聚光燈、點光源和定向光源。

聚光燈在三維空間中有一個位置,在一個可變角度的圓錐體中只向一個方向投射燈光。這些是好的手電筒,探照燈,一般來說,給你更精確的控制照明。聚光燈可以投射陰影。

點光源在三維空間中有一個位置,並在所有方向上均勻地投射燈光。點光源不投射陰影。

最後,平行光被用來模擬陽光:它們將光線投射到一個方向上,就像從無限遠的地方射出一樣。平行光影響場景中的每個對象,並且可以產生陰影。

4.1.6粒子系統

粒子系統是一個遊戲對象,可以同時生成和控制數百或數千個粒子。粒子是在三維空間中顯示的小而優化的二維對象。粒子系統使用簡化的渲染和物理,但可以實時顯示數千個實體而不結巴,使它們成為煙、火、雨、火花、魔術效果等的理想選擇。

可以調整許多參數以實現這些效果,並且可以通過在“組件編輯器”(component editor)&gt;“選擇粒子系統”(selecting the particle system)&gt;“打開檢查器”(inspector)選項卡下生成粒子系統來訪問這些參數。您可以更改每個粒子的大小、速度、方向、旋轉、顏色和紋理,並設置其中大多數參數以隨時間而更改。

在“碰撞”(collision)屬性下,如果啟用該屬性並將“模擬空間”(simulation space)設定為“世界”(world),則將獲得與世界中的對象碰撞的粒子,這些粒子可用於許多真實的粒子效果,包括雨、移動的水和火花。

5示例:遊戲的基本元素

在本教程中,我們將**一個簡單的乒乓球遊戲——我們之前在DIY中已經討論過幾次了:

  • Arduino經典乒乓球
  • Arduino OLED龐

在本節中,我們將討論如何安排核心元素——腳本教程將在後面介紹。

首先,讓我們把乒乓球遊戲分解成它的基本組成部分。首先,我們需要兩個槳和一個球。球飛離屏幕,所以我們需要一個機制來重置它。我們還希望文本顯示當前的分數,並且,為了向您顯示統一的所有核心元素,我們希望在您擊球時使用奇特的粒子效果。整個遊戲將需要戲劇性地點燃。

它分解為一個球對象(一個球體)、一個產卵器、兩個帶有粒子發射器的槳道具、一個三維文本實體和一個聚光燈。在本教程中,我們將使用默認的physic材質bounce,並將bounce combine設置為乘法。以下是10個屏幕截圖中的設置:

007Ys3FFgy1h1oi28g1snj31hc0u0wgo

007Ys3FFgy1h1oi299mgpj31hc0u0772

首先,創建一個立方體槳道具。

007Ys3FFgy1h1oi2a3buyj31hc0u0776

適當地縮放它,複製它,並在球的槳之間放置一個球體。

007Ys3FFgy1h1oi2axenlj31hc0u076r

然後,創建一個3DText對象,並對其進行縮放和正確定位,更改“字體大小”屬性以獲得像素較少的圖像。

007Ys3FFgy1h1oi2bpj2mj31hc0u041g

接下來,創建兩個粒子系統,拾取所需的特徵,並將它們附加到槳上。

007Ys3FFgy1h1oi2clrajj31hc0u0adi

007Ys3FFgy1h1p5qc1a2rj31hc0u0n03

接下來,您將要定位並旋轉攝影機,以便它正確地設置場景的幀。選擇相機時,您可以在右下角看到相機視圖的小預覽。

007Ys3FFgy1h1oi2e6h0vj31hc0u0who

在我們完成之前,我們需要創建兩個額外的立方體作為緩衝器,以防止球反彈出遊戲區域。我們可以通過取消選中“檢查器”選項卡中的“網格渲染器”使它們不可見。

007Ys3FFgy1h1oi2f1lr6j31hc0u0mza

007Ys3FFgy1h1oi2ftfupj31hc0u0jue

如果你點擊play,你現在可以看到我們遊戲的基本元素。他們什麼也不會做,但我們會做到的!

007Ys3FFgy1h1oi2gh5c2j31hc0u0dha

現在我們已經有了這個設置,我們將討論編寫這些元素來**遊戲所涉及的內容。

6統一腳本

將腳本附加到對象後,可以通過在檢查器中雙擊它來修改它。這將打開MonoDevelop,這是Unity的默認開發環境。從本質上講,Monodevelop是一個文本編輯器,它具有專門針對編程優化的特性。

關鍵字和註釋以藍色和綠色突出顯示,數值和字符串以紅色顯示。如果您使用過Eclipse或其他IDE,MonoDevelop非常類似。您可以從編輯器內部構建腳本,以檢查語法錯誤,如下所示:

007Ys3FFgy1h1oi2he5efj31hc0u078y

一般來說,要使腳本與Unity交互,需要引用包含腳本的對象所擁有的元素(選中相關對象時,可以在inspector選項卡下看到這些元素的列表)。然後可以為每個元素調用方法或設置變量,以執行所需的更改。

如果希望對象上的腳本影響其他對象的屬性,可以在腳本中創建一個空的GameObject變量,並使用檢查器將其指定給場景中的另一個對象。

對象可能具有的元素列表如下(取自上例中我們的一個槳的inspector視圖):

  1. 變換
  2. 立方體(網狀過濾器)
  3. 盒子碰撞器
  4. 網格渲染器

對象的每個方面都可以從腳本中受到影響。下一步,我們來看看到底怎麼做。

6.1轉換

Unity中游戲對象的變換函數控制該對象的物理參數:其比例、位置和方向。您可以從以下腳本中訪問它們:

transform.position = newPositionVector3;transform.rotation = newRotationQuaternion;transform.localScale = newScaleVector3;

在上面的例子中,命名變量是在名稱中指定的類型。這裡有一些關鍵的細節:如您所料,位置和比例存儲為矢量3。您可以訪問每個矢量的X、Y和Z分量(例如,變換位置.y給出對象在零平面以上的距離)。

但是,為了避免萬向節鎖定,旋轉被處理為四元數(四個分量向量)。因為手動操作四元數是非直觀的,所以可以使用四元數。歐拉方法如下:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

如果您希望將對象從一個地方平滑地移動到另一個地方,您會發現四元數和向量的Slerp方法很有用。Slerp接受三個參數——當前狀態、最終狀態和變化速度,並以給定的速度在它們之間進行平滑插值。語法如下所示:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2渲染器

Unity中的渲染器函數允許您控制在屏幕上渲染道具表面的方式。可以重新指定紋理、更改顏色以及更改對象的明暗器和可見性。語法如下所示:

renderer.enabled = false; renderer.material.color = new Color(0, 255, 0); renderer.material.mainTexture = myTexture; renderer.material.shader = newShader;

其中大多數都有非常明確的功能。第一個示例使所討論的對象不可見:在許多情況下這是一個有用的技巧。第二個示例為所討論的對象指定新的RGB顏色(即綠色)。第三個將主漫反射紋理指定給新的紋理變量。最後一個示例將對象材質的著色器更改為新定義的著色器變量。

6.3物理

Unity附帶了一個集成的物理引擎——物理沙盒遊戲都使用這個引擎。這允許您指定對象的物理特性,並讓您處理其模擬的詳細信息。總的來說,與其嘗試使用教科書和轉換系統來實現自己的物理,不如儘可能地使用Unity的物理引擎更簡單、更健壯。

所有的物理道具都需要對撞機。但是,實際的模擬本身是由一個剛體來處理的,這個剛體可以添加到inspector視圖中。剛體可以是運動學的,也可以是非運動學的。

運動學物理道具與其周圍的非運動學物理道具碰撞(併產生效果),但不受碰撞本身的影響。靜態運動道具是眾所周知的不可移動的物體,而移動的運動物體是眾所周知的不可阻擋的力量(記錄在案,當它們碰撞時,它們只是相互穿過)。

除此之外,您還可以調整對象的角阻力(旋轉它所需的能量),更改其質量,指示它是否受重力影響,並對其應用力。

示例:

rigidbody.angularDrag = 0.1f;rigidbody.mass = 100;rigidbody.isKinematic = false;rigidbody.useGravity = true;rigidbody.AddForce(transform.forward * 100);

這些都是不言自明的。這裡唯一要注意的是向前轉換. Vector3都有三個組件(.forward、.up和.right)與之關聯,可以訪問它們並隨它們一起旋轉(forward是編輯器中藍色箭頭的方向)。這個向前轉換關鍵字只是當前對象的前向向量,大小為1。它可以乘以一個浮點數在物體上產生更多的力。你也可以參考轉換向上以及轉換。右,並否定它們得到相反的結果。

6.4碰撞

通常,在構建遊戲時,您希望衝突導致代碼中的狀態發生一些變化,而不僅僅是物理模擬。為此,需要一種碰撞檢測方法。

需要做一定的準備工作來檢測統一體中的碰撞。首先,碰撞中至少有一個物體需要附加一個非運動學剛體。兩個對象都必須有正確的碰撞器,設置為非觸發器。兩個物體的總速度必須足夠低,以使它們真正碰撞,而不是簡單地跳過另一個物體。

如果您已經處理了所有這些,您可以通過在附加到要檢查碰撞的對象的腳本中放置一個特殊的碰撞檢測方法來檢查碰撞。方法如下所示:

void OnCollisionEnter(Collision other) { //do things here}

此方法將在另一個對象與您的對象接觸的第一幀期間自動運行。碰撞實體other是對所擊中對象的引用。例如,您可以引用它的遊戲對象、剛體和變換特徵以各種方式操縱它。雖然OnCollisionEnter可能是您將要使用的最常見的函數,但是您也可以使用oncollisionxit和OnCollisionStay(使用其他相同的語法和用法),它們分別在您停止與對象碰撞的第一幀和與對象碰撞的每一幀期間激活。

有時,進行所謂的光線投射也很有用。在光線投射中,一條無限細的線(光線)從某個原點沿著某個向量投射到世界上,當它擊中某個物體時,第一次碰撞的位置和其他細節就會返回。光線投射的代碼如下所示:

RaycastHit hit;if (Physics.Raycast(transform.position, -Vector3.up, out hit)) { float distanceToGround = hit.distance;}

這將從當前對象的位置沿-Vector3.up(筆直向下)投射光線,並將變量hit鏈接到與其碰撞的第一個對象。一旦你的射線擊中了什麼東西,你就可以進入命中距離去確定它有多遠,或者命中游戲對象操縱你擊中的物體。

像這樣的光線投射可以被射手用來確定槍指向的是什麼,或者在相機注視對象時選擇對象,或者用於某些類型的運動。

6.5時間校正

以這種方式操縱對象時要記住的一個重要因素是幀速率。無論你如何小心地優化,幀速率總是會變化的,你不希望你的遊戲速度也會相應地變化。如果其他人在比你開發的更快的計算機上運行你的遊戲,你不希望遊戲以雙倍的速度運行。

糾正這種情況的方法是將使用的值乘以渲染最後一幀所用的時間。這是通過使用時間.deltaTime. 這有效地改變了每幀遞增的任何變量的速度,從“每幀更改”到“每秒鐘更改”,您可能應該對每幀遞增或遞減的任何值進行更改。

6.6音頻源和監聽器

既然我們已經討論瞭如何創建、渲染和控制對象,那麼讓我們來談談計算機遊戲可以提供的另一種意義:即聲音。Unity支持兩種聲音:2D和3D聲音。3D聲音會根據距離的不同而改變音量,當它們相對於相機移動時會失真;2D聲音則不會。

2D聲音適用於畫外音和背景音樂,3D聲音適用於世界上發生的事件產生的聲音。要更改聲音是否為3D,請在項目視圖中選擇它,切換到inspector視圖並從下拉菜單中選擇相應的選項,然後按“重新導入”按鈕。

為了實際播放聲音,您需要將音頻源附加到道具(在3D聲音的情況下,您希望聲音源自的道具)。然後您需要打開audioclip字段並選擇您的聲音文件。

你可以用myAudioSource。暫停()和我的音頻源。播放()來控制這些聲音文件。您可以在audiosource的inspector選項卡下調整聲音的衰減行為、音量和多普勒頻移。

6.7輸入

一個不接受用戶任何輸入的遊戲並不是什麼遊戲。有很多不同類型的輸入可以讀入,幾乎所有的輸入都可以通過input和KeyCode對象訪問。下面是一些示例輸入語句(每幀計算一個值)。

Vector3 mousePos = Input.mousePosition;bool isLeftClicking = Input.GetMouseButton(0);bool isPressingSpace = Input.GetKey(KeyCode.Space);

這些行的功能基本上是不言自明的。使用這三種輸入參考,您可以重建大多數現代3D電腦遊戲的控制方案。

6.8調試腳本

假設腳本不起作用。正如那位好醫生所說,你可能會遇到麻煩。如果你的C#有明顯的語法錯誤,當你點擊play時,遊戲通常會拒絕運行,如果你在編輯器中構建腳本,會提供一些相當有用的錯誤消息。見下表:

007Ys3FFgy1h1oi2ibx9lj31hc0u079r

這些bug通常不是最難修復的。更麻煩的是一些微妙的語義錯誤,在這些錯誤中,您成功地編寫了一個充滿有效C#的文件,而不是一個您所認為的那樣的文件。如果你有這些錯誤中的一個,並且你很難追蹤到它,有一些事情你可以嘗試改善這種情況。

首先是暫停遊戲的執行,並檢查控制檯。通過單擊編輯器中上部的暫停圖標,然後從窗口菜單底部選擇c***ole(或按Ctrl&gt;Shift&gt;C),可以暫停遊戲。即使沒有錯誤,警告仍然有助於提供一些可能出錯的線索。

如果這不起作用,您還可以嘗試通過打印內部變量的狀態來驗證程序是否正在執行您認為它正在執行的操作,從而瞭解腳本的狀態。你可以用調試日誌(String)當程序執行到達某一行時,將字符串的內容打印到控制檯。一般來說,如果你從你認為應該發生的事情到應該發生的事情進行逆向工作,最終你會達到一個點,你的調試打印沒有做你期望他們做的事情。這就是你的錯誤所在。

7示例:腳本編寫pong

為了打造乒乓球,讓我們把遊戲分解成它的核心元素:我們需要一個能在球拍之間以更快的速度來回彈跳的球,我們需要一個記分板,它能知道球何時通過球拍,我們需要一個機制,當球通過球拍時,它能重新啟動。好的第一步是將非運動學剛體添加到球上,將兩個運動學剛體添加到槳上,禁用所有剛體的重力,並從標準資源(bounce with bounce combine set to multiply)中指定適當的物理材質。

下面,您可以查看帶有解釋性註釋的球的腳本。球需要完成一些基本的目標:它應該以一種複雜的模式反彈,始終保持兩軸的運動,並且應該以一種富有挑戰性但並非不可能的速度在水平方向加速。

BallHandler.cs公司

接下來,我們需要腳本我們的槳,你可以看到下面。撥杆需要上下移動以響應按鍵(但不能超出特定範圍)。它還需要在與物體碰撞時觸發粒子系統。

槳葉處理器.cs

下一步,我們需要敵人的人工智能:一種能使敵人的槳以固定速度向球移動的東西。為此,我們將使用Vector3.Slerp以獲得最大的簡單性。我們也希望我們在自己的槳上看到同樣的粒子行為。

灌腸劑

最後,我們需要一個腳本來更新記分板,並在球出界時重置它。

記分板更新程序.cs

有了這些腳本和參考填寫,當我們運行我們的乒乓球遊戲,我們體驗遊戲!

007Ys3FFgy1h1oi2iyejwj31hc0u0t9v

你可以下載我的乒乓球演示,如果你想看到我在行動中概述的一切。它運行在Windows、Mac和Linux系統上。

8瀏覽文檔/瞭解更多

Unity是一個複雜的引擎,它的特性遠遠超出了這種風格的指南所能涵蓋的範圍,而這還不包括internet上可用的大量(免費和商業)Unity擴展。本指南將為您開發遊戲提供一個堅實的起點,但自我教育在任何努力中都是一項重要技能,在這裡更是如此。

這裡的一個關鍵資源是統一腳本引用。ScriptReference是一個可搜索的數據庫,可供C#和Javascript使用,其中包含每個Unity命令和特性的列表,以及它們的功能描述和簡短的語法示例。

如果您對Unity的編輯器和界面有問題,或者只是喜歡視頻教程,那麼有一長串高質量的Unity視頻教程可用。CatlikeCode還提供了更廣泛(但不太廣泛)的Unity文本教程。

最後,如果您有超出文檔或教程範圍的問題,可以在答案.Unity3d網站。請記住答案是由志願者提供的,所以請尊重他們的時間,首先搜索數據庫,以確保您的問題尚未得到回答。

9構建遊戲/編譯到獨立應用程序

當你建立了一些你引以為豪的東西(或者你已經完成了克隆我們略顯躲閃的Pong示例的練習),是時候把你的遊戲從編輯器中移開,變成你可以發佈在互聯網上,強迫你的朋友和家人玩的東西了。為此,您需要構建一個獨立的應用程序。好消息是,在團結中,這非常,非常容易。然而,有一些潛在的呃逆,你要小心。

對於初學者,要知道您只能構建一個無錯誤的項目。為此,請確保在構建時打開控制檯:在編輯器中,遊戲將忽略一些錯誤條件,但仍將中止嘗試的構建。這隻會將錯誤消息轉儲到控制檯,屏幕上沒有可見的結果,如果忘記檢查,這可能會令人沮喪。不過,一旦遊戲編譯沒有錯誤,就可以在“文件”菜單下選擇“構建設置”,或按Ctrl&gt;Shift鍵

>B.這將打開一個簡單的對話框,允許您為多個平臺構建遊戲。

007Ys3FFgy1h1oi2jmtrdj31hc0u076l

從那裡開始的過程是不言自明的:選擇你的選項,點擊build;遊戲將提示你安裝到一個目錄,並將可執行文件和數據目錄都放在那裡。這兩個文件可以壓縮在一起並分發(只需確保您沒有為Unity演示中構建的遊戲收費,因為這違反了服務條款)。

10閉幕詞

與任何遊戲開發工具一樣,Unity成功的關鍵是迭代開發。你必須以可管理的增量進行構建——無論如何,要有雄心壯志,但要把雄心壯志分成小塊,並把這些小塊安排好,這樣,即使你沒有達到最終的雄心壯志,你至少也會得到一個連貫的產品。

首先要了解最關鍵的要素:在頭腦中要有一個想法,那就是你最簡單可行的產品,你可能創造的最簡單、最簡單的東西,並且仍然覺得你取得了一些有價值的東西。在開始更大的雄心壯志之前,先做一個最低可行的項目。

本教程為您提供了一個強大的起點,但學習統一的最佳方法是構建一個遊戲。開始建立一個遊戲,填補你的知識空白,當他們出現的時候,知識的逐漸流動會侵蝕掉你不知道的東西。

如果您已經閱讀了所有這些內容,並且對Unity所需的編碼有點不知所措,請務必查看如何使用Unity learn學習遊戲開發,並閱讀我們關於如何在沒有任何編程的情況下**視頻遊戲的指南。

Unity是一個強大的工具,稍加探索,您就可以用它更快地構建令人印象深刻的項目。讓我們知道您在下面的評論中構建了什麼--我們很樂意看到!

  • 發表於 2021-03-13 11:55
  • 閱讀 ( 51 )
  • 分類:程式設計

你可能感興趣的文章

什麼是降價?初學者入門指南

...能會成為一個問題。&#13; 透過Markdown,您可以用純文字來編寫人類易於閱讀的文章。將降價文件匯出為HTML以便線上釋出很簡單。既然降價在任何地方都有效,你就不必使用或購買特定的軟體。&#13; 降價口味&#13; 降價不是一個具體...

  • 發佈於 2021-03-12 09:02
  • 閲讀 ( 63 )

尋找最好的程式語言?從這裡開始!

...教程。 Swift:iOS應用程式過去是用Objective C編寫的,但現在使用蘋果的新語言Swift會更好。它易於學習和使用,使它成為偉大的新手和老兵一樣。開始學習這些Swift教程,並測試您從這些Swift編碼挑戰中學到的知識。...

  • 發佈於 2021-03-12 12:24
  • 閲讀 ( 64 )

ubuntu:初學者指南

... 測試軟體錯誤 編寫使用者文件 設計作品 提供使用者反饋 回答問題並提供支援(在Ask Ubuntu等網站上) 傳播資訊 ...

  • 發佈於 2021-03-12 17:29
  • 閲讀 ( 79 )

9個最好的pi程式設計資源,把你的樹莓pi使用

... 三。編寫raspberry pi:python入門 ...

  • 發佈於 2021-03-14 03:57
  • 閲讀 ( 51 )

10本書,所有ios應用程式開發者都需要

...程式設計迎合人們誰是剛剛開始與斯威夫特。在準備開始編寫自己的程式碼之前,您將學習最基本的知識。在每一章的結尾,都會有一些練習來測試你的知識,還有一些挑戰會把你推向更遠的一步。如果你從一開始就開始迅速,...

  • 發佈於 2021-03-15 05:20
  • 閲讀 ( 45 )

如何用arduino和unity製作自定義遊戲控制器

...將允許您接收和傳送資料到和從您的Arduino引腳內團結。編寫時的外掛價格為30美元。這是可以做這個專案,而不必購買外掛,雖然它是相當複雜的,你可能會發現外掛更方便全面。 ...

  • 發佈於 2021-03-17 05:47
  • 閲讀 ( 64 )

從寫作到遊戲設計:udemy上5個完整的創意課程

... 2成為遊戲設計師:完整的大師系列 ...

  • 發佈於 2021-03-17 08:19
  • 閲讀 ( 52 )

9個最好的程式碼遊戲,以建立你的程式設計技能

... Robocode是一個複雜的程式設計遊戲,在這裡你可以編寫機器人坦克的程式碼,它們可以互相對抗。你的工作是編寫驅動你的機器人走向成功的人工智慧——使用Java、Scala、C#等真正的語言。要開始學習,請檢視Robocode基礎...

  • 發佈於 2021-03-17 21:19
  • 閲讀 ( 40 )

適合初學者的11個最佳樹莓圓周率專案

... 把舊印表機做成無線的 用Scratch編寫遊戲 用音速圓周率**音樂 構建網路遊戲伺服器 進入房間時自動播放音樂 ...

  • 發佈於 2021-03-19 13:42
  • 閲讀 ( 57 )

統一學習是掌握遊戲開發最簡單的方法

學習遊戲的發展是一個漫長的過程。對於初學者來說,必須學習程式設計、資產操作和一個全新的編輯器的結合是壓倒性的。 ...

  • 發佈於 2021-03-19 21:05
  • 閲讀 ( 53 )
c6008001998
c6008001998

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章