iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0
Build on Google AI

從基礎到實作:使用 Google AI 學習程式設計系列 第 23 篇

Day 23|依照分數逐漸加入不同目標

  • 分享至 

  • xImage
  •  

既然得分系統大致上已經完成了,那今天我決定來修改召喚的C#,因為一開始沒分數只能全部目標混著生成,有分數那就設計成依照分數來逐漸增加高血量的目標。

修改目標生成程式

首先將原本的生成程式修改成TargetSpawner(原MoleSpawner),並加入不同殭屍的分數解鎖門檻。

目前依我的想法設定為:

  • 1000分:解鎖2血目標。
  • 2500分:解鎖3血目標。
  • 5000分:解鎖4血目標。
  • 8500分:解鎖5血目標。
    當玩家達到對應分數後,生成器就會將新的目標加入隨機生成的範圍。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TargetSpawner : MonoBehaviour
{
    [Header("生成設定")]
    public Transform[] spawnPoints;

    [Header("目標 Prefabs (按 1~5 滴血順序依序拖入)")]
    [Tooltip("Element 0: 1滴血\nElement 1: 2滴血\nElement 2: 3滴血\nElement 3: 4滴血\nElement 4: 5滴血")]
    public GameObject[] targetPrefabs;

    [Header("時間設定")]
    public float spawnInterval = 1.5f;

    [Header("解鎖門檻設定")]
    public int scoreForType2 = 1000;
    public int scoreForType3 = 2500;
    public int scoreForType4 = 5000;
    public int scoreForType5 = 8500;

    private void Start()
    {
        if (spawnPoints == null || spawnPoints.Length == 0 || targetPrefabs == null || targetPrefabs.Length == 0)
        {
            Debug.LogError("[TargetSpawner] 請確保已指派 spawnPoints 與 targetPrefabs!");
            return;
        }

        StartCoroutine(SpawnRoutine());
    }

    private IEnumerator SpawnRoutine()
    {
        while (true)
        {
            yield return new WaitForSeconds(spawnInterval);
            SpawnTargetAtRandomHole();
        }
    }

    private void SpawnTargetAtRandomHole()
    {
        // 1. 取得當前總分數(若 ScoreManager 不存在則預設為 0)
        int currentScore = ScoreManager.Instance != null ? ScoreManager.Instance.totalScore : 0;

        // 2. 根據分數計算當前解鎖到的最大索引值 (Max Index)
        int maxUnlockedIndex = 0; // 預設只解鎖第 1 種 (Index 0)

        if (currentScore >= scoreForType5 && targetPrefabs.Length >= 5)
        {
            maxUnlockedIndex = 4; // 解鎖到第 5 種
        }
        else if (currentScore >= scoreForType4 && targetPrefabs.Length >= 4)
        {
            maxUnlockedIndex = 3; // 解鎖到第 4 種
        }
        else if (currentScore >= scoreForType3 && targetPrefabs.Length >= 3)
        {
            maxUnlockedIndex = 2; // 解鎖到第 3 種
        }
        else if (currentScore >= scoreForType2 && targetPrefabs.Length >= 2)
        {
            maxUnlockedIndex = 1; // 解鎖到第 2 種
        }

        // 3. 隨機選取一個【已解鎖範圍內】的殭屍 Prefab (0 到 maxUnlockedIndex)
        int randomTargetIndex = Random.Range(0, maxUnlockedIndex + 1);
        GameObject selectedTargetPrefab = targetPrefabs[randomTargetIndex];

        // 4. 隨機選一個洞口生成
        int randomHoleIndex = Random.Range(0, spawnPoints.Length);
        Transform targetPoint = spawnPoints[randomHoleIndex];

        Instantiate(selectedTargetPrefab, targetPoint.position, Quaternion.identity);
    }
}

依照分數解鎖殭屍

這次的重點是讓TargetSpawner可以取得ScoreManager的目前分數。當玩家分數還沒達到門檻時,就只會生成第一種殭屍。當分數達到門檻後,則會將新的殭屍加入生成範圍。例如玩家達到2500分後,就可以隨機生成1~3血的殭屍。
這樣隨著玩家分數增加,遊戲中會慢慢出現血量更高的殭屍。

第二十三天的成果與之後目標

今天主要完成了以下幾個部分:

  • 分數解鎖:使用玩家目前的總分判斷可以生成哪些殭屍。
  • 逐步解鎖:隨著分數增加,會逐漸開放血量更高的殭屍。
    目前分數已經不只是單純顯示在畫面上的數字,而是開始影響遊戲中的生成內容。

接下來我應該會針對擊殺數來進行技能上的製作,或者增加生成與縮回的速度。


上一篇
Day 22|加入分數與擊殺紀錄
下一篇
Day 24|製作技能綁定擊殺數系統
系列文
從基礎到實作:使用 Google AI 學習程式設計 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言