iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
Software Development

Unity進階——做一個完整的遊戲系列 第 9

Day 9:建立玩家角色 Prefab 與基礎動畫

  • 分享至 

  • xImage
  •  

前一天我已經完成主村莊第一版雛形,VillageScene 中已經有基本的草地、道路、建築與村莊裝飾。場景有了之後,接下來就需要讓玩家角色正式出現在遊戲中。因此 Day 9 的目標,是建立玩家角色 Prefab,並完成最基本的待機與走路動畫。

這一天先不撰寫玩家移動程式,因為在開始寫控制之前,需要先把角色素材、動畫和 Animator Controller 整理好。這樣 Day 10 撰寫移動系統時,就可以直接使用已經完成的 Player Prefab,而不是邊寫程式邊回頭整理素材。

https://ithelp.ithome.com.tw/upload/images/20260907/201783733EOkbv7Had.png

玩家角色素材使用的是 Day 5 匯入的 Anokolisa 角色素材,位置在 Assets/ImportedAssets/Anokolisa_TopdownRPG/Characters。目前可用的基本動畫包括 Idle_Base、Walk_Base 和 Run_Base。Day 9 先處理 Idle 和 Walk,Run 先保留到後續需要時再使用。

一開始我先檢查角色圖片的匯入設定。由於角色是像素風素材,所以設定上要保持清晰,避免 Unity 預設的過濾與壓縮讓圖片變模糊。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373yJA7Bbk83p.png

角色圖片的設定和前面地圖素材類似,貼圖類型設定為 Sprite (2D and UI),Sprite Mode 設定為 Multiple,Pixels Per Unit 設定為 16,Filter Mode 設定為 Point,Compression 設定為 None。另外,角色圖目前還不需要 Unity 自動產生物理形狀,所以也取消了 Generate Physics Shape。

不過角色素材和前幾天地圖 Tile 不一樣。地圖素材是 16×16 的小格,但玩家角色每一格動畫是 64×64。因此在 Sprite Editor 中不能用 16×16 切,而是要用 64×64 切片。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373roKH81Agbn.png

我先處理 Idle_Down-Sheet.png。這張圖片尺寸是 256×64,因此用 64×64 切片後,會得到 4 張待機動畫影格。切片方式使用 Grid By Cell Size,Pixel Size 設定為 X 64、Y 64,Offset 和 Padding 都設定為 0。切完後按下 Apply,讓 Unity 將切片結果寫入素材設定。

完成 Idle Down 後,我也用相同方式處理 Idle_Side-Sheet.png 和 Idle_Up-Sheet.png。這些素材都切成 4 張 Sprite,之後可以用來建立不同方向的待機動畫。

接著處理 Walk 動畫。Walk 動畫每張圖是 384×64,所以用 64×64 切片後,每個方向會得到 6 張 Sprite。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373o4gamrqh21.png

我依序處理 Walk_Down-Sheet.png、Walk_Side-Sheet.png 和 Walk_Up-Sheet.png,每張都使用相同的 64×64 Grid 切片。完成後,玩家素材就已經具備建立基本待機與走路動畫的條件。

素材切好後,下一步是在場景中建立玩家物件。我在 VillageScene 的 Hierarchy 中建立一個空物件,命名為 Player,並加上 Sprite Renderer 元件。接著將 Idle_Down-Sheet_0 指定給 Sprite Renderer,讓玩家先顯示待機向下的第一格圖像。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373NSjwDJqaE6.png

建立 Player 物件時,我將角色放在村莊下方入口附近,也就是之後玩家從教學區回到村莊時比較合理的位置。Sprite Renderer 的 Order in Layer 設定為 20,確保玩家會顯示在地圖、道路與大多數場景物件上方。
接著我整理專案資料夾,專門建立玩家相關資源的存放位置。這樣之後動畫、Prefab 和控制腳本都能集中管理,不會散落在專案各處。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373Weii2WbyYO.png

我建立了 Assets/Game/Player/Animations 和 Assets/Game/Player/Prefabs 兩個資料夾。Animations 用來放玩家動畫片段與 Animator Controller,Prefabs 用來放最後建立好的 Player Prefab。這種分類雖然看起來只是整理資料夾,但對後續維護很重要,尤其是專案逐漸變大之後。

接著開始建立第一個動畫片段:Player_Idle_Down.anim。我選取 Hierarchy 中的 Player,打開 Animation 視窗,建立新的 Animation Clip,並將它存到 Assets/Game/Player/Animations。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373OGDXale1W3.png

建立動畫後,我把 Idle_Down-Sheet_0 到 Idle_Down-Sheet_3 四張 Sprite 依序放進 Animation 時間軸,並將 Samples 設定為 6。這樣角色待機時會有輕微的動畫效果,不會完全靜止,也不會播放得太快。

建立第一個動畫時,Unity 也自動幫 Player 加上了 Animator 元件,並產生 Animator Controller。為了避免和 Hierarchy 裡的 Player 物件混淆,我將 Animator Controller 改名為 PlayerAnimator.controller。

https://ithelp.ithome.com.tw/upload/images/20260907/201783739ExxPrY5IF.png

這一步完成後,Player 物件已經有 Sprite Renderer 和 Animator,Animator 的 Controller 也正確指向 PlayerAnimator.controller。這代表玩家物件已經不只是靜態圖片,而是可以由 Animator 控制播放動畫。
接著,我將 Hierarchy 中的 Player 拖到 Assets/Game/Player/Prefabs 資料夾中,建立 Player.prefab。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373wNtPPDTHUP.png

建立 Prefab 的好處是,之後不管是在村莊、新手教學區,還是其他地牢場景,都可以直接使用同一個玩家物件。如果未來需要修改玩家的 Sprite Renderer、Animator、碰撞或腳本,也可以集中修改 Prefab,而不用每個場景都手動調整一次。

完成 Idle 動畫與 Prefab 後,我又建立了第一個走路動畫 Player_Walk_Down.anim。這一步是為 Day 10 的玩家移動系統做準備,讓角色之後不只會站著,也能在移動時切換成走路動畫。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373EeEVe74AuC.png

我將 Walk_Down-Sheet_0 到 Walk_Down-Sheet_5 六張 Sprite 放進 Animation 時間軸,並將 Samples 設定為 8。走路動畫比待機動畫影格更多,因此播放起來會比較有動作感。Day 9 先只建立向下走路動畫,其他方向之後再依移動系統需求補上。

接著我打開 Animator 視窗,確認 PlayerAnimator.controller 中已經有 Player_Idle_Down 和 Player_Walk_Down 兩個狀態。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373Q6P3wD2ddU.png

目前 Player_Idle_Down 是橘色狀態,代表它是 Animator 的 Default State。也就是說,遊戲開始時玩家會先播放待機動畫。Player_Walk_Down 也已經存在於 Animator 中,但目前還沒有設定 Transition。這是刻意保留的,因為動畫切換條件應該等 Day 10 寫玩家移動控制時再一起處理。

最後,我檢查了 Player Prefab 是否有尚未套用的 Overrides。確認結果顯示沒有未套用的覆蓋項目,代表 Hierarchy 中的 Player 和 Prefab 內容一致。

https://ithelp.ithome.com.tw/upload/images/20260907/20178373Xd8zUZ1Z41.png

完成這一步後,Day 9 的目標就完成了。這一天我沒有急著撰寫移動程式,而是先完成玩家角色的素材切片、Player 物件、Idle 動畫、Walk 動畫、Animator Controller 和 Player Prefab。

透過 Day 9 的整理,玩家角色已經具備進入遊戲場景的基本條件。下一步 Day 10 就可以開始撰寫玩家移動控制,讓目前建立好的 Player Prefab 可以在 VillageScene 中上下左右移動,並開始和動畫狀態結合。


上一篇
Day 8:把測試地圖整理成第一版主村莊
下一篇
Day 10:讓玩家角色在村莊中移動
系列文
Unity進階——做一個完整的遊戲12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言