:::info <font color="#449df9">**第四次社課**</font> ::: ***這次社課一樣繼續探索遊戲的世界,一起享受吧*** 上課前請先幫我登入學校的google帳號,並打開classroom,還沒加入的,幫我加入==egxnieml==,這個課程,方便大家存檔使用! >[TOC] ## 開啟上次的存檔 打開上次的作業區,將檔案下載下來,之後會有一個壓縮檔,按右鍵解壓縮,之後開啟Unity,在原本新增檔案(藍色那裡),按左邊灰色的==新增==,並選第一個,==從硬碟新增專案==,並選取剛剛下載下來的檔案,新增完後點擊專案並等待。 :::warning 等待的時候可以預覽下面的內容或複習之前的講義 ::: ## 學習資源介紹 如果對遊戲開發想了解更多,我推薦一些資源。 我是透過網路自學的,我看的第一個影片是一個小朋友下樓梯的遊戲 https://www.youtube.com/watch?v=nPW6tKeapsM&t=267s 它有蠻詳細的介紹。但如果想學會一些更進階的,可以試試==阿空的遊戲部屋== https://www.youtube.com/@RemptyGame 像是技能釋放,追蹤彈,跟隨鏡頭等,都很讚。 --- ## 成果展示 {%youtube G0I2hmbpXGE %} ## 概念分析 :::info 忘記的可以再看一次! ::: 好那我們來分析一下: 1.我們一開始在首頁(Home),這時候有兩個選擇,==Choose==跟==Start==,這是第一個場景(Home)。 2.當我點擊==Choose==時,跳到選擇關卡的場景(Choose),可以選擇跳到某一關,而右上有一個Home鍵,點擊後一樣會回到首頁。 3.當我點擊==Start==時,便到第一關(Level-1),可以看到上面有顯示Level-1的字樣(Text)以及右邊有一個過關的門(gate),接著用到之前教的==WASD的移動==,但我們在左右動的時候,角色面朝的方向也要有所變化(render.flipX),接著影片中人物向前移動,突然地板消失一部分,這有兩種做法: 一、利用==距離==,分別讀取玩家以及地板的位置,當兩者距離為程式所規定的範圍以內,便將那塊地板刪除(Destroy)(影片為此種方式,好處:即使玩家用跳的或是如何,這樣距離在那個範圍便會觸動) 二、放一個小方塊(藏在地板,但凸出一點點),當玩家踩到便會觸發機制,導致地板消失(類似地雷)(壞處:需要玩家接觸到,否則不觸發) 此時我們過了這個地板後,發現會有一個紅色的三角形(Sting),突然冒出,並急衝而來,若玩家碰到則遊戲結束(Time.timeScale=0f),而這個是因為一開始就將它隱藏,等玩家的位置在所規定的位置時,將物體顯示,並像玩家移動一樣,重複執行,有速度,然後限定終點而停下,跳過後碰到門後,便到下一關(Level-2) :::success 這次社課,目標將場境的切換以及其他功能介紹。 ::: ## 開始製作(場景切換) 先在下方的資料夾中,找==Scenes==,點開後一開始是SimpleScenes,這時候右鍵==Rename==該為```level-1```,並在旁邊,一樣按右鍵新增一個==Scenes==,命名為```Home```,點兩下Home,並切換場景,他會是一個全新的空白場景,那我們先在左欄新增一個==Button==,所以按右鍵,找到下方的```UI```,然後點最下方的```legacy```,再選```Button```,之後新增一個程式腳本,名為```choose```並複製以下程式碼。 ```using UnityEngine using UnityEngine; using UnityEngine.SceneManagement; public class Choose : MonoBehaviour { public string SceneName; public string PointNumber; public void Home() { SceneManager.LoadScene("home"); } public void Replay() { SceneName = "level-" + PointNumber; SceneManager.LoadScene(SceneName); } public void Level1() { SceneManager.LoadScene("level-1"); } } ``` :::info 可以直接**複製** ::: 儲存完後點擊左上方的```File```->```Build Profiles```,之後可以看到畫面中有一個==Scene List==,他是全部場景的清單,所以這時候,你要將剛剛新增的==Home==場景新增上去(打勾) 這時候在Home的場景新增一個空物件```Create Empty```,並命名為==Choose==,將剛剛那段程式拉上去,再到按鈕那裡,有兩個物件,一個是==Text==,是在按鈕式顯示字,可改可不改,另一個是按鈕主體,滑到最下方,先按```加號```->```將剛剛的物件拉到那個格子```,在點擊右邊那格,選```Choose```->```Level1```,這樣設定就完成了。  :::success 執行並點擊畫面中的按鈕,看看有沒有成功切換成level-1 ::: --- ## 開始製作(Replay) 先到==level-1==的場景,然後一樣新增一個空物件(Create Emphy),並將==choose==的程式,重複跟上一不一樣的設定,但這次要選擇==Replay==,再來,因為這是第一關,所以將==point number==設為==1==,之後新增一個按鈕並重複上次的設定 :::success 測試看看,點擊按鈕後,物件(player)會回到原點,重新開始。 ::: --- ## 開始製作(第二關) 那我們要做第二關,首先我們複製第一關的場景,並重新命名為```level-2```,先停留在level-1,先新增一個方形,並命名為```gate```,顏色可以改一下,做個區別,新增標籤(tag),命名為```gate```,並套用在這個物件上,然後一樣新增```Box Collider2D```,但注意的是這裡要勾==Is Trigger==,這是一個能讓物體變成可以穿透的狀態,同時我也可以用碰撞偵測,所以我們先新增一個新的程式腳本,並命名為==gate==,之後複製以下的程式: ```using UnityEngine; using UnityEngine; using UnityEngine.SceneManagement; public class gate : MonoBehaviour { public string SceneName; public string PointNumber; void Start() { this.transform.tag ="gate"; } public void chageScene() { SceneName = "level" + "-" + PointNumber; SceneManager.LoadScene(SceneName); } } ``` 儲存後,回到==player==的程式,新增以下程式: ```using UnityEngine; void OnTriggerEnter2D(Collider2D other) { if (other.gameObject.tag == "gate") { other.gameObject.transform.GetComponent<gate>().chageScene(); } } ``` :::success 測試看看,點擊按鈕後,物件(player)碰到gate,會跳到下一關。 ::: --- ## 開始製作(上升樓梯) 首先先到level-2的場景,然後新增一個正方形(square),命名為```upfloor```,並將標籤改成```floor```,新增```Box Colider2D```,接著創建一個腳本,命名為```upfloor```,然後複製以下程式: ```using UnityEngine; using UnityEngine; public class upfloor : MonoBehaviour { public Transform myTransform; public Transform playerTransform; [SerializeField] GameObject Floor; [SerializeField] GameObject playerPerfab; [SerializeField] GameObject Light1; [SerializeField] GameObject Light2; void Start() { myTransform = Floor.transform; Light1.SetActive(false); Light2.SetActive(false); } void Update() { playerTransform = playerPerfab.transform; if (playerTransform) { if (myTransform != null) { if (myTransform.position.x - playerTransform.position.x <= 4f) { Light1.SetActive(true); Light2.SetActive(true); if (myTransform.position.y <= 4.47f) { myTransform.Translate(0, 15f*Time.deltaTime, 0); } } } } } } ``` :::success 測試看看,點擊按鈕後,物件(player)靠近upfloor,他便會升起。 ::: **恭喜大家完成今天的課程🎉🎉🎉** 各位可以對於今天所學到的功能多加練習,如果有任何不懂可以問我(教學長),講義有那裡不足也可以說,盡請期待下次社課😊 **存檔** 接者我們要進行==存檔==,因為電腦教室關機會重置。首先是要退出遊戲(記得存檔),然後在```檔案總管```搜尋當初建檔案的名稱,會找到一個資料夾,點進去,全選裡面的所有檔案,按右鍵,選擇```Assets``` ```Packages``` ```ProjectSettings```,然後```壓縮至...```選```壓縮檔案```,然後可能有等一下,壓縮完存到==classroom==即可! **簽退** 最後別忘記簽退喔! :::spoiler 要完成才能開喔(或是時間到了) :::spoiler 你確定? :::spoiler 不要先偷看喔! 27 CITRC th ::: https://forms.gle/P6XajmpzUwNB4Jj87 **電腦關機前請確認以下幾點:** - [ ] 檔案是否已存在classroom - [ ] 是否填完簽退表單 確認完成後,那我們這次社課就結束囉,期待下次與你的相見!:heart_eyes::heart_eyes::heart_eyes: 掰掰~~ :kissing_heart:
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up