Menu
CoddyTech

Dọn dẹp

Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 78 trên 85.

Xóa phần tử khỏi danh sách khi vòng lặp foreach đang duyệt qua danh sách sẽ khiến tập lệnh dừng với ngoại lệ InvalidOperationException. Thay vào đó, hãy lặp ngược bằng for: khi xóa phần tử i, chỉ các phần tử đứng sau nó di chuyển, mà vòng lặp đã duyệt qua rồi.

for (int i = coins.Count - 1; i >= 0; i--)
{
    if (coins[i].transform.position.y > 20f)
    {
        Destroy(coins[i]);
        coins.RemoveAt(i);
    }
}
challenge icon

Thử thách

Trung bình

Xóa các khối rơi xuống dưới sàn.

  1. Thay foreach bằng for (int i = blocks.Count - 1; i >= 0; i--), di chuyển blocks[i] xuống như trước.
  2. Sau khi di chuyển, khi blocks[i].transform.position.y < -1f, gọi Destroy(blocks[i]); rồi gọi blocks.RemoveAt(i);.

Nhấn Chơi: Hierarchy không bao giờ chứa quá vài khối. Sau đó nhấn Kiểm tra.

Tự làm thử

using System.Collections.Generic;
using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;
    [SerializeField] private GameObject blockPrefab;
    [SerializeField] private float spawnEvery = 1f;
    [SerializeField] private float fallSpeed = 5f;

    private List<GameObject> blocks = new List<GameObject>();
    private float timer;

    void Update()
    {
        Vector3 p = transform.position;
        p.x += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
        p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);
        transform.position = p;

        timer += Time.deltaTime;
        if (timer >= spawnEvery)
        {
            timer -= spawnEvery;
            Vector3 spot = new Vector3(Random.Range(-laneEdge, laneEdge), 10f, 0f);
            blocks.Add(Instantiate(blockPrefab, spot, Quaternion.identity));
        }

        foreach (GameObject block in blocks)
        {
            block.transform.position += Vector3.down * fallSpeed * Time.deltaTime;
        }
    }
}

Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity

Tự luyện tập: Playground Unity