---
# System prepended metadata

title: Unity線上共學營延伸遊戲創作

---

# Unity線上共學營延伸遊戲創作
## 目錄
[TOC]
## Unity線上共學營
某天，朋友突然邀請我一起來參加他在網路上看到的這個共學活動，因為有用過SFML做小遊戲，所以也想摸摸看Unity，不過一直不知從何下手，既然有這麼好的機會，我就和朋友一起參加這個線上共學活動。

在兩週12小時的課程中，來自暨南國際大學的廖講師透過Unity的免費資源，一步一步教大家如何控制遊戲物件、人物動畫、畫面以及各個搭配的程式碼。Unity最讓我驚艷的就是他的API內容超多，可以很快速方便的對遊戲進行控制，而且Visual Studio對於Unity開發環境也有專屬套件，在打code的時候可以很快速的參照Unity含式庫，Debug時也會明確指出問題是什麼，可以讓開發變得容易許多。

![](https://i.imgur.com/Vokt9dk.png)

## 創作遊戲動機
很可惜的是12個小時很很快，講師只能夠讓我們了解Unity主要的一些操作和常用的系統寫法，沒辦法真的完成一個遊戲，既然都學了Unity，不實際創作個遊戲出來怎麼說的過去，因此我便著手做了一個簡單的2D手機遊戲。
## 預計遊戲玩法
* 玩家需要蒐集10顆鑽石並且打開寶箱即可通關
* 玩家若掉落平台即死亡
* 玩家若被後方紅線追上即死亡
## 架構
這次的遊戲架構主要可分成**遊戲物件**和**程式碼**的搭配。
***遊戲物件樹***
![](https://cdn.discordapp.com/attachments/884045112815013908/964041912426328094/80a9272c0ce76cb9.jpg)
### 遊戲物件
本次的遊戲物件主要有以下:
![](https://i.imgur.com/ax3RoYN.png)
#### GM(Game Master)
管理角色死亡
#### Camera
玩家所看到的遊戲畫面
#### Grid
遊戲場景
#### MobileSingleStickControl
遊戲的操縱搖桿
#### Canvas
遊戲HUD和Ui介面
#### Player
玩家角色
#### Boundary
玩家掉落時的死亡邊界
#### DeathWall
後方追逐玩家的紅線
#### Audio/BackGroundMusic
遊戲音樂/音效

### 程式碼
![](https://i.imgur.com/eKoJe1f.png)
#### GameMaster
角色死亡
#### CameraFollow
讓鏡頭跟隨玩家移動
#### Chest/Diamond/Boundery/DeathWall
控制玩家與物件的接觸事件
#### UIManager
依照不同事件控制畫面UI
#### MainMenu
控制Menu的操作
#### Player
控制所有與player相關的事件(移動、跳躍、獲取鑽石)
#### PlayerAnimation
控制不同動作所對應的玩家動畫
#### Audio
控制不同事件所發出的音效
### 主要系統運行架構
#### 玩家接觸鑽石/邊界/紅線
![](https://i.imgur.com/pLnuKxR.png)

**1.玩家接觸物件**
玩家若接觸到物件

**2.事件對應音效**
播放物件對應事件音效

**3.事件是否需要UIManager**
事件如Bundary和DeathWall需切換到死亡介面需要使用UIManager.cs切換
#### 玩家移動
![](https://cdn.discordapp.com/attachments/884045112815013908/964062974497132594/PlayerMove_1.jpg)

**1.**
玩家操縱手機
#### 1-1-1
玩家按下跳躍按鈕
#### 1-1-2
玩家若位於地面&不須等待跳躍重製則播放跳躍動畫並移動
#### 1-2
玩家搖桿向右或向左(動畫皆一樣)並且播放跑步動畫並移動。
**2.**
玩家移動時鏡頭跟著移動。



## 部分遊戲展示
![](https://cdn.discordapp.com/attachments/884045112815013908/964034910908219462/Screenshot_20220414-132847_mobilegame.jpg)

![](https://cdn.discordapp.com/attachments/884045112815013908/964034911210184725/Screenshot_20220414-132903_mobilegame.jpg)

![](https://cdn.discordapp.com/attachments/884045112815013908/964034911474442240/Screenshot_20220414-133010_mobilegame.jpg)

![](https://media.discordapp.net/attachments/884045112815013908/964100889059155969/Screenshot_20220414-175235_mobilegame.jpg?width=1439&height=648)
## 遭遇困難&解決辦法
### Unity自訂插件的程式語言為C#
這是我第一次接觸C#語法，雖然因為之前我大多是使用c++，有些概念還是可以相通，不過有些語法就變成第一次看見，要特別去查才能理解意思，像是:IEnumerable、Static的概念就讓我困惑蠻久的，我也因此多花了點時間去學習C#語法。

### 忘記保存
有一次我因為Code沒寫好導致測試遊玩時物件不停出現，最後Unity崩潰只好重開電腦，結果重開Unity才發現沒有保存到，而Unity好像也沒有自動保存，導致我有好大一部份的場景和物件需要重新製作，不過也因為這次經驗而讓我養成隨手保存的習慣。

### 地面Collider不明突出
當時從免費資源引入的前景地板不知為何有不明突起(如上圖)，因此我想到能透過Unity的Tile功能把地板給重新設計一遍(如下圖)，成功解決了碰撞格不明突起的問題。
![](https://cdn.discordapp.com/attachments/884045112815013908/964072149193207839/unknown.png)

![](https://i.imgur.com/KtsPf9L.png)

### 摔落死亡的判斷
一開始在設計摔落死亡判斷時，原本想設計成y軸小於某個位置就死亡，但是地圖有高低起伏，沒辦法實行，最後設計了兩條透面的線在不同的可能摔落死亡的區域，只要碰到就會觸發死亡。
### 對Unity API的不熟悉
由於Unity API的東西實在是太多了，多到沒辦法一下子就全部完全理解，也因為含式超多，因此一個問題的解法可以有很多種，不過在初學的狀況下可能任何一種都想不到，只好遇到問題就上網查詢，看看網路上的大家都是怎麼去解決同樣問題，並且同時學習各種用法，未來再遇到才能快速解決。

## 未來展望

### 製作新的關卡或隨機生成鑽石
目前遊戲的鑽石都是用手動擺上去的，若能夠讓遊戲在開始時隨機生成鑽石位置，為遊戲增添一些隨機性，玩起來不會那麼乏味，或是增加新的關卡，讓玩家能挑戰更難的關卡。
### 可以加入更多障礙物或效果
現在遊戲除了摔出邊界死亡和太慢被紅線追到死亡就沒有特別的要素了，如果能增加像加速磚塊、跳躍提申、鑰匙門、尖刺陷阱.......各種效果和機關，遊戲的多樣性就能更多，玩家不會感到乏味。
## 心得
製作遊戲一直是我很有興趣也很想挑戰看看的事情，這次趁這個機會接觸Unity也開啟了我未來更深入遊戲製作領域的想法，能夠做出讓玩家們開心甚至是覺得很有挑戰獨特的遊戲也是我的一大夢想，這次的創作我非常樂在其中，只要想到做出的成品能實際動起來能夠遊玩就很開心，我想帶著這樣的心情製作遊戲，讓更多人也能享受我所製作的遊戲。

## 參考資料

[Unity - Scripting API](https://docs.unity3d.com/ScriptReference/index.html)
[How to make a 2D Platformer-Youtube Playlist](https://www.youtube.com/playlist?list=PLPV2KyIb3jR42oVBU6K2DIL6Y22Ry9J1c)
[Unity Official Tutorials - 2D Roguelike Project-Youtube Playlist](https://www.youtube.com/playlist?list=PLX2vGYjWbI0SKsNH5Rkpxvxr1dPE0Lw8F)
[Unity - Audio 音效播放控制](https://www.cg.com.tw/UnityCSharp/Content/Audio.php)
## 附件
Code
Game

