[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.30,Default,,0000,0000,0000,,Unity 4.3 我們發佈了第一階段的2D工具 Dialogue: 0,0:00:04.30,0:00:08.30,Default,,0000,0000,0000,,為此,我們用這個工具做了一個2D範例 Dialogue: 0,0:00:08.30,0:00:11.53,Default,,0000,0000,0000,,這個2D範例叫做"鐵橋塔防" Dialogue: 0,0:00:11.53,0:00:15.56,Default,,0000,0000,0000,,描述倫敦鐵橋被外星人入侵的故事 Dialogue: 0,0:00:15.56,0:00:23.47,Default,,0000,0000,0000,,範例完全用2D圖片和物理來呈現\N讓你了解這些元素如何在Unity裡組合 Dialogue: 0,0:00:23.47,0:00:31.64,Default,,0000,0000,0000,,影片會說明範例裡的背景、前景、角色、特效\N鏡頭追跡、動作和腳本程式是如何製作的 Dialogue: 0,0:00:31.64,0:00:36.14,Default,,0000,0000,0000,,開始之前,先來聊聊基本的Unity 2D工作 Dialogue: 0,0:00:36.86,0:00:43.04,Default,,0000,0000,0000,,首先,當要製作2D專案,你應該先設定工作環境為2D Dialogue: 0,0:00:43.04,0:00:47.04,Default,,0000,0000,0000,,可以在建立新專案時在下拉選單設定 Dialogue: 0,0:00:47.04,0:00:53.17,Default,,0000,0000,0000,,或是在開發中到Edit - Project Settings - Editor調整 Dialogue: 0,0:00:53.17,0:00:59.63,Default,,0000,0000,0000,,這代表預設情況下,輸入的材質會\N被視為2D圖片,場景視圖也會預設為2D Dialogue: 0,0:00:59.63,0:01:04.42,Default,,0000,0000,0000,,這個新的2D模式會採用完全的\N正視圖視角來呈現你的2D遊戲 Dialogue: 0,0:01:04.42,0:01:10.20,Default,,0000,0000,0000,,同時也會把右上角的3D小圖示都隱藏\N讓工作空間更大 Dialogue: 0,0:01:10.20,0:01:17.04,Default,,0000,0000,0000,,除此之外,Unity 2D的工作流程\N是和現有的3D流程整合在一起的 Dialogue: 0,0:01:17.04,0:01:22.93,Default,,0000,0000,0000,,如果你已經會操作原本的Unity\N那Unity 2D會很好上手 Dialogue: 0,0:01:22.93,0:01:27.22,Default,,0000,0000,0000,,值得一提的是,你也可以混搭2D和3D共用 Dialogue: 0,0:01:27.22,0:01:32.87,Default,,0000,0000,0000,,所以如果你想要有3D元素在你的2D遊戲裡\N或2D元素在3D遊戲裡都沒有問題 Dialogue: 0,0:01:33.37,0:01:38.31,Default,,0000,0000,0000,,現在來看看範例如何建立一個關卡 Dialogue: 0,0:01:38.81,0:01:44.81,Default,,0000,0000,0000,,我們一開始勾勒關卡設計雛形\N然後到Photoshop裡面去把每個圖層做出來 Dialogue: 0,0:01:45.31,0:01:51.31,Default,,0000,0000,0000,,然後輸出這些圖層\N成為新的Sprite類型導入Unity Dialogue: 0,0:01:58.37,0:02:06.52,Default,,0000,0000,0000,,為了呈現出背景的視差,我們做了一些\N背景元素在Sorting Layer裡 Dialogue: 0,0:02:06.52,0:02:09.66,Default,,0000,0000,0000,,這是一個2D工具的新功能 Dialogue: 0,0:02:10.16,0:02:17.38,Default,,0000,0000,0000,,當所有背景指定到這一層後\N我們可以在圖片著色器的圖層排序它們 Dialogue: 0,0:02:17.38,0:02:21.38,Default,,0000,0000,0000,,調好位置之後也可以把圖層鎖定不能編輯 Dialogue: 0,0:02:21.38,0:02:27.75,Default,,0000,0000,0000,,這樣的話我們編輯前景元素的時候\N就不用擔心會不小心動到背景元素 Dialogue: 0,0:02:27.75,0:02:31.75,Default,,0000,0000,0000,,可以從介面右上方的圖層選單來設定 Dialogue: 0,0:02:32.82,0:02:39.53,Default,,0000,0000,0000,,由於背景只是裝飾用的,所以\N並不需要在圖片上放任何元件 Dialogue: 0,0:02:39.53,0:02:41.53,Default,,0000,0000,0000,,將它們放到一個空的物件裡 Dialogue: 0,0:02:41.53,0:02:46.20,Default,,0000,0000,0000,,並放入一個叫做叫做\NBackgroundParallax的腳本來處裡視差 Dialogue: 0,0:02:46.20,0:02:50.64,Default,,0000,0000,0000,,更多的細節可以詳查這個已經註解的腳本 Dialogue: 0,0:02:54.91,0:02:59.40,Default,,0000,0000,0000,,接下來製作角色活動的前景空間 Dialogue: 0,0:02:59.79,0:03:03.47,Default,,0000,0000,0000,,我們設計了倫敦鐵橋和降落在中間的飛碟 Dialogue: 0,0:03:03.47,0:03:09.22,Default,,0000,0000,0000,,主角處於一個敵人從天而降並到處亂竄的環境 Dialogue: 0,0:03:09.22,0:03:13.63,Default,,0000,0000,0000,,因此,每一個前景元素都需要\N碰撞體(Collider)來讓主角在上面行走 Dialogue: 0,0:03:13.63,0:03:21.24,Default,,0000,0000,0000,,大多數環境用方體碰撞就可以\N除了外型比較複雜的飛碟 Dialogue: 0,0:03:22.50,0:03:28.72,Default,,0000,0000,0000,,Unity提供多邊形碰撞體(Polygon Collider)\N可以根據圖片外型自動產生多邊形碰撞體 Dialogue: 0,0:03:28.72,0:03:32.05,Default,,0000,0000,0000,,甚至可以調整碰撞體的外型 Dialogue: 0,0:03:32.05,0:03:38.16,Default,,0000,0000,0000,,你可以新增、移動或刪除節點\N調整到更適合行走的外型 Dialogue: 0,0:03:38.66,0:03:45.60,Default,,0000,0000,0000,,為了排序前景元素我們建立了前景層\N設定顯示在背景之前 Dialogue: 0,0:03:48.88,0:03:50.88,Default,,0000,0000,0000,,接下來看看主角 Dialogue: 0,0:03:53.71,0:04:03.60,Default,,0000,0000,0000,,我們的主角也是在Photoshop裡面設計的\N一個四肢獨立類似卡通主角雷曼的角色 Dialogue: 0,0:04:03.60,0:04:05.60,Default,,0000,0000,0000,,另外一個2D工具的新功能 Dialogue: 0,0:04:05.60,0:04:09.64,Default,,0000,0000,0000,,是一個以圖表化的動畫工具\N可以在Photoshop裡繪製每一節點的圖 Dialogue: 0,0:04:09.64,0:04:14.36,Default,,0000,0000,0000,,後面我們會介紹如何用這方法\N製造我們的天鵝 Dialogue: 0,0:04:15.07,0:04:20.20,Default,,0000,0000,0000,,因為身體部位分開比較好控制動畫\N因此我們希望獨立每個身體部位 Dialogue: 0,0:04:20.20,0:04:27.96,Default,,0000,0000,0000,,所以我們將身體部位獨立切開\N好讓Unity在輸入時容易拆離它們 Dialogue: 0,0:04:28.76,0:04:33.10,Default,,0000,0000,0000,,這代表我們可以為圖片單獨製作動作 Dialogue: 0,0:04:33.10,0:04:40.92,Default,,0000,0000,0000,,把這些部位放入建好的角色層\N然後改變Z軸深度來改變前後順序 Dialogue: 0,0:04:48.81,0:04:56.59,Default,,0000,0000,0000,,把這些圖片都放入一個有控制腳本\N碰撞體、物理設定等等的物件 Dialogue: 0,0:04:56.59,0:05:07.10,Default,,0000,0000,0000,,一旦做到這裡,就可以到動畫視窗給予圖片動作\N建立待機、跑、跳、射擊和死亡的動畫 Dialogue: 0,0:05:07.10,0:05:11.80,Default,,0000,0000,0000,,使用動畫視窗裡新的分鏡表功能\N就可以簡單製作動作 Dialogue: 0,0:05:13.41,0:05:19.40,Default,,0000,0000,0000,,我們在父物件建立一個動畫元件\N然後針對每一個子物件建立影格 Dialogue: 0,0:05:19.40,0:05:25.40,Default,,0000,0000,0000,,移動指標到想要的影格後調整角色部位\N就會自動把變量錄到影格上 Dialogue: 0,0:05:27.31,0:05:35.06,Default,,0000,0000,0000,,可隨時切換分鏡表和動畫曲線\N使得它更容易調整設計 Dialogue: 0,0:05:36.73,0:05:41.37,Default,,0000,0000,0000,,這些動作建立好之後我們可以\N幫我們的角色設計控制狀態 Dialogue: 0,0:05:41.37,0:05:45.28,Default,,0000,0000,0000,,讓我們用程式呼叫角色執行各種動作 Dialogue: 0,0:05:45.28,0:05:52.12,Default,,0000,0000,0000,,因為不是驅動3D骨架,所以取消打勾Root Motion Dialogue: 0,0:05:52.12,0:05:57.29,Default,,0000,0000,0000,,也可以打勾Animate Physics如果\N動畫要和物理行為相互作用 Dialogue: 0,0:05:57.29,0:06:04.56,Default,,0000,0000,0000,,為了在場景走動,主角腳上有圓形碰撞體\N和一個包覆整個身體的方形碰撞體 Dialogue: 0,0:06:04.56,0:06:09.45,Default,,0000,0000,0000,,這樣他可以平順地行走和跳下場景\N跳起來的時候頭部也可以判定撞到 Dialogue: 0,0:06:09.80,0:06:16.04,Default,,0000,0000,0000,,為了控制角色動作,我們寫了\N一個腳本透過2D物理引擎來移動 Dialogue: 0,0:06:16.04,0:06:21.43,Default,,0000,0000,0000,,這代表在遊戲裡面可以指定主角和敵人\N讓遊戲動態更豐富的物理行為 Dialogue: 0,0:06:21.43,0:06:25.81,Default,,0000,0000,0000,,我們用PlayerControl腳本來判斷角色的輸入 Dialogue: 0,0:06:25.81,0:06:32.00,Default,,0000,0000,0000,,我們在此指定物理移動速度\N同時也把輸入的值送到動畫控制器 Dialogue: 0,0:06:32.00,0:06:40.48,Default,,0000,0000,0000,,判定播放哪些動畫以及\N順暢的播放分鏡表上圖片的轉變 Dialogue: 0,0:06:40.48,0:06:44.48,Default,,0000,0000,0000,,使用動畫控制建立圖片動態最大的好處是 Dialogue: 0,0:06:44.48,0:06:51.28,Default,,0000,0000,0000,,可以調整動畫速度用來搭配物理速度\N不需要額外再作任何判定 Dialogue: 0,0:07:23.13,0:07:26.36,Default,,0000,0000,0000,,FixedUpdate函式會檢查每一步物理運算 Dialogue: 0,0:07:26.36,0:07:32.99,Default,,0000,0000,0000,,在這裡我們第一件要做的事情是\N把輸入的水平值傳給動畫的速度參數 Dialogue: 0,0:07:33.95,0:07:41.72,Default,,0000,0000,0000,,在我們的狀態設定裡\N待機狀態到跑動需要速度參數大於0.1 Dialogue: 0,0:07:41.72,0:07:46.02,Default,,0000,0000,0000,,當值成立時,動畫就會從待機切到跑步 Dialogue: 0,0:07:51.86,0:07:58.82,Default,,0000,0000,0000,,要讓角色移動,讓它有Rigidbody2D元件\N就可以為它加力道移動 Dialogue: 0,0:07:59.63,0:08:07.71,Default,,0000,0000,0000,,同時我們也根據輸入的水平值是\N大於0或小於0來處理角色面朝的方向 Dialogue: 0,0:08:07.71,0:08:14.57,Default,,0000,0000,0000,,這是因為在Unity裡,按住左鍵會傳回-1\N而按住右鍵會傳回+1 Dialogue: 0,0:08:15.07,0:08:24.57,Default,,0000,0000,0000,,根據輸入值呼叫一個簡單的翻轉函數\N來翻轉角色的X軸縮放,讓角色面向反方向 Dialogue: 0,0:08:26.85,0:08:31.00,Default,,0000,0000,0000,,為了判定角色是否著地\N我們新增了一個Ground圖層 Dialogue: 0,0:08:31.00,0:08:34.98,Default,,0000,0000,0000,,並指定給全部可行走的前景物件 Dialogue: 0,0:08:43.40,0:08:50.23,Default,,0000,0000,0000,,然後使用2D裡面的Linecast函數\N檢查Ground圖層是否和角色的腳接觸 Dialogue: 0,0:08:50.23,0:08:56.78,Default,,0000,0000,0000,,為了讓製作更容易,我們建立了\N一個空白的物件當作檢查地面的標準點 Dialogue: 0,0:08:56.78,0:09:03.08,Default,,0000,0000,0000,,在該物件上增加一個小圖示\N我們就可以控制角色到地面的距離 Dialogue: 0,0:09:03.08,0:09:07.96,Default,,0000,0000,0000,,就遊戲角度來看\N角色在地面時只能做跳的動作 Dialogue: 0,0:09:08.46,0:09:12.65,Default,,0000,0000,0000,,更多關於角色控制的資訊\N可以查看範例腳本裡面的說明 Dialogue: 0,0:09:12.65,0:09:15.88,Default,,0000,0000,0000,,影片稍後也會討論角色的武器 Dialogue: 0,0:09:15.88,0:09:19.88,Default,,0000,0000,0000,,接下來看看相機如何追蹤角色 Dialogue: 0,0:09:21.29,0:09:27.82,Default,,0000,0000,0000,,跟3D遊戲一樣,在2D遊戲裡\N鏡頭運鏡也左右著遊戲體驗 Dialogue: 0,0:09:27.82,0:09:33.62,Default,,0000,0000,0000,,要呈現經典的2D遊戲運鏡\N我們參考了2D遊戲經典大作 Dialogue: 0,0:09:33.62,0:09:38.65,Default,,0000,0000,0000,,任天堂或超任的超級瑪莉歐的鏡頭運作 Dialogue: 0,0:09:38.65,0:09:45.12,Default,,0000,0000,0000,,在超級瑪莉歐世界裡鏡頭會水平移動\N除了封閉的空間或關卡邊緣 Dialogue: 0,0:09:45.12,0:09:49.34,Default,,0000,0000,0000,,在這兩類區域裡角色小幅移動\N鏡頭不會追蹤 Dialogue: 0,0:09:49.34,0:09:54.05,Default,,0000,0000,0000,,一旦角色移出區域\N鏡頭又會開始追蹤角色 Dialogue: 0,0:09:54.05,0:09:58.20,Default,,0000,0000,0000,,超級瑪莉歐的相機\N用特定高度來進行垂直判定 Dialogue: 0,0:09:58.20,0:10:06.85,Default,,0000,0000,0000,,但我們的遊戲沒有往上的長度\N比較像動作平台,所以不需要這類設定 Dialogue: 0,0:10:07.21,0:10:12.79,Default,,0000,0000,0000,,因此我們的相機在垂直判定\N採用了和水平一樣的方法 Dialogue: 0,0:10:18.78,0:10:25.14,Default,,0000,0000,0000,,請看看主相機裡的CameraFollow腳本\N了解鏡頭追蹤更完整的寫法和註解 Dialogue: 0,0:10:26.14,0:10:32.73,Default,,0000,0000,0000,,遊戲中有許多特效\N但最重要的是主角殺死外星人的能力 Dialogue: 0,0:10:32.73,0:10:36.34,Default,,0000,0000,0000,,主角會發射一個具有\N反作用力動畫的火箭筒 Dialogue: 0,0:10:36.34,0:10:38.90,Default,,0000,0000,0000,,這個動畫由幾個部分組成 Dialogue: 0,0:10:38.90,0:10:47.97,Default,,0000,0000,0000,,首先檢查輸入,當按下Fire鍵時\N產生一個火箭,播放音效並觸發火箭動畫播放 Dialogue: 0,0:10:47.97,0:10:49.97,Default,,0000,0000,0000,,讓我們進一步分解這些步驟 Dialogue: 0,0:10:49.97,0:10:57.68,Default,,0000,0000,0000,,為了可以播放其他動畫(跑步)時同時播放火箭發射\N我們在動畫控制器建立了Shooting的動畫層 Dialogue: 0,0:10:57.68,0:11:06.98,Default,,0000,0000,0000,,將Weight屬性設為1,可以\N完全覆蓋基本層(Base Layer)所有的動作 Dialogue: 0,0:11:20.50,0:11:27.35,Default,,0000,0000,0000,,我們可以從任何狀態中用程式\N觸發Shoot參數發射動畫 Dialogue: 0,0:11:27.35,0:11:30.54,Default,,0000,0000,0000,,來看看負責這工作的Gun腳本 Dialogue: 0,0:11:32.70,0:11:37.40,Default,,0000,0000,0000,,你可以看到我們寫了驅動事件\N觸發Shoot為True Dialogue: 0,0:11:37.40,0:11:45.51,Default,,0000,0000,0000,,觸發後會打開,在下一格重置為關\N就可以重複使用,對於射擊動作最好用 Dialogue: 0,0:11:46.01,0:11:50.67,Default,,0000,0000,0000,,除了設定動畫,我們也從腳本中發射火箭 Dialogue: 0,0:11:50.67,0:12:00.56,Default,,0000,0000,0000,,播放音效後根據角色的方向\N產生火箭並給它一個X軸的正或負速度 Dialogue: 0,0:12:01.28,0:12:05.29,Default,,0000,0000,0000,,這個Gun腳本被放在主角身上的空物件 Dialogue: 0,0:12:05.29,0:12:11.66,Default,,0000,0000,0000,,像這樣將腳本放到一個空物件上\N可以輕易的定位火箭發射位置 Dialogue: 0,0:12:11.66,0:12:20.01,Default,,0000,0000,0000,,我們將物件放到火箭筒發射口\N然後以他自己的座標當作發射點 Dialogue: 0,0:12:40.25,0:12:46.80,Default,,0000,0000,0000,,火箭本身有2D剛體\N我們給它一個速度讓它移動 Dialogue: 0,0:12:46.80,0:12:51.10,Default,,0000,0000,0000,,它也有火焰噴射動畫和粒子系統做的煙霧 Dialogue: 0,0:12:52.83,0:12:56.48,Default,,0000,0000,0000,,粒子系統也接受新的Sprite圖片 Dialogue: 0,0:12:56.48,0:13:04.15,Default,,0000,0000,0000,,所以可以將煙霧的圖片切好後加到材質\N並指定到粒子系統的Texture Sheet Animation Dialogue: 0,0:13:04.15,0:13:08.23,Default,,0000,0000,0000,,就有煙霧特效讓粒子系統發射 Dialogue: 0,0:13:16.12,0:13:22.94,Default,,0000,0000,0000,,當火箭命中敵人或環境時\N火箭本身會引起爆炸並被摧毀 Dialogue: 0,0:13:22.94,0:13:27.73,Default,,0000,0000,0000,,爆炸是我們製作的爆炸動畫物件 Dialogue: 0,0:13:27.73,0:13:33.70,Default,,0000,0000,0000,,排序位置在前景的最後面 Dialogue: 0,0:13:36.17,0:13:44.58,Default,,0000,0000,0000,,要建立這類動畫,可以從專案點選圖片\N然後在屬性Sprite Mode選擇Multiple Dialogue: 0,0:13:44.58,0:13:49.76,Default,,0000,0000,0000,,這功能允許我們編輯圖片\N手動或是自動裁切圖片大小 Dialogue: 0,0:13:49.76,0:13:52.41,Default,,0000,0000,0000,,一旦完成裁切後 Dialogue: 0,0:13:52.41,0:13:58.76,Default,,0000,0000,0000,,只需要點擊Apply\NUnity會自動產生圖片並作為子物件 Dialogue: 0,0:13:59.71,0:14:01.69,Default,,0000,0000,0000,,這就是火箭製作過程 Dialogue: 0,0:14:01.69,0:14:06.53,Default,,0000,0000,0000,,稍後我們將在影片中討論\N殺死敵人的動畫技法 Dialogue: 0,0:14:07.10,0:14:12.19,Default,,0000,0000,0000,,現在先讓我們回到主角\N看看如何處理血條補血和扣血 Dialogue: 0,0:14:12.19,0:14:18.55,Default,,0000,0000,0000,,血條被定義為一個浮點數(Float)\N每次碰到敵人就會呼叫TakeDamage函式 Dialogue: 0,0:14:18.55,0:14:25.35,Default,,0000,0000,0000,,為了避免觸發太快造成死亡\N我們用repeatDamagePeriod來間隔觸發時間 Dialogue: 0,0:14:26.52,0:14:31.14,Default,,0000,0000,0000,,為了讓角色顯示受傷\N並容易從敵人手中逃脫 Dialogue: 0,0:14:31.14,0:14:34.85,Default,,0000,0000,0000,,我們建立了受傷的動作\N並在物理上彈飛主角 Dialogue: 0,0:14:34.85,0:14:39.54,Default,,0000,0000,0000,,要做到這點,TakeDamage函式\N會阻止角色跳躍 Dialogue: 0,0:14:39.54,0:14:42.12,Default,,0000,0000,0000,,並從主角與敵人之間找到一個向量位置 Dialogue: 0,0:14:42.12,0:14:46.12,Default,,0000,0000,0000,,指定一個物理力量往指定方向擊退 Dialogue: 0,0:14:46.12,0:14:55.32,Default,,0000,0000,0000,,hurtForce是一個全域變數,可以隨時從介面調整\N而不用從腳本裡調整 Dialogue: 0,0:14:55.32,0:15:02.21,Default,,0000,0000,0000,,除了擊退主角之外,我們同時\N也扣掉角色的血量並更新血條 Dialogue: 0,0:15:02.21,0:15:09.82,Default,,0000,0000,0000,,為了呈現扣血,我們把血條的寬度縮減\N用一個公式計算讓綠色轉變到紅色 Dialogue: 0,0:15:09.82,0:15:14.64,Default,,0000,0000,0000,,透過當下的血量和總量算出一個百分比 Dialogue: 0,0:15:14.64,0:15:21.74,Default,,0000,0000,0000,,血條是由兩個圖片組成\N一個顯示血量,另一個顯示外框 Dialogue: 0,0:15:21.74,0:15:25.95,Default,,0000,0000,0000,,這也是在Photoshop裡做的\N然後輸出兩個單獨的圖片 Dialogue: 0,0:15:25.95,0:15:34.05,Default,,0000,0000,0000,,導入圖形的時候,設定圖形軸心在左邊\N所以當它按比例減少時,就會往左縮 Dialogue: 0,0:15:48.57,0:15:54.57,Default,,0000,0000,0000,,這兩個圖片放在一個空物件底下\N給予一個簡單腳本,讓它顯示在角色頭上 Dialogue: 0,0:15:54.57,0:15:58.62,Default,,0000,0000,0000,,將血條位置設定與角色相同 Dialogue: 0,0:15:58.62,0:16:02.62,Default,,0000,0000,0000,,並加上偏移用的全域變數\N好在檢視介面進行調整 Dialogue: 0,0:16:16.22,0:16:22.63,Default,,0000,0000,0000,,當主角血量為0時,設定碰撞體的isTrigger = true\N主角就會往下跌到水上 Dialogue: 0,0:16:22.63,0:16:28.19,Default,,0000,0000,0000,,同時將主角排序推到UI層上\N主角會移到畫面最上層 Dialogue: 0,0:16:28.19,0:16:31.59,Default,,0000,0000,0000,,UI層是我們製作的層\N是用來表示像UI的前面的物件 Dialogue: 0,0:16:31.59,0:16:34.22,Default,,0000,0000,0000,,當腳色死亡時,我們有兩個動畫 Dialogue: 0,0:16:34.22,0:16:38.63,Default,,0000,0000,0000,,一個叫Death,會失去帽子和槍\N另外一個叫Falling Dialogue: 0,0:16:38.63,0:16:47.24,Default,,0000,0000,0000,,用Exit Time當作動畫的切換條件\N一旦Death播完就會切到Falling動畫 Dialogue: 0,0:16:50.78,0:16:55.00,Default,,0000,0000,0000,,最後,在播放死亡動畫時\N為了阻止玩家移動角色或射擊 Dialogue: 0,0:16:55.00,0:16:58.34,Default,,0000,0000,0000,,我們會禁用PlayerControl和Gun腳本 Dialogue: 0,0:16:58.34,0:17:05.04,Default,,0000,0000,0000,,由於Die函式是全域可以從任何地方呼叫\N例如玩家掉入水中 Dialogue: 0,0:17:05.04,0:17:12.46,Default,,0000,0000,0000,,要在主角接觸水面時重置遊戲,我們\N用一個由觸發器和腳本組成的KillTrigger物件 Dialogue: 0,0:17:12.46,0:17:17.51,Default,,0000,0000,0000,,在大多的情況下\NRemover腳本移除掉入河中的敵人 Dialogue: 0,0:17:17.51,0:17:21.44,Default,,0000,0000,0000,,並播放一個水花動畫和音效 Dialogue: 0,0:17:21.44,0:17:24.00,Default,,0000,0000,0000,,但如果是主角被觸發器偵測到時 Dialogue: 0,0:17:24.00,0:17:27.09,Default,,0000,0000,0000,,就會呼叫PlayerHealth腳本裡的Die函式 Dialogue: 0,0:17:27.09,0:17:34.53,Default,,0000,0000,0000,,並禁用CameraTracking同時將角色移出螢幕\N並呼叫co-routiene函數(停止2秒) Dialogue: 0,0:17:34.53,0:17:36.53,Default,,0000,0000,0000,,然後重生在出生點 Dialogue: 0,0:17:37.08,0:17:39.08,Default,,0000,0000,0000,,接下來焦點轉移到角色生存 Dialogue: 0,0:17:39.08,0:17:42.48,Default,,0000,0000,0000,,來看看它是如何生存\N和我們給予它甚麼生存工具 Dialogue: 0,0:17:42.48,0:17:49.91,Default,,0000,0000,0000,,遊戲中有兩種幫助玩家的補給箱\N一種箱子是炸彈,另一種可以補血 Dialogue: 0,0:17:50.41,0:17:55.70,Default,,0000,0000,0000,,補給箱由箱子和降落傘兩個部分組成 Dialogue: 0,0:17:58.05,0:18:03.77,Default,,0000,0000,0000,,這兩個元素放入一個空白物件\N我們就可以一起觸發動畫 Dialogue: 0,0:18:03.77,0:18:08.48,Default,,0000,0000,0000,,我們定位這兩個圖片\N降落傘的軸心位於父物件的中心 Dialogue: 0,0:18:09.04,0:18:15.31,Default,,0000,0000,0000,,這樣動畫可以左右搖擺\N讓降落傘是浮在空中的感覺 Dialogue: 0,0:18:15.31,0:18:19.31,Default,,0000,0000,0000,,然後增加一個剛體讓它有重力往下掉 Dialogue: 0,0:18:19.31,0:18:24.96,Default,,0000,0000,0000,,箱子增加碰撞體用來探測它的著陸時機\N和玩家撿起的時機 Dialogue: 0,0:18:24.96,0:18:30.51,Default,,0000,0000,0000,,著陸之後\N播放第二段動畫讓降落傘消失 Dialogue: 0,0:18:30.51,0:18:34.92,Default,,0000,0000,0000,,跟遊戲其他地方一樣\N動畫器控制物件的狀態 Dialogue: 0,0:18:34.92,0:18:38.92,Default,,0000,0000,0000,,我們可以看到預設的情況下\N它會播放FloatDown動畫 Dialogue: 0,0:18:38.92,0:18:43.47,Default,,0000,0000,0000,,然後當Land = True時會切換到著陸狀態 Dialogue: 0,0:18:43.97,0:18:49.73,Default,,0000,0000,0000,,在腳本裡,我們使用onTriggerEnter函數\N透過標記來檢測是否碰到地面 Dialogue: 0,0:18:49.73,0:18:55.10,Default,,0000,0000,0000,,我們也將補給箱從父物件中分離\N並給它一個剛體 Dialogue: 0,0:18:55.10,0:19:00.62,Default,,0000,0000,0000,,它就可以和環境互動\N比如降落在一個斜坡上就會斜停在坡上 Dialogue: 0,0:19:00.62,0:19:03.67,Default,,0000,0000,0000,,接下來看看炸彈 Dialogue: 0,0:19:03.67,0:19:08.48,Default,,0000,0000,0000,,撿起炸彈箱的動作是箱子上的\NBombPickup腳本處理的 Dialogue: 0,0:19:08.48,0:19:16.74,Default,,0000,0000,0000,,透過角色身上的LayBombs腳本\N增減主角擁有的炸彈數量 Dialogue: 0,0:19:17.56,0:19:25.56,Default,,0000,0000,0000,,LayBombs腳本負責檢查是否攜帶著炸彈\N並負責產生並放置炸彈 Dialogue: 0,0:19:27.42,0:19:36.15,Default,,0000,0000,0000,,炸彈設有定時裝置,在爆炸之前\N透過BombDetonation裡的yield倒數計時 Dialogue: 0,0:19:36.80,0:19:39.54,Default,,0000,0000,0000,,爆炸函式執行幾個動作 Dialogue: 0,0:19:39.54,0:19:43.80,Default,,0000,0000,0000,,它會重置bombLaid參數\N允許產生另外一個炸彈箱 Dialogue: 0,0:19:43.80,0:19:49.80,Default,,0000,0000,0000,,它會通知產生器補充新的炸彈箱\N並炸死範圍內的敵人 Dialogue: 0,0:19:50.52,0:19:53.06,Default,,0000,0000,0000,,來看看最後一部分怎麼運作的 Dialogue: 0,0:19:53.06,0:19:57.18,Default,,0000,0000,0000,,因為炸彈對敵人來說是致命的\N不管他們的生命值剩下多少 Dialogue: 0,0:19:57.18,0:20:03.47,Default,,0000,0000,0000,,我們用Physics.OverlapCircleAll方法收集\N在爆炸範圍內所有標記為敵人的對象 Dialogue: 0,0:20:03.47,0:20:06.61,Default,,0000,0000,0000,,然後為每一個敵人執行迴圈 Dialogue: 0,0:20:06.61,0:20:15.54,Default,,0000,0000,0000,,設定他們的血量為0\N從爆炸地點到敵人算出一個向量並施加外力 Dialogue: 0,0:20:16.30,0:20:21.38,Default,,0000,0000,0000,,一旦迴圈跑完,就可以播放視覺效果 Dialogue: 0,0:20:21.38,0:20:25.91,Default,,0000,0000,0000,,播放一段音效同時摧毀炸彈 Dialogue: 0,0:20:26.88,0:20:29.25,Default,,0000,0000,0000,,爆炸視覺效果有兩部分 Dialogue: 0,0:20:29.25,0:20:33.58,Default,,0000,0000,0000,,主要部份是一個簡單的圓形\N短暫的出現後摧毀 Dialogue: 0,0:20:33.58,0:20:39.58,Default,,0000,0000,0000,,第二部分是星星狀的粒子系統\N重複用相同圖片呈現火箭爆炸 Dialogue: 0,0:20:42.26,0:20:51.74,Default,,0000,0000,0000,,效率上我們保持粒子系統持續在場景中\N需要時我們用程式移動到指定位置播放 Dialogue: 0,0:20:52.51,0:20:56.51,Default,,0000,0000,0000,,這樣可以讓粒子系統存在記憶體裡\N使遊戲比較有效率 Dialogue: 0,0:20:57.01,0:21:04.67,Default,,0000,0000,0000,,這麼做主要是因為這個範例\N同時只會有一個爆炸在場景中 Dialogue: 0,0:21:04.67,0:21:07.79,Default,,0000,0000,0000,,因為玩家只能一次丟一個炸彈 Dialogue: 0,0:21:07.79,0:21:14.94,Default,,0000,0000,0000,,這就是為什麼將粒子系統保持在場景中\N並重複播放的原因,比起建立後移除有效率 Dialogue: 0,0:21:15.71,0:21:21.62,Default,,0000,0000,0000,,但如果是火箭爆炸,因為可以重複發射\N因此需要建立後移除 Dialogue: 0,0:21:22.12,0:21:26.12,Default,,0000,0000,0000,,讓我們看看主角殺死敵人\N怎麼計算分數 Dialogue: 0,0:21:26.62,0:21:35.53,Default,,0000,0000,0000,,這分為兩個部分,動畫顯示獲得100分\N以及增加UI的分數計算 Dialogue: 0,0:21:35.53,0:21:40.19,Default,,0000,0000,0000,,分數動畫由1和0兩個數字組成 Dialogue: 0,0:21:40.19,0:21:42.87,Default,,0000,0000,0000,,將它們放到場景中的空白物件 Dialogue: 0,0:21:42.87,0:21:49.19,Default,,0000,0000,0000,,給予一個簡單的得分動畫\N並用程式讓它們在動畫完成後消失 Dialogue: 0,0:21:49.19,0:21:55.19,Default,,0000,0000,0000,,我們放置摧毀腳本在動畫事件尾端 Dialogue: 0,0:22:06.14,0:22:13.70,Default,,0000,0000,0000,,ScoreUI單純是個GUI文字元件\N帶有管理玩家分數的腳本 Dialogue: 0,0:22:13.70,0:22:20.98,Default,,0000,0000,0000,,Score是全域變數,代表隨時可以\N檢查當敵人被殺死時增加100分 Dialogue: 0,0:22:20.98,0:22:24.98,Default,,0000,0000,0000,,說到敵人,讓我們仔細看看他們 Dialogue: 0,0:22:25.48,0:22:28.26,Default,,0000,0000,0000,,在我們的遊戲裡,有兩種類型外星敵人 Dialogue: 0,0:22:28.26,0:22:30.85,Default,,0000,0000,0000,,一種是綠皮膚的鼻涕蟲 Dialogue: 0,0:22:30.85,0:22:34.56,Default,,0000,0000,0000,,另一種是會搭著飛船保護自己\N的智慧型外星怪物 Dialogue: 0,0:22:34.56,0:22:36.56,Default,,0000,0000,0000,,這些角色會共用一種腳本 Dialogue: 0,0:22:36.56,0:22:38.56,Default,,0000,0000,0000,,因為他們行為相似 Dialogue: 0,0:22:38.56,0:22:45.76,Default,,0000,0000,0000,,我們可以檢視它們的全域變數\N並設定不同的移動速度和生命 Dialogue: 0,0:22:46.64,0:22:49.09,Default,,0000,0000,0000,,每個敵人都有自己的移動動畫 Dialogue: 0,0:22:49.09,0:22:54.44,Default,,0000,0000,0000,,鼻涕蟲有一個可以活動的尾巴\N飛船內的敵人會前後搖擺移動 Dialogue: 0,0:22:55.99,0:23:01.99,Default,,0000,0000,0000,,對鼻涕蟲來說,我們匯入圖形\N並把尾巴切為獨立圖形 Dialogue: 0,0:23:01.99,0:23:07.48,Default,,0000,0000,0000,,這樣我們就可以單獨縮放它\N不會影響到整個圖片 Dialogue: 0,0:23:07.48,0:23:14.12,Default,,0000,0000,0000,,軸心設定到右邊\N我們可以漂亮的伸展收縮尾巴 Dialogue: 0,0:23:16.48,0:23:19.92,Default,,0000,0000,0000,,上下移動眼瞼 Dialogue: 0,0:23:19.92,0:23:24.86,Default,,0000,0000,0000,,然後使用Z軸來排序\N眼睛就會在眼瞼底下了 Dialogue: 0,0:23:24.86,0:23:26.86,Default,,0000,0000,0000,,就可以製作眨眼動畫 Dialogue: 0,0:23:28.86,0:23:34.05,Default,,0000,0000,0000,,第二個外星人的動畫要簡單的多\N我們只需要前後轉動它 Dialogue: 0,0:23:35.80,0:23:41.23,Default,,0000,0000,0000,,關於這些敵人的移動技術\N我們透過改變剛體的速率來移動它們 Dialogue: 0,0:23:41.23,0:23:47.83,Default,,0000,0000,0000,,當它們遇到一個牆壁這樣的障礙物時\N會呼叫Physics.OverlapPoint函式來檢測 Dialogue: 0,0:23:47.83,0:23:55.85,Default,,0000,0000,0000,,檢查是否有重疊到像是\N牆壁和兩邊的塔被標記的障礙物 Dialogue: 0,0:23:55.85,0:23:59.16,Default,,0000,0000,0000,,當函式偵測到時,就會呼叫Flip函式 Dialogue: 0,0:23:59.16,0:24:04.07,Default,,0000,0000,0000,,函式會翻轉敵人的X軸縮放\N讓它轉到不同方向 Dialogue: 0,0:24:04.07,0:24:11.04,Default,,0000,0000,0000,,要殺死敵人,當敵人和火箭相撞時\N在撞擊時會呼叫Hurt函式 Dialogue: 0,0:24:14.96,0:24:19.21,Default,,0000,0000,0000,,這個函式我們從敵人身上扣1點血 Dialogue: 0,0:24:19.21,0:24:23.21,Default,,0000,0000,0000,,並持續呼叫函式保持敵人持續扣血 Dialogue: 0,0:24:23.21,0:24:27.12,Default,,0000,0000,0000,,如果血條降到0,就會呼叫死亡函式 Dialogue: 0,0:24:31.23,0:24:33.92,Default,,0000,0000,0000,,當他們死後,就會執行一些函式 Dialogue: 0,0:24:33.92,0:24:39.92,Default,,0000,0000,0000,,會先停用所有的圖形渲染\N因為2D角色大多都有動畫 Dialogue: 0,0:24:40.94,0:24:46.94,Default,,0000,0000,0000,,這是為了把動畫物件換成單張死亡圖片 Dialogue: 0,0:24:47.74,0:24:54.16,Default,,0000,0000,0000,,我們在圖形渲染器將圖片改為deadEnemy Dialogue: 0,0:24:54.16,0:24:58.16,Default,,0000,0000,0000,,然後我們幫Score全域變數增加100 Dialogue: 0,0:24:58.16,0:25:03.53,Default,,0000,0000,0000,,然後增加扭轉讓他們死亡時扭曲 Dialogue: 0,0:25:04.45,0:25:08.88,Default,,0000,0000,0000,,因此我們要讓這些敵人死後\N掉入環境的河中 Dialogue: 0,0:25:08.88,0:25:13.59,Default,,0000,0000,0000,,我們找到物件上所有碰撞體\N並設定IsTrigger = True Dialogue: 0,0:25:13.59,0:25:17.42,Default,,0000,0000,0000,,這樣他們就會穿過所有環境往下掉 Dialogue: 0,0:25:17.42,0:25:25.47,Default,,0000,0000,0000,,然後播放死亡音效之後展示一個分數動畫 Dialogue: 0,0:25:27.88,0:25:29.88,Default,,0000,0000,0000,,要將已死亡的敵人從場景中移除 Dialogue: 0,0:25:29.88,0:25:31.88,Default,,0000,0000,0000,,我們使用killTregger物件 Dialogue: 0,0:25:31.88,0:25:34.76,Default,,0000,0000,0000,,和前面所說的一樣 Dialogue: 0,0:25:34.76,0:25:36.76,Default,,0000,0000,0000,,當任何角色接觸它時 Dialogue: 0,0:25:36.76,0:25:39.95,Default,,0000,0000,0000,,將會引起一個水花動畫,並移除該物件 Dialogue: 0,0:25:39.95,0:25:45.95,Default,,0000,0000,0000,,它們撞擊水面並播放\N一段附在水花動畫的音效 Dialogue: 0,0:25:45.95,0:25:50.63,Default,,0000,0000,0000,,所以當我們產生水花動畫時\N同時也聽到音效 Dialogue: 0,0:25:55.15,0:25:59.15,Default,,0000,0000,0000,,要完成遊戲關卡\N我們也用一些移動背景來裝飾 Dialogue: 0,0:25:59.15,0:26:02.30,Default,,0000,0000,0000,,為了讓遊戲環境更顯動態 Dialogue: 0,0:26:02.30,0:26:07.12,Default,,0000,0000,0000,,我們添加了一些飛翔的天鵝\N以及沿著河岸開的公車和計程車 Dialogue: 0,0:26:07.12,0:26:16.05,Default,,0000,0000,0000,,首先是天鵝,它是在Photoshop裡面畫好後\N用Multiple Sprite導入圖片 Dialogue: 0,0:26:16.05,0:26:20.80,Default,,0000,0000,0000,,Unity會自動裁切天鵝的每個圖片 Dialogue: 0,0:26:20.80,0:26:24.58,Default,,0000,0000,0000,,分為不同的圖導入\N並把原圖當作父物件放在底下 Dialogue: 0,0:26:24.58,0:26:32.35,Default,,0000,0000,0000,,因為這是個動畫組合,可以將所有的圖片\N一起拖到場景中,讓Unity幫我們生成動畫 Dialogue: 0,0:26:32.35,0:26:37.76,Default,,0000,0000,0000,,瞧,天鵝的動畫已經準備好了 Dialogue: 0,0:26:37.76,0:26:43.37,Default,,0000,0000,0000,,然後給天鵝一個剛體\N讓我們可以控制速度飛過螢幕 Dialogue: 0,0:26:43.37,0:26:47.33,Default,,0000,0000,0000,,和公車和計程車一樣,天鵝已被存為預製物件 Dialogue: 0,0:26:49.26,0:26:55.26,Default,,0000,0000,0000,,公車和計程車作法只需要\N在匯入圖形時分開車身和車輪 Dialogue: 0,0:26:55.26,0:26:58.39,Default,,0000,0000,0000,,並製作一個簡單的擺動動畫 Dialogue: 0,0:26:58.39,0:27:04.38,Default,,0000,0000,0000,,相同指定2D剛體到車子上\N就能夠驅動他們在螢幕上跑 Dialogue: 0,0:27:07.28,0:27:14.27,Default,,0000,0000,0000,,公車、計程車和天鵝這三個物件\N我們用一個重複執行的腳本來製造它們 Dialogue: 0,0:27:14.27,0:27:21.84,Default,,0000,0000,0000,,BackgroundPropsSpawner腳本\N同時也處理出生位置,出生頻率並給予速度 Dialogue: 0,0:27:21.84,0:27:30.52,Default,,0000,0000,0000,,代表我們可以用這個腳本應用在三種對象\N預設出生點和屬性 Dialogue: 0,0:27:30.52,0:27:33.85,Default,,0000,0000,0000,,要了解更多的細節,可以查看腳本中的說明 Dialogue: 0,0:27:33.85,0:27:40.41,Default,,0000,0000,0000,,最後,要了解更多的背景動態\N我們使用了移動的雲朵、流動的河水和煙霧 Dialogue: 0,0:27:41.32,0:27:50.00,Default,,0000,0000,0000,,我們在空白物件下放兩個背景圖片\N並使這些圖片緩慢飛過螢幕 Dialogue: 0,0:27:50.00,0:27:54.65,Default,,0000,0000,0000,,因為這是個無限循環\N所以動畫永遠不會停 Dialogue: 0,0:27:59.18,0:28:01.03,Default,,0000,0000,0000,,這就是我們遊戲的製作過程 Dialogue: 0,0:28:01.03,0:28:05.52,Default,,0000,0000,0000,,我們希望這個教學讓你\N對如何用Unity開發2D遊戲有一定了解 Dialogue: 0,0:28:05.52,0:28:08.97,Default,,0000,0000,0000,,未來我們也會製作更簡單的教學 Dialogue: 0,0:28:08.97,0:28:14.96,Default,,0000,0000,0000,,也期待你們對於Unity4.3的反應\N迫不及待想看看你們的2D產品 Dialogue: 0,0:28:14.96,0:28:16.49,Default,,0000,0000,0000,,謝謝觀看