Unity官方教程 2D UFO(上)

2D UFO 游戲.gif

前言

Unity官方教程 2D UFO 原版視頻教程地址,點我點我

抱著總結和方便回顧的念頭把Unity官方教程寫一遍。朋友—Zui,兩年前寫的球球和飛機非常精彩,我乃是繼承他的“遺風”(→_→)。

這個2D UFO游戲個人認為是Roll-a-Ball的2D版,實現起來更加簡單,更適合新手入門。官方視頻未知所用Unity版本,現在Unity最新的版本是Unity 2017,部分界面和實現方式已經有差異。

電腦環境:Windows10
Unity版本:2017.2.0
腳本/代碼編輯器:Microsoft Visual Studio Community 2017 15.4.4 (裝Unity的時候帶上的)

你將學會操作什么?

  • 如何創建一個新的項目(Project)
  • 如何下載資源包(Asset Store)
  • 如何添加基本的游戲對象(GameObject)
  • 如何給游戲對象添加腳本(Script)
  • 如何制作預制件(Prefab)
  • 如何實現計分板和游戲結束提示(UI Text)
  • 如何發布游戲(Build)

一、創建一個新的項目(New Project)

第1步:通過菜單欄File-->New Project打開創建新項目對話框

第一次安裝unity的同學打開軟件的時候默認就是創建新項目對話框頁面。

New Project

第2步:確定項目名稱、存放路徑和游戲模式

創建新項目對話框
  • Project name:項目名稱
  • Location:項目存放路徑,可選擇電腦任意目錄(不會放C盤吧?(?Д?)ノ)
  • 3D/2D:在這里我們當然選擇2D
    最后點擊 Creat project 按鈕創建新項目。

第3步:調整項目視圖布局

編輯器主界面

有可能你創建出來的項目視圖布局和上圖不一樣,可以編輯右上角Layout按鈕來改變布局。上圖布局是Tall(可以通過鼠標調整每個窗口寬度)。其他模式可以自行選擇體驗。

Layout

二、 從Asset Store下載素材資源包

為了方便我們跟隨視頻學習,Unity官方已經提供2D UFO游戲的所有素材供我們免費下載——Unity Asset Store。

第1步:通過菜單欄Window-->Asset Store按鈕打開資源商店

image.png

第2步:查找和下載資源包

資源商店窗口默認會在Game窗口右側展開,在Search搜索欄輸入游戲名字并回車,找到游戲后點擊標題打開詳情頁,點擊藍色按鈕Download確認下載。

搜索結果

第3步:導入資源到本地打開的項目

下載完成后會提示是否Import到項目內,點擊Import按鈕會打開導入資源選擇頁面。默認全選,無需改動,點擊右下角的Import按鈕即可。

Import

導入完畢之后關閉Asset Store頁面,回到編輯器主界面,可以看到Project窗口下的Assets文件夾多出了三個文件夾_Completed-Assets、Sprites、TutorialInfo。本教程中,除了Sprites,其他沒有用武之地?(?????)?。

Assets

三、創建第一個游戲場景(Scene)

第1步:創建一個文件夾存放場景文件

Unity中,游戲場景、腳本、預制件、美術等所有資源文件都放在Assets文件夾下。游戲越復雜文件可能就越多,如果不對這些資源文件合理進行分類的話,那么查找和管理起來就非常困難。所以在學習Unity的過程中要有意識地培養自己合理分類資源文件的習慣,這點不要忘記!那現在就開始創建一個Scenes文件夾來存放游戲場景文件吧~

創建辦法有3種:

  1. 菜單欄Assets-->Create-->Folder
  2. Project窗口下的Assets文件夾右鍵快捷方式創建
  3. 左鍵選中Project窗口下的Assets文件夾,點擊Project正下方Create右側小三角,選擇Folder。
Create Folder

第2步:保存場景文件到Scenes文件夾

通過菜單欄File-->Save Scenes(快捷鍵Ctrl+S)保存場景文件,記得是保存在Scenes文件夾,我們命名主場景文件為Main

保存場景

可以看到,Hierarchy窗口下出現了Main場景。

Main

四、添加游戲對象——背景(Background)

有了游戲場景,我們就可以開始在場景中添加一些我們需要的游戲對象了。首當其沖需要添加的是游戲背景,也就是UFO背后那張棋盤。選中Sprites文件夾,鼠標左鍵按住Background文件不動,拖到Hierarchy窗口空白處松開。

Background

可以看到,Hierarchy窗口下新增了一個Background游戲對象。新增游戲對象之后最好進行重命名(更好地說明它的作用),重命名有2個方法:

  • 左鍵點擊選中要改名的GameObject,稍微等一會,再左鍵點擊一下,進入編輯改名狀態。和平時修改電腦文件名字是一樣的~
  • 選中要改名的GameObject,在右側的Inspector窗口下方名字欄處修改,改好回車。
    在這里我們不改名( ? ?ω?? )? Background這個名字挺好的。
重命名

接下來要做一件很重要的操作(官方和Zui強力推薦)——重置(reset)游戲對象的Transform屬性:在右側的Inspector中找到組件Transform,點擊它右上角的小齒輪,選擇reset選項,如下圖:

reset transform

官方建議我們每次新增GameObject之后都進行雙標動作:改名和重置Transform。改名是方便解釋對象的作用,重置是讓游戲對象的位置回到原點,避免因為不在原點產生一些詭異的事情。

背景添加成功之后,可以看到Scene窗口的背景不完全可見,鼠標滾輪控制縮放,鼠標左鍵拖動,調整到Scene窗口可以看到完整的背景,方便后續操作。

鼠標切到Game窗口,背景圖片看起來還是很大,無法窺得全貌,這是由于正交攝像機的Size太小,可視范圍太少。鼠標選中Main Camera游戲對象,在Inspector內的組件Camera找到Size,把它的數值改成28(可以根據自己的窗口大小來調整這個數值)。

Game窗口

Tips:鼠標放在Size輸入框前面一點,出現左右兩個箭頭的時候,按住鼠標左鍵上下移動可以微調數值。其他有輸入項的都可以使用這個操作~

五、添加主角——UFO

前面都是浮云,到現在為止我們的游戲主角終于要登場了,淚流滿面(;へ:)……添加UFO和Background的操作是一樣的,在Sprites文件夾里面把UFO拖到Hierarchy窗口即可。添加完GameObject不要忘記雙標動作了,這次我們把UFO重命名為Player,因為它就是我們玩家所能操控的對象。

Player

這個主角有點太胖了,格子都裝不下了,讓我們給它減減肥。選中Player,把TransformScale內的x和y都改成0.75(2D游戲不用改z)。看,格子這么合身!

Transform屬性說明:Position位置,Rotation旋轉角度,Scale縮放比例。

在Player的Inspector窗口下有一個組件Sprite Renderer,有一個選項Sorting Layer,它控制渲染層級的順序。在這里我們需要把UFO也就是player的這一項改成Player,然后把Background的改成Background。很繞→_→ 這個改了之后,背景就不會蓋在上面擋住UFO了~

image.png

六、讓UFO走起——添加剛體(Rigidbody2D)和腳本(script)

UFO死氣沉沉地一動也不動,我們總不能干瞪著眼看它,這樣不叫游戲。那么接下來就該讓它走起來了~它不會無緣無故地走起來,需要我們去給它施加一個物理作用力,控制它往我們指定的方向走。這就涉及到物理引擎的控制了,具體我們接下來看怎么實現吧。

第1步:給UFO添加剛體組件

剛體能讓UFO被物理引擎所控制,這樣便能模擬現實,通過受到物理作用力來實現真實的物理表現效果比如移動和碰撞,方便后續實現拾取金幣和撞墻。

給UFO添加剛體組件的2種方法:

  • 選中Player,通過菜單欄Component-->Physics 2D-->Rigidbody 2D添加。
  • 選中Player,通過Inspector的Add Component-->Physics 2D-->Rigidbody 2D添加
Add Component

第2步:給UFO添加腳本組件

OK,現在UFO有剛體了,它可以接受物理作用力了,那么如何給它發出指令讓它走起來?通過給UFO添加腳本并且編輯腳本可以實現對它的操作。

不過,首先我們要意識到,腳本也是資源文件,所以是需要存放在Assets文件夾里面的。還記得之前提過的資源分類嗎?在Assets下創建一個Scripts文件夾,用來存放所有的腳本文件。

Scripts文件夾

給GameObject添加腳本的方法是選中GameObject(也就是我們的主角Player),點擊Inspector窗口的Add Component按鈕,在彈出來的菜單中選擇New Script

New Script

此時要求輸入腳本名稱和選擇語言類型,這里我們將腳本命名為PlayerController,然后語言選擇C Sharp。

PlayerController

點擊Create and Add后,我們就成功給UFO添加一個腳本組件了。接下來你們肯定以為要編輯腳本了對不對?NO,NO,NO(賤笑.jpg)。點擊Assets文件夾,可以看到文件夾內出現了一個名為PlayerController的腳本文件。由此我們知道,每次給游戲對象新增的腳本文件默認是放在Assets文件夾。根據資源分類原則,要先記得把這個腳本文件拖到剛才創建的Scripts文件夾內。

然后通過雙擊這個腳本文件,或者點擊腳本組件右上角的小齒輪按鈕,在彈出來的菜單中選擇Edit Script便可打開腳本編輯器了。

Assets文件夾

第3步:編寫腳本

下面沒有編程經驗的同學,可以直接按照例子來抄寫代碼,以后做的多了自然也就容易理解了。
新打開的腳本是這樣的:

PlayerController

里面默認自帶了2個方法,Start和Update,Update在這個例子里用不到。我們添加一個FixedUpdate的方法,該方法主要適用于處理物理邏輯,代碼如下:

PlayerController代碼

簡單說明下:

  • 新增了兩個變量成員,rb2D是剛體組件,speed是控制UFO移動的速度。
  • Start方法劃線部分,用GetComponent方法獲得當前腳本所掛載的游戲對象(Player)里的剛體組件并且賦值給rb2D
  • FixedUpdate方法,定義了兩個浮點變量分別代表鍵盤水平和垂直方向的輸入,根據這兩個值確定移動二維向量movement,最后由剛體rb2D調用AddForce方法給UFO添加一個力使其移動。

Tips:腳本新增的Public變量成員,會在Unity編輯器中腳本組件內顯示并且可以修改賦值,比如此例中的speed

speed

OK,現在回到Unity,把Speed改成10,然后運行游戲,激動人心的時刻要到了!

最左運行游戲,變成藍色就代表好了

咦?為什么UFO在做自由落體運動?尷尬ヾ(??﹏?)??......前面提到,剛體能讓UFO處于物理引擎控制之下,所以添加了剛體的UFO是可以受到物理作用力包括重力的!那怎么樣讓它不受重力影響呢?把Rigidbody2D組件的Gravity Scale項的數值改成0就可以了。

Gravity Scale

現在再運行游戲,UFO不會再自由落體了。按WASD或者方向鍵試試,可以看到UFO走起來的效果了。修改Speed的值可以改變速度哦。

傳送門:Unity官方教程 2D UFO(下)


【擴展補充】

好的習慣:
  • 每創建一個GameObject 就進行雙標動作:改名、reset Transform
  • 每新建一個Script,先拖入到scripts文件夾再編輯
  • Script編輯完畢之后,如有新增的public成員變量,要記得在Inspector該腳本下該選項填充數值,或者把對應對象內容拖入到框內。
Q&A:

Q1:Game窗口里面棋盤外面區域是一片藍色,怎么修改成自己想要的顏色?
A1:選擇Hierarchy窗口內的Main Camera,在右側Inspector的Camera組件內修改Background背景色即可。同學可以把RGB設置成75 75 75,灰色調和Scene窗口一致。

Q2:在腳本里面,Update()和FixedUpdate()有什么不同?為什么在這里我們要使用FixedUpdate()?
A2:Update() 和 FixedUpdate()在游戲中的作用是都會在更新的時候自動循環調用。他們的區別主要就是

  • Update()是在每次渲染新的一幀的時候才會調用,也就是說,這個方法被調用的頻率和設備的性能有關。性能好的機器上fps高,同樣的時間傳輸的幀數多,Update被調用的次數多,而性能差的機器就相反。這會導致同一個游戲在不同的機器上效果不一致,有的快有的慢。

  • FixedUpdate()是在固定的時間間隔執行,不受游戲幀率的影響,所以非常適用于處理物理邏輯。因此人們處理Rigidbody的時候經常使用FixedUpdate()。

Q3:那Start()是什么鬼?
A3:游戲初始化的時候調用Start方法,后續不會再調用。而Update之類的都是反復根據他們的規則在調用執行~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,514評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,373評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,743評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,199評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,414評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,951評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,780評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,218評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,673評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容