前幾天已經完成道具的生成,今天開始思考要怎麼讓收集到的羽毛真正派上用場。
目前的想法是收集到 3 根羽毛後,可以解鎖使用技能,因此需要先製作一個技能按鈕,讓玩家知道目前技能是否可以使用。
今天主要先處理按鈕本身的操作方式,暫時還不會加入羽毛數量的判定。
我希望技能按鈕可以有兩種狀態:
這次先請 Gemini 協助我製作按鈕的控制程式。
一開始原本想直接利用顏色來區分技能是否解鎖,不過後來想到技能圖案之後會自己繪製,因此改成讓程式直接切換不同的 Sprite。
這樣之後只需要把自己畫好的「未解鎖圖案」和「已解鎖圖案」放進 Unity,就可以根據技能狀態進行切換。
using UnityEngine;
using UnityEngine.UI; // 記得引入 UI 命名空間
public class PlayerControl : MonoBehaviour
{
[Header("飛行設定")]
public float flyForce = 5f;
private Rigidbody2D rb;
[Header("技能按鈕 UI 設定")]
[Tooltip("將 Canvas 上的 SkillButton 拖入此欄位")]
public Button skillButton;
[Tooltip("技能按鈕的 Image 組件(若不拉,程式會自動抓取)")]
public Image skillButtonImage;
[Header("技能圖案(Sprite)設定")]
[Tooltip("拖入你自己畫的:灰色/未解鎖圖案")]
public Sprite skillDisabledSprite;
[Tooltip("拖入你自己畫的:亮色/已解鎖圖案")]
public Sprite skillReadySprite;
[Header("技能狀態")]
[Tooltip("技能是否解鎖(明天會跟道具數量連動,今天先保持 false)")]
public bool isSkillReady = false;
void Start()
{
rb = GetComponent<Rigidbody2D>();
// 如果 Inspector 沒拉 Image,自動抓取按鈕上的 Image
if (skillButton != null && skillButtonImage == null)
{
skillButtonImage = skillButton.GetComponent<Image>();
}
// 初始化技能按鈕圖案(今天預設先設為未解鎖/灰色圖案)
SetSkillReady(isSkillReady);
}
void Update()
{
// 電腦端鍵盤跳躍
if (Input.GetKeyDown(KeyCode.Space))
{
Fly();
}
}
// 1. 普通跳躍按鈕點擊呼叫
public void OnJumpButtonClick()
{
Fly();
}
// 2. 技能按鈕點擊呼叫
public void OnSkillButtonClick()
{
if (isSkillReady)
{
// 已解鎖(亮色圖案):發動衝刺大招
UseSkill();
}
else
{
// 未解鎖(灰色圖案):點擊依然可以起飛/跳躍!
Fly();
}
}
// 執行起飛
public void Fly()
{
if (rb != null)
{
rb.velocity = Vector2.up * flyForce;
}
}
// 執行技能大招
public void UseSkill()
{
Debug.Log("【發動技能】大招衝刺!");
// 技能使用後重置為未解鎖(換回灰色圖案),等待明天跟道具數量連動
SetSkillReady(false);
}
// 【核心切換方法】:直接替換技能按鈕的 Sprite 圖案
public void SetSkillReady(bool ready)
{
isSkillReady = ready;
if (skillButtonImage != null)
{
// ready 為 true 切換成亮色圖,false 切換成灰色圖
if (ready && skillReadySprite != null)
{
skillButtonImage.sprite = skillReadySprite;
}
else if (!ready && skillDisabledSprite != null)
{
skillButtonImage.sprite = skillDisabledSprite;
}
}
}
}
這次主要修改的是技能按鈕的狀態切換。
skillDisabledSprite 和 skillReadySprite 分別代表尚未解鎖與已解鎖的技能圖案,之後只要改變 isSkillReady,就可以讓按鈕切換成對應的圖片。
另外,我希望即使技能還沒有解鎖,玩家點擊這個按鈕時仍然可以控制小鳥飛行,不會因為技能按鈕擋在那裡,誤觸後導致小鳥無法飛起來而墜落。
今天主要是先把技能按鈕的基本架構建立起來。
這次先提出自己想要的操作方式,再請 Gemini 協助修改 C# 程式,讓技能按鈕可以根據狀態切換不同的 Sprite。
目前技能還沒有和羽毛數量連動,這部分預計明天再繼續製作。