前一款遊戲花了不少時間製作,包含角色操作、障礙物生成、分數系統與結算畫面。考量到鐵人賽剩下的時間,今天決定換一款比較簡單的遊戲,這次要製作的是經典的打地鼠。
打地鼠的基本玩法是讓地鼠從不同洞口出現,玩家再透過點擊地鼠來獲得分數。因此,今天先從地鼠的生成系統開始製作。
這次建立了MoleSpawner,負責定時生成地鼠,並從預先設定的洞口位置中隨機選擇一個來生成。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoleSpawner : MonoBehaviour
{
[Header("生成設定")]
[Tooltip("存放 9 個洞口的位置或 Transform")]
public Transform[] spawnPoints;
[Tooltip("要生成的地鼠 Prefab")]
public GameObject molePrefab;
[Header("時間設定")]
public float spawnInterval = 1.5f; // 多少秒生成一次
private void Start()
{
// 先檢查設定是否正確,避免浪費資源跑 Coroutine
if (spawnPoints == null || spawnPoints.Length == 0 || molePrefab == null)
{
Debug.LogError("[MoleSpawner] 請確保已在 Inspector 指派 spawnPoints 與 molePrefab!");
return;
}
// 開始定時召喚協程
StartCoroutine(SpawnRoutine());
}
private IEnumerator SpawnRoutine()
{
while (true)
{
// 等待指定的間隔時間
yield return new WaitForSeconds(spawnInterval);
// 執行生成邏輯
SpawnMoleAtRandomHole();
}
}
private void SpawnMoleAtRandomHole()
{
// 檢查是否有設定洞口與地鼠 Prefab
if (spawnPoints.Length == 0 || molePrefab == null) return;
// 1. 隨機取得 0 ~ (洞口數量-1) 的索引值
int randomIndex = Random.Range(0, spawnPoints.Length);
// 2. 取得該洞口的位置
Transform targetPoint = spawnPoints[randomIndex];
// 3. 在該位置生成地鼠
Instantiate(molePrefab, targetPoint.position, Quaternion.identity);
}
}
這程式碼主要是利用協程定時生成地鼠,透過Random.Range()隨機選擇洞口,使用 Instantiate()生成地鼠。目前的生成間隔設定為1.5秒,之後也可以依照遊戲需求調整。
今天剛開始製作第二款遊戲,就打算先從最基礎的開始,今天先搞定生成,接下來再製作地鼠縮回洞口的效果和玩家血量機制。