只有一種道具我認為有一點單調,所以構想的時候已經有想第二種道具,就是能隱身的道具,由於跟技能一樣都是有無視死亡碰撞的效果,因此我希望它不要比技能還強,所以設定成碰到道具後直接觸發,持續 5 秒,不像技能需要先收集三根羽毛才能使用。
首先在遊戲中加入玉米道具,並將它設定成 Corn Tag。
當小鳥碰到玉米時,就會呼叫 EatCorn(),同時將場上的玉米刪除。
private void OnTriggerEnter2D(Collider2D collision)
{
if (isDead) return;
// 1. 吃到羽毛或一般道具
if (collision.CompareTag("Feather") || collision.CompareTag("Item"))
{
CollectFeather();
Destroy(collision.gameObject);
}
// 2. 吃到玉米道具
else if (collision.CompareTag("Corn"))
{
EatCorn();
Destroy(collision.gameObject);
}
}
這樣就能讓羽毛和玉米分別執行不同的效果。
這運用到跟左上羽毛蒐集以及技能顯示一樣的功能,吃到玉米後會更換掉鳥的Sprite,達到看起來隱身的效果。
玉米的效果預計持續 5 秒,所以這次增加了cornStealthDuration來控制時間。
[Header("玉米道具設定(隱身 5 秒)")]
[Tooltip("玉米隱身持續時間")]
public float cornStealthDuration = 5f;
[Tooltip("吃到玉米時切換的隱身/特別型態 Sprite")]
public Sprite stealthBirdSprite;
為了讓效果結束後可以恢復原本的圖片,也在遊戲開始時先記錄小鳥原本的Sprite。
private Sprite originalBirdSprite;
void Start()
{
rb = GetComponent<Rigidbody2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
if (spriteRenderer != null)
{
originalBirdSprite = spriteRenderer.sprite;
}
}
這裡用到跟技能一樣的功能,在某一段時間無視遊戲的死亡碰撞。
吃到玉米後會啟動CornStealthRoutine()。
效果開始時,先將isInvincible設定為true,讓小鳥可以無視岩石和地面的死亡碰撞,接著替換成隱身狀態的圖片。
5秒後再恢復原本的圖片與碰撞判定。
public void EatCorn()
{
Debug.Log("吃到玉米!啟動 5 秒隱身與無敵!");
// 若已有舊的隱身效果正在執行,先停止它
if (stealthCoroutine != null)
{
StopCoroutine(stealthCoroutine);
}
stealthCoroutine = StartCoroutine(CornStealthRoutine());
}
IEnumerator CornStealthRoutine()
{
isInvincible = true;
// 更換為隱身圖片
if (spriteRenderer != null && stealthBirdSprite != null)
{
spriteRenderer.sprite = stealthBirdSprite;
}
// 持續 5 秒
yield return new WaitForSeconds(cornStealthDuration);
// 恢復正常狀態
isInvincible = false;
if (spriteRenderer != null && originalBirdSprite != null)
{
spriteRenderer.sprite = originalBirdSprite;
}
stealthCoroutine = null;
Debug.Log("玉米隱身效果結束,恢復原樣。");
}
運用isInvincible是true,跳過死亡判定:
private void OnCollisionEnter2D(Collision2D collision)
{
if (isInvincible) return;
if (collision.gameObject.CompareTag("Rock") ||
collision.gameObject.CompareTag("Ground"))
{
Die();
}
}
因此目前兩種效果都可以使用同一套無敵判定:
今天主要完成了第二種道具「玉米」的功能。
玩家吃到玉米後,小鳥會替換成隱身狀態的圖片,並在 5 秒內無視岩石與地面的死亡碰撞;效果結束後則會恢復原本的小鳥圖片與正常碰撞。
接下來會開始做分數的計算與顯示。