道具第一個功能是玩家碰到(穿過)時,會消滅道具物件。
第二個功能是玩家碰到(穿過)時,就要獲得道具的該效果。
今天就從生成道具開始吧,原先想說請AI協助我畫圖,但Gemini生圖有一點爛,就繼續做程式。
首先製作一個簡單的道具腳本,讓小鳥碰到羽毛時,可以判定玩家取得了道具,並將羽毛從場景中移除。
目前先用 Debug.Log 顯示取得的道具名稱,之後如果要加入收集數量,就可以再從這裡繼續修改。
using UnityEngine;
public class ItemCollectible : MonoBehaviour
{
[Header("道具屬性")]
[Tooltip("道具種類名稱(預設為 Feather)")]
public string itemName = "Feather";
private void OnTriggerEnter2D(Collider2D other)
{
// 只要碰撞對象是小鳥(Tag 為 Player)
if (other.CompareTag("Player"))
{
Debug.Log($"【吃到道具】獲得了:{itemName}");
// 吃到羽毛後自我銷毀
Destroy(gameObject);
}
}
}
有了可以取得的道具後,接下來就是讓它自己出現在遊戲場景中。
這次不希望羽毛固定在同一個時間出現,因此讓生成時間在 5~15 秒之間隨機選擇。
生成位置也不固定在同一個高度,而是在一定範圍內隨機調整,讓每次遊玩時道具出現的位置不完全一樣。
另外,道具的移動速度會直接取得目前 RockSpawner 的速度,因此當遊戲難度提升時,道具也會跟著場景一起加快。
using UnityEngine;
public class ItemSpawner : MonoBehaviour
{
[Header("道具清單")]
[Tooltip("可以產生的羽毛道具 Prefab 陣列")]
public GameObject[] itemPrefabs;
[Header("生成時間範圍(秒)")]
public float minSpawnInterval = 5f;
public float maxSpawnInterval = 15f;
[Header("生成高度設定")]
[Tooltip("當產生上岩石時,羽毛出現的安全 Y 軸高度(中下方)")]
public float spawnYForTopRock = -1.5f;
[Tooltip("當產生下岩石時,羽毛出現的安全 Y 軸高度(中上方)")]
public float spawnYForBottomRock = 1.5f;
[Tooltip("Y 軸隨機微調幅度")]
public float yOffset = 0.5f;
[Header("關聯的 RockSpawner")]
public RockSpawner rockSpawner;
private float timer = 0f;
private float nextSpawnTime = 0f;
void Start()
{
if (rockSpawner == null)
{
rockSpawner = FindObjectOfType<RockSpawner>();
}
ResetTimer();
}
void Update()
{
timer += Time.deltaTime;
if (timer >= nextSpawnTime)
{
SpawnRandomItem();
ResetTimer();
}
}
void ResetTimer()
{
timer = 0f;
// 5 ~ 15 秒間隨機抽一個時間點生成羽毛
nextSpawnTime = Random.Range(minSpawnInterval, maxSpawnInterval);
}
void SpawnRandomItem()
{
if (itemPrefabs == null || itemPrefabs.Length == 0) return;
int randomIndex = Random.Range(0, itemPrefabs.Length);
GameObject selectedItem = itemPrefabs[randomIndex];
float targetY = Random.Range(-1.5f, 1.5f);
targetY += Random.Range(-yOffset, yOffset);
Vector3 spawnPosition = new Vector3(transform.position.x, targetY, 0f);
GameObject newNextItem = Instantiate(selectedItem, spawnPosition, Quaternion.identity);
PipeMove itemMove = newNextItem.GetComponent<PipeMove>();
if (itemMove != null && rockSpawner != null)
{
itemMove.moveSpeed = rockSpawner.currentSpeed;
}
}
}
目前道具的功能還很簡單,主要就是「生成 → 移動 → 小鳥碰到 → 消失」,先把最基本的流程建立起來。
明天大概會先產出遊戲相關物件,順便思考還能新增哪一些功能道具。
原本有考慮請Gemini協助生成遊戲素材,但今天暫時先把程式部分處理完,圖片素材的部分等有比較完整的時間再來嘗試,但生成圖片應該不是這AI擅長的部份,所以可能會自己產出圖片。
目前已經可以讓羽毛隨機出現在場景中,小鳥碰到後也會判定取得並將道具移除。
這次也是先把自己想做的功能告訴 Gemini,再讓它協助產生程式碼,最後放進 Unity 中測試。
接下來會繼續從目前的基礎慢慢增加功能,也會依照實際製作的難度調整原本的構想。