0:00:00.000,0:00:04.295 Unity 4.3 我們發佈了第一階段的2D工具 0:00:04.295,0:00:08.295 為此,我們用這個工具做了一個2D範例 0:00:08.295,0:00:11.527 這個2D範例叫做"鐵橋塔防" 0:00:11.527,0:00:15.556 描述倫敦鐵橋被外星人入侵的故事 0:00:15.556,0:00:23.472 範例完全用2D圖片和物理來呈現[br]讓你了解這些元素如何在Unity裡組合 0:00:23.472,0:00:31.639 影片會說明範例裡的背景、前景、角色、特效[br]鏡頭追跡、動作和腳本程式是如何製作的 0:00:31.639,0:00:36.139 開始之前,先來聊聊基本的Unity 2D工作 0:00:36.860,0:00:43.040 首先,當要製作2D專案,你應該先設定工作環境為2D 0:00:43.040,0:00:47.040 可以在建立新專案時在下拉選單設定 0:00:47.040,0:00:53.172 或是在開發中到Edit - Project Settings - Editor調整 0:00:53.172,0:00:59.630 這代表預設情況下,輸入的材質會[br]被視為2D圖片,場景視圖也會預設為2D 0:00:59.630,0:01:04.420 這個新的2D模式會採用完全的[br]正視圖視角來呈現你的2D遊戲 0:01:04.420,0:01:10.197 同時也會把右上角的3D小圖示都隱藏[br]讓工作空間更大 0:01:10.197,0:01:17.040 除此之外,Unity 2D的工作流程[br]是和現有的3D流程整合在一起的 0:01:17.040,0:01:22.929 如果你已經會操作原本的Unity[br]那Unity 2D會很好上手 0:01:22.929,0:01:27.219 值得一提的是,你也可以混搭2D和3D共用 0:01:27.219,0:01:32.870 所以如果你想要有3D元素在你的2D遊戲裡[br]或2D元素在3D遊戲裡都沒有問題 0:01:33.366,0:01:38.312 現在來看看範例如何建立一個關卡 0:01:38.812,0:01:44.812 我們一開始勾勒關卡設計雛形[br]然後到Photoshop裡面去把每個圖層做出來 0:01:45.312,0:01:51.312 然後輸出這些圖層[br]成為新的Sprite類型導入Unity 0:01:58.373,0:02:06.515 為了呈現出背景的視差,我們做了一些[br]背景元素在Sorting Layer裡 0:02:06.515,0:02:09.658 這是一個2D工具的新功能 0:02:10.158,0:02:17.379 當所有背景指定到這一層後[br]我們可以在圖片著色器的圖層排序它們 0:02:17.379,0:02:21.379 調好位置之後也可以把圖層鎖定不能編輯 0:02:21.379,0:02:27.751 這樣的話我們編輯前景元素的時候[br]就不用擔心會不小心動到背景元素 0:02:27.751,0:02:31.751 可以從介面右上方的圖層選單來設定 0:02:32.817,0:02:39.531 由於背景只是裝飾用的,所以[br]並不需要在圖片上放任何元件 0:02:39.531,0:02:41.531 將它們放到一個空的物件裡 0:02:41.531,0:02:46.201 並放入一個叫做叫做[br]BackgroundParallax的腳本來處裡視差 0:02:46.201,0:02:50.643 更多的細節可以詳查這個已經註解的腳本 0:02:54.914,0:02:59.400 接下來製作角色活動的前景空間 0:02:59.790,0:03:03.466 我們設計了倫敦鐵橋和降落在中間的飛碟 0:03:03.466,0:03:09.216 主角處於一個敵人從天而降並到處亂竄的環境 0:03:09.216,0:03:13.632 因此,每一個前景元素都需要[br]碰撞體(Collider)來讓主角在上面行走 0:03:13.632,0:03:21.239 大多數環境用方體碰撞就可以[br]除了外型比較複雜的飛碟 0:03:22.505,0:03:28.724 Unity提供多邊形碰撞體(Polygon Collider)[br]可以根據圖片外型自動產生多邊形碰撞體 0:03:28.724,0:03:32.053 甚至可以調整碰撞體的外型 0:03:32.053,0:03:38.164 你可以新增、移動或刪除節點[br]調整到更適合行走的外型 0:03:38.664,0:03:45.599 為了排序前景元素我們建立了前景層[br]設定顯示在背景之前 0:03:48.875,0:03:50.875 接下來看看主角 0:03:53.709,0:04:03.598 我們的主角也是在Photoshop裡面設計的[br]一個四肢獨立類似卡通主角雷曼的角色 0:04:03.598,0:04:05.598 另外一個2D工具的新功能 0:04:05.598,0:04:09.643 是一個以圖表化的動畫工具[br]可以在Photoshop裡繪製每一節點的圖 0:04:09.643,0:04:14.365 後面我們會介紹如何用這方法[br]製造我們的天鵝 0:04:15.072,0:04:20.196 因為身體部位分開比較好控制動畫[br]因此我們希望獨立每個身體部位 0:04:20.196,0:04:27.959 所以我們將身體部位獨立切開[br]好讓Unity在輸入時容易拆離它們 0:04:28.763,0:04:33.096 這代表我們可以為圖片單獨製作動作 0:04:33.096,0:04:40.921 把這些部位放入建好的角色層[br]然後改變Z軸深度來改變前後順序 0:04:48.811,0:04:56.591 把這些圖片都放入一個有控制腳本[br]碰撞體、物理設定等等的物件 0:04:56.591,0:05:07.095 一旦做到這裡,就可以到動畫視窗給予圖片動作[br]建立待機、跑、跳、射擊和死亡的動畫 0:05:07.095,0:05:11.795 使用動畫視窗裡新的分鏡表功能[br]就可以簡單製作動作 0:05:13.414,0:05:19.403 我們在父物件建立一個動畫元件[br]然後針對每一個子物件建立影格 0:05:19.403,0:05:25.403 移動指標到想要的影格後調整角色部位[br]就會自動把變量錄到影格上 0:05:27.313,0:05:35.064 可隨時切換分鏡表和動畫曲線[br]使得它更容易調整設計 0:05:36.730,0:05:41.370 這些動作建立好之後我們可以[br]幫我們的角色設計控制狀態 0:05:41.370,0:05:45.277 讓我們用程式呼叫角色執行各種動作 0:05:45.277,0:05:52.123 因為不是驅動3D骨架,所以取消打勾Root Motion 0:05:52.123,0:05:57.287 也可以打勾Animate Physics如果[br]動畫要和物理行為相互作用 0:05:57.287,0:06:04.564 為了在場景走動,主角腳上有圓形碰撞體[br]和一個包覆整個身體的方形碰撞體 0:06:04.564,0:06:09.454 這樣他可以平順地行走和跳下場景[br]跳起來的時候頭部也可以判定撞到 0:06:09.802,0:06:16.038 為了控制角色動作,我們寫了[br]一個腳本透過2D物理引擎來移動 0:06:16.038,0:06:21.427 這代表在遊戲裡面可以指定主角和敵人[br]讓遊戲動態更豐富的物理行為 0:06:21.427,0:06:25.814 我們用PlayerControl腳本來判斷角色的輸入 0:06:25.814,0:06:32.000 我們在此指定物理移動速度[br]同時也把輸入的值送到動畫控制器 0:06:32.000,0:06:40.475 判定播放哪些動畫以及[br]順暢的播放分鏡表上圖片的轉變 0:06:40.475,0:06:44.475 使用動畫控制建立圖片動態最大的好處是 0:06:44.475,0:06:51.278 可以調整動畫速度用來搭配物理速度[br]不需要額外再作任何判定 0:07:23.129,0:07:26.358 FixedUpdate函式會檢查每一步物理運算 0:07:26.358,0:07:32.994 在這裡我們第一件要做的事情是[br]把輸入的水平值傳給動畫的速度參數 0:07:33.950,0:07:41.718 在我們的狀態設定裡[br]待機狀態到跑動需要速度參數大於0.1 0:07:41.718,0:07:46.025 當值成立時,動畫就會從待機切到跑步 0:07:51.857,0:07:58.822 要讓角色移動,讓它有Rigidbody2D元件[br]就可以為它加力道移動 0:07:59.626,0:08:07.710 同時我們也根據輸入的水平值是[br]大於0或小於0來處理角色面朝的方向 0:08:07.710,0:08:14.573 這是因為在Unity裡,按住左鍵會傳回-1[br]而按住右鍵會傳回+1 0:08:15.073,0:08:24.566 根據輸入值呼叫一個簡單的翻轉函數[br]來翻轉角色的X軸縮放,讓角色面向反方向 0:08:26.848,0:08:31.000 為了判定角色是否著地[br]我們新增了一個Ground圖層 0:08:31.000,0:08:34.982 並指定給全部可行走的前景物件 0:08:43.397,0:08:50.234 然後使用2D裡面的Linecast函數[br]檢查Ground圖層是否和角色的腳接觸 0:08:50.234,0:08:56.777 為了讓製作更容易,我們建立了[br]一個空白的物件當作檢查地面的標準點 0:08:56.777,0:09:03.083 在該物件上增加一個小圖示[br]我們就可以控制角色到地面的距離 0:09:03.083,0:09:07.958 就遊戲角度來看[br]角色在地面時只能做跳的動作 0:09:08.456,0:09:12.648 更多關於角色控制的資訊[br]可以查看範例腳本裡面的說明 0:09:12.648,0:09:15.879 影片稍後也會討論角色的武器 0:09:15.879,0:09:19.879 接下來看看相機如何追蹤角色 0:09:21.291,0:09:27.824 跟3D遊戲一樣,在2D遊戲裡[br]鏡頭運鏡也左右著遊戲體驗 0:09:27.824,0:09:33.625 要呈現經典的2D遊戲運鏡[br]我們參考了2D遊戲經典大作 0:09:33.625,0:09:38.651 任天堂或超任的超級瑪莉歐的鏡頭運作 0:09:38.651,0:09:45.119 在超級瑪莉歐世界裡鏡頭會水平移動[br]除了封閉的空間或關卡邊緣 0:09:45.119,0:09:49.342 在這兩類區域裡角色小幅移動[br]鏡頭不會追蹤 0:09:49.342,0:09:54.047 一旦角色移出區域[br]鏡頭又會開始追蹤角色 0:09:54.047,0:09:58.205 超級瑪莉歐的相機[br]用特定高度來進行垂直判定 0:09:58.205,0:10:06.848 但我們的遊戲沒有往上的長度[br]比較像動作平台,所以不需要這類設定 0:10:07.210,0:10:12.787 因此我們的相機在垂直判定[br]採用了和水平一樣的方法 0:10:18.779,0:10:25.138 請看看主相機裡的CameraFollow腳本[br]了解鏡頭追蹤更完整的寫法和註解 0:10:26.135,0:10:32.732 遊戲中有許多特效[br]但最重要的是主角殺死外星人的能力 0:10:32.732,0:10:36.338 主角會發射一個具有[br]反作用力動畫的火箭筒 0:10:36.338,0:10:38.898 這個動畫由幾個部分組成 0:10:38.898,0:10:47.969 首先檢查輸入,當按下Fire鍵時[br]產生一個火箭,播放音效並觸發火箭動畫播放 0:10:47.969,0:10:49.969 讓我們進一步分解這些步驟 0:10:49.969,0:10:57.677 為了可以播放其他動畫(跑步)時同時播放火箭發射[br]我們在動畫控制器建立了Shooting的動畫層 0:10:57.677,0:11:06.980 將Weight屬性設為1,可以[br]完全覆蓋基本層(Base Layer)所有的動作 0:11:20.499,0:11:27.351 我們可以從任何狀態中用程式[br]觸發Shoot參數發射動畫 0:11:27.351,0:11:30.543 來看看負責這工作的Gun腳本 0:11:32.700,0:11:37.402 你可以看到我們寫了驅動事件[br]觸發Shoot為True 0:11:37.402,0:11:45.511 觸發後會打開,在下一格重置為關[br]就可以重複使用,對於射擊動作最好用 0:11:46.011,0:11:50.673 除了設定動畫,我們也從腳本中發射火箭 0:11:50.673,0:12:00.555 播放音效後根據角色的方向[br]產生火箭並給它一個X軸的正或負速度 0:12:01.276,0:12:05.294 這個Gun腳本被放在主角身上的空物件 0:12:05.294,0:12:11.663 像這樣將腳本放到一個空物件上[br]可以輕易的定位火箭發射位置 0:12:11.663,0:12:20.010 我們將物件放到火箭筒發射口[br]然後以他自己的座標當作發射點 0:12:40.248,0:12:46.804 火箭本身有2D剛體[br]我們給它一個速度讓它移動 0:12:46.804,0:12:51.096 它也有火焰噴射動畫和粒子系統做的煙霧 0:12:52.826,0:12:56.482 粒子系統也接受新的Sprite圖片 0:12:56.482,0:13:04.149 所以可以將煙霧的圖片切好後加到材質[br]並指定到粒子系統的Texture Sheet Animation 0:13:04.149,0:13:08.232 就有煙霧特效讓粒子系統發射 0:13:16.122,0:13:22.935 當火箭命中敵人或環境時[br]火箭本身會引起爆炸並被摧毀 0:13:22.935,0:13:27.731 爆炸是我們製作的爆炸動畫物件 0:13:27.731,0:13:33.699 排序位置在前景的最後面 0:13:36.174,0:13:44.576 要建立這類動畫,可以從專案點選圖片[br]然後在屬性Sprite Mode選擇Multiple 0:13:44.576,0:13:49.757 這功能允許我們編輯圖片[br]手動或是自動裁切圖片大小 0:13:49.757,0:13:52.406 一旦完成裁切後 0:13:52.406,0:13:58.765 只需要點擊Apply[br]Unity會自動產生圖片並作為子物件 0:13:59.707,0:14:01.693 這就是火箭製作過程 0:14:01.693,0:14:06.533 稍後我們將在影片中討論[br]殺死敵人的動畫技法 0:14:07.102,0:14:12.194 現在先讓我們回到主角[br]看看如何處理血條補血和扣血 0:14:12.194,0:14:18.548 血條被定義為一個浮點數(Float)[br]每次碰到敵人就會呼叫TakeDamage函式 0:14:18.548,0:14:25.347 為了避免觸發太快造成死亡[br]我們用repeatDamagePeriod來間隔觸發時間 0:14:26.524,0:14:31.136 為了讓角色顯示受傷[br]並容易從敵人手中逃脫 0:14:31.136,0:14:34.847 我們建立了受傷的動作[br]並在物理上彈飛主角 0:14:34.847,0:14:39.540 要做到這點,TakeDamage函式[br]會阻止角色跳躍 0:14:39.540,0:14:42.125 並從主角與敵人之間找到一個向量位置 0:14:42.125,0:14:46.125 指定一個物理力量往指定方向擊退 0:14:46.125,0:14:55.323 hurtForce是一個全域變數,可以隨時從介面調整[br]而不用從腳本裡調整 0:14:55.323,0:15:02.209 除了擊退主角之外,我們同時[br]也扣掉角色的血量並更新血條 0:15:02.209,0:15:09.825 為了呈現扣血,我們把血條的寬度縮減[br]用一個公式計算讓綠色轉變到紅色 0:15:09.825,0:15:14.640 透過當下的血量和總量算出一個百分比 0:15:14.640,0:15:21.744 血條是由兩個圖片組成[br]一個顯示血量,另一個顯示外框 0:15:21.744,0:15:25.954 這也是在Photoshop裡做的[br]然後輸出兩個單獨的圖片 0:15:25.954,0:15:34.053 導入圖形的時候,設定圖形軸心在左邊[br]所以當它按比例減少時,就會往左縮 0:15:48.573,0:15:54.573 這兩個圖片放在一個空物件底下[br]給予一個簡單腳本,讓它顯示在角色頭上 0:15:54.573,0:15:58.621 將血條位置設定與角色相同 0:15:58.621,0:16:02.621 並加上偏移用的全域變數[br]好在檢視介面進行調整 0:16:16.215,0:16:22.629 當主角血量為0時,設定碰撞體的isTrigger = true[br]主角就會往下跌到水上 0:16:22.629,0:16:28.194 同時將主角排序推到UI層上[br]主角會移到畫面最上層 0:16:28.194,0:16:31.594 UI層是我們製作的層[br]是用來表示像UI的前面的物件 0:16:31.594,0:16:34.223 當腳色死亡時,我們有兩個動畫 0:16:34.223,0:16:38.631 一個叫Death,會失去帽子和槍[br]另外一個叫Falling 0:16:38.631,0:16:47.239 用Exit Time當作動畫的切換條件[br]一旦Death播完就會切到Falling動畫 0:16:50.778,0:16:55.000 最後,在播放死亡動畫時[br]為了阻止玩家移動角色或射擊 0:16:55.000,0:16:58.340 我們會禁用PlayerControl和Gun腳本 0:16:58.340,0:17:05.040 由於Die函式是全域可以從任何地方呼叫[br]例如玩家掉入水中 0:17:05.040,0:17:12.463 要在主角接觸水面時重置遊戲,我們[br]用一個由觸發器和腳本組成的KillTrigger物件 0:17:12.463,0:17:17.512 在大多的情況下[br]Remover腳本移除掉入河中的敵人 0:17:17.512,0:17:21.442 並播放一個水花動畫和音效 0:17:21.442,0:17:24.001 但如果是主角被觸發器偵測到時 0:17:24.001,0:17:27.092 就會呼叫PlayerHealth腳本裡的Die函式 0:17:27.092,0:17:34.527 並禁用CameraTracking同時將角色移出螢幕[br]並呼叫co-routiene函數(停止2秒) 0:17:34.527,0:17:36.527 然後重生在出生點 0:17:37.079,0:17:39.079 接下來焦點轉移到角色生存 0:17:39.079,0:17:42.481 來看看它是如何生存[br]和我們給予它甚麼生存工具 0:17:42.481,0:17:49.911 遊戲中有兩種幫助玩家的補給箱[br]一種箱子是炸彈,另一種可以補血 0:17:50.411,0:17:55.695 補給箱由箱子和降落傘兩個部分組成 0:17:58.046,0:18:03.768 這兩個元素放入一個空白物件[br]我們就可以一起觸發動畫 0:18:03.768,0:18:08.476 我們定位這兩個圖片[br]降落傘的軸心位於父物件的中心 0:18:09.045,0:18:15.307 這樣動畫可以左右搖擺[br]讓降落傘是浮在空中的感覺 0:18:15.307,0:18:19.307 然後增加一個剛體讓它有重力往下掉 0:18:19.307,0:18:24.962 箱子增加碰撞體用來探測它的著陸時機[br]和玩家撿起的時機 0:18:24.962,0:18:30.513 著陸之後[br]播放第二段動畫讓降落傘消失 0:18:30.513,0:18:34.916 跟遊戲其他地方一樣[br]動畫器控制物件的狀態 0:18:34.916,0:18:38.916 我們可以看到預設的情況下[br]它會播放FloatDown動畫 0:18:38.916,0:18:43.472 然後當Land = True時會切換到著陸狀態 0:18:43.972,0:18:49.732 在腳本裡,我們使用onTriggerEnter函數[br]透過標記來檢測是否碰到地面 0:18:49.732,0:18:55.098 我們也將補給箱從父物件中分離[br]並給它一個剛體 0:18:55.098,0:19:00.624 它就可以和環境互動[br]比如降落在一個斜坡上就會斜停在坡上 0:19:00.624,0:19:03.672 接下來看看炸彈 0:19:03.672,0:19:08.475 撿起炸彈箱的動作是箱子上的[br]BombPickup腳本處理的 0:19:08.475,0:19:16.739 透過角色身上的LayBombs腳本[br]增減主角擁有的炸彈數量 0:19:17.557,0:19:25.557 LayBombs腳本負責檢查是否攜帶著炸彈[br]並負責產生並放置炸彈 0:19:27.424,0:19:36.147 炸彈設有定時裝置,在爆炸之前[br]透過BombDetonation裡的yield倒數計時 0:19:36.799,0:19:39.545 爆炸函式執行幾個動作 0:19:39.545,0:19:43.797 它會重置bombLaid參數[br]允許產生另外一個炸彈箱 0:19:43.797,0:19:49.797 它會通知產生器補充新的炸彈箱[br]並炸死範圍內的敵人 0:19:50.518,0:19:53.058 來看看最後一部分怎麼運作的 0:19:53.058,0:19:57.180 因為炸彈對敵人來說是致命的[br]不管他們的生命值剩下多少 0:19:57.180,0:20:03.470 我們用Physics.OverlapCircleAll方法收集[br]在爆炸範圍內所有標記為敵人的對象 0:20:03.470,0:20:06.612 然後為每一個敵人執行迴圈 0:20:06.612,0:20:15.542 設定他們的血量為0[br]從爆炸地點到敵人算出一個向量並施加外力 0:20:16.304,0:20:21.381 一旦迴圈跑完,就可以播放視覺效果 0:20:21.381,0:20:25.907 播放一段音效同時摧毀炸彈 0:20:26.875,0:20:29.252 爆炸視覺效果有兩部分 0:20:29.252,0:20:33.583 主要部份是一個簡單的圓形[br]短暫的出現後摧毀 0:20:33.583,0:20:39.583 第二部分是星星狀的粒子系統[br]重複用相同圖片呈現火箭爆炸 0:20:42.265,0:20:51.735 效率上我們保持粒子系統持續在場景中[br]需要時我們用程式移動到指定位置播放 0:20:52.511,0:20:56.511 這樣可以讓粒子系統存在記憶體裡[br]使遊戲比較有效率 0:20:57.011,0:21:04.668 這麼做主要是因為這個範例[br]同時只會有一個爆炸在場景中 0:21:04.668,0:21:07.794 因為玩家只能一次丟一個炸彈 0:21:07.794,0:21:14.936 這就是為什麼將粒子系統保持在場景中[br]並重複播放的原因,比起建立後移除有效率 0:21:15.714,0:21:21.618 但如果是火箭爆炸,因為可以重複發射[br]因此需要建立後移除 0:21:22.118,0:21:26.118 讓我們看看主角殺死敵人[br]怎麼計算分數 0:21:26.618,0:21:35.528 這分為兩個部分,動畫顯示獲得100分[br]以及增加UI的分數計算 0:21:35.528,0:21:40.193 分數動畫由1和0兩個數字組成 0:21:40.193,0:21:42.872 將它們放到場景中的空白物件 0:21:42.872,0:21:49.186 給予一個簡單的得分動畫[br]並用程式讓它們在動畫完成後消失 0:21:49.186,0:21:55.186 我們放置摧毀腳本在動畫事件尾端 0:22:06.142,0:22:13.703 ScoreUI單純是個GUI文字元件[br]帶有管理玩家分數的腳本 0:22:13.703,0:22:20.980 Score是全域變數,代表隨時可以[br]檢查當敵人被殺死時增加100分 0:22:20.980,0:22:24.980 說到敵人,讓我們仔細看看他們 0:22:25.480,0:22:28.260 在我們的遊戲裡,有兩種類型外星敵人 0:22:28.260,0:22:30.854 一種是綠皮膚的鼻涕蟲 0:22:30.854,0:22:34.563 另一種是會搭著飛船保護自己[br]的智慧型外星怪物 0:22:34.563,0:22:36.563 這些角色會共用一種腳本 0:22:36.563,0:22:38.563 因為他們行為相似 0:22:38.563,0:22:45.765 我們可以檢視它們的全域變數[br]並設定不同的移動速度和生命 0:22:46.638,0:22:49.093 每個敵人都有自己的移動動畫 0:22:49.093,0:22:54.444 鼻涕蟲有一個可以活動的尾巴[br]飛船內的敵人會前後搖擺移動 0:22:55.994,0:23:01.994 對鼻涕蟲來說,我們匯入圖形[br]並把尾巴切為獨立圖形 0:23:01.994,0:23:07.475 這樣我們就可以單獨縮放它[br]不會影響到整個圖片 0:23:07.475,0:23:14.124 軸心設定到右邊[br]我們可以漂亮的伸展收縮尾巴 0:23:16.475,0:23:19.918 上下移動眼瞼 0:23:19.918,0:23:24.859 然後使用Z軸來排序[br]眼睛就會在眼瞼底下了 0:23:24.859,0:23:26.859 就可以製作眨眼動畫 0:23:28.865,0:23:34.046 第二個外星人的動畫要簡單的多[br]我們只需要前後轉動它 0:23:35.798,0:23:41.229 關於這些敵人的移動技術[br]我們透過改變剛體的速率來移動它們 0:23:41.229,0:23:47.826 當它們遇到一個牆壁這樣的障礙物時[br]會呼叫Physics.OverlapPoint函式來檢測 0:23:47.826,0:23:55.850 檢查是否有重疊到像是[br]牆壁和兩邊的塔被標記的障礙物 0:23:55.850,0:23:59.161 當函式偵測到時,就會呼叫Flip函式 0:23:59.161,0:24:04.070 函式會翻轉敵人的X軸縮放[br]讓它轉到不同方向 0:24:04.070,0:24:11.036 要殺死敵人,當敵人和火箭相撞時[br]在撞擊時會呼叫Hurt函式 0:24:14.962,0:24:19.213 這個函式我們從敵人身上扣1點血 0:24:19.213,0:24:23.213 並持續呼叫函式保持敵人持續扣血 0:24:23.213,0:24:27.124 如果血條降到0,就會呼叫死亡函式 0:24:31.229,0:24:33.916 當他們死後,就會執行一些函式 0:24:33.916,0:24:39.916 會先停用所有的圖形渲染[br]因為2D角色大多都有動畫 0:24:40.941,0:24:46.941 這是為了把動畫物件換成單張死亡圖片 0:24:47.745,0:24:54.165 我們在圖形渲染器將圖片改為deadEnemy 0:24:54.165,0:24:58.165 然後我們幫Score全域變數增加100 0:24:58.165,0:25:03.534 然後增加扭轉讓他們死亡時扭曲 0:25:04.448,0:25:08.881 因此我們要讓這些敵人死後[br]掉入環境的河中 0:25:08.881,0:25:13.589 我們找到物件上所有碰撞體[br]並設定IsTrigger = True 0:25:13.589,0:25:17.417 這樣他們就會穿過所有環境往下掉 0:25:17.417,0:25:25.470 然後播放死亡音效之後展示一個分數動畫 0:25:27.876,0:25:29.876 要將已死亡的敵人從場景中移除 0:25:29.876,0:25:31.876 我們使用killTregger物件 0:25:31.876,0:25:34.762 和前面所說的一樣 0:25:34.762,0:25:36.762 當任何角色接觸它時 0:25:36.762,0:25:39.950 將會引起一個水花動畫,並移除該物件 0:25:39.950,0:25:45.950 它們撞擊水面並播放[br]一段附在水花動畫的音效 0:25:45.950,0:25:50.634 所以當我們產生水花動畫時[br]同時也聽到音效 0:25:55.153,0:25:59.153 要完成遊戲關卡[br]我們也用一些移動背景來裝飾 0:25:59.153,0:26:02.302 為了讓遊戲環境更顯動態 0:26:02.302,0:26:07.125 我們添加了一些飛翔的天鵝[br]以及沿著河岸開的公車和計程車 0:26:07.125,0:26:16.051 首先是天鵝,它是在Photoshop裡面畫好後[br]用Multiple Sprite導入圖片 0:26:16.051,0:26:20.800 Unity會自動裁切天鵝的每個圖片 0:26:20.800,0:26:24.579 分為不同的圖導入[br]並把原圖當作父物件放在底下 0:26:24.579,0:26:32.346 因為這是個動畫組合,可以將所有的圖片[br]一起拖到場景中,讓Unity幫我們生成動畫 0:26:32.346,0:26:37.759 瞧,天鵝的動畫已經準備好了 0:26:37.759,0:26:43.369 然後給天鵝一個剛體[br]讓我們可以控制速度飛過螢幕 0:26:43.369,0:26:47.334 和公車和計程車一樣,天鵝已被存為預製物件 0:26:49.257,0:26:55.257 公車和計程車作法只需要[br]在匯入圖形時分開車身和車輪 0:26:55.257,0:26:58.392 並製作一個簡單的擺動動畫 0:26:58.392,0:27:04.376 相同指定2D剛體到車子上[br]就能夠驅動他們在螢幕上跑 0:27:07.279,0:27:14.271 公車、計程車和天鵝這三個物件[br]我們用一個重複執行的腳本來製造它們 0:27:14.271,0:27:21.838 BackgroundPropsSpawner腳本[br]同時也處理出生位置,出生頻率並給予速度 0:27:21.838,0:27:30.521 代表我們可以用這個腳本應用在三種對象[br]預設出生點和屬性 0:27:30.521,0:27:33.854 要了解更多的細節,可以查看腳本中的說明 0:27:33.854,0:27:40.409 最後,要了解更多的背景動態[br]我們使用了移動的雲朵、流動的河水和煙霧 0:27:41.323,0:27:50.004 我們在空白物件下放兩個背景圖片[br]並使這些圖片緩慢飛過螢幕 0:27:50.004,0:27:54.652 因為這是個無限循環[br]所以動畫永遠不會停 0:27:59.185,0:28:01.031 這就是我們遊戲的製作過程 0:28:01.031,0:28:05.516 我們希望這個教學讓你[br]對如何用Unity開發2D遊戲有一定了解 0:28:05.516,0:28:08.971 未來我們也會製作更簡單的教學 0:28:08.971,0:28:14.959 也期待你們對於Unity4.3的反應[br]迫不及待想看看你們的2D產品 0:28:14.959,0:28:16.487 謝謝觀看