iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
自我挑戰組

Unity入門遊戲開發與實作系列 第 24

【Day 24】經典 Flappy Birds 遊戲實作(二)

  • 分享至 

  • xImage
  •  

今天我們首先要來建立每個模型的 Prefab,我們要先在 Material 資料夾裡面右鍵創立一個 Material,點選他之後把 Texture 指定到 Material 上面
https://ithelp.ithome.com.tw/upload/images/20241008/20169301ExBWT3NIi8.png
指定完成之後再把 Material 套用在模型上
https://ithelp.ithome.com.tw/upload/images/20241008/201693018nmmhrkd1a.png
這樣我們就完成了 Prefab 的建置。

建立遊戲場景

我們把遊戲中的物件都拖到場景中並調整他們的位置,包括小鳥、建築和地板
https://ithelp.ithome.com.tw/upload/images/20241008/20169301Gndf7vRVTl.png
接下來我們到 Lighting 面板中選擇我們導入的 Skybox ,我們選擇的是 Midday
https://ithelp.ithome.com.tw/upload/images/20241008/20169301HFmu1XIHqn.png
這樣基本的遊戲場景就建立好囉!

鳥的自然下落

我們首先要先讓鳥會自然下落,所以我們給鳥加上 Rigidbody 組件,並且我們希望鳥在下落時會與地板碰撞,所以我們給鳥和地板分別加上 SphereColliderBoxCollider
https://ithelp.ithome.com.tw/upload/images/20241008/201693016UcoRx0LqW.png

這樣當我們執行遊戲的時候鳥就會自然下落到地面上囉

角色跳躍

我們希望按下空白鍵的時候鳥會自動向上跳,所以我們要建立一個腳本,取名為 Bird.cs

// Bird.cs
using UnityEngine;

public class Bird : MonoBehaviour
{
    [SerializeField] private Rigidbody rb;

    [SerializeField] private float jumpForce;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity = Vector3.up * jumpForce;
        }
    }
}

我們使用 Input 來偵測玩家的輸入,GetKeyDown(KeyCode.Space) 表示當空白鍵被按下時,我們就調整 velocity ,代表角色的速度,而他有 x, y, z 三個方向,Vector3.up 就表示 y 軸的方向。我們這邊宣告變數為 [SerializeField] 而不是 public 的好處是,變數不會被外部存取,但同時又能顯示在 Unity 面板上讓我們來調整數值。
https://ithelp.ithome.com.tw/upload/images/20241008/201693015IzQu7QIkS.png
https://ithelp.ithome.com.tw/upload/images/20241008/20169301820ohqxq5v.png
執行遊戲按下空白鍵之後鳥就能夠原地上下跳囉

角色動畫

接下來我們希望鳥在飛的時候可以播放動畫,所以我們要來創建 Animator Controller ,將這個 Animator Controller 拖拉到 Bird 物件上表示這是 Bird 的動畫控制器,再來依序導入飛行的動畫和墜落的動畫。導入後對這兩個動畫案右鍵點選 Make Transition,建立兩個動畫的連結
https://ithelp.ithome.com.tw/upload/images/20241008/20169301fmhg3mVM1q.png

  • 點選在左邊的 + 建立一個 bool 命名為 isFly ,這是拿來判斷我們現在應該播放飛行動畫還是墜落動畫的布林值
  • 點選連結 Bird_Fly -> Bird_Fall 的箭頭,並增加 isFly 等於 false 的條件
  • 相反的,在 Bird_Fall -> Bird_Fly 的箭頭,增加 isFly 等於 true 的條件
// Bird.cs
using UnityEngine;

public class Bird : MonoBehaviour
{
    [SerializeField] private Rigidbody rb;

    [SerializeField] private float jumpForce;

    [SerializeField] private Animator birdAnimator;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity = Vector3.up * jumpForce;
        }
        if (rb.velocity.y > 0)
        {
            birdAnimator.SetBool("isFly", true);
        }
        else
        {
            birdAnimator.SetBool("isFly", false);
        }
    }
}
  • 我們如果要操控剛剛在 Animator 裡面設置的布林值,我們要先宣告一個 Animator 的變數,命名為 birdAnimator
  • 使用 SetBool 可以改變我們剛剛設置的布林變數數值,以此來調整鳥的動畫播放
    https://ithelp.ithome.com.tw/upload/images/20241008/20169301F3yI38bcAC.png
    這樣我們按下空白鍵的時候鳥就會播放飛行的動畫,當鳥下墜的時候就會播放下墜的動畫囉!
    今天完成了主要角色的飛行動畫,明天我們要來製作地板移動和水管生成的部分!

上一篇
【Day 23】經典 Flappy Birds 遊戲實作(一)
下一篇
【Day 25】經典 Flappy Birds 遊戲實作(三)
系列文
Unity入門遊戲開發與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言