Menu
CoddyTech

Убрать последний созданный

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 66 из 85.

Самый новый элемент списка — последний, с индексом Count - 1. Удаляй его с помощью Remove и сначала проверяй Count > 0: в пустом списке нет последнего элемента, и попытка получить его останавливает скрипт с исключением ArgumentOutOfRangeException.

if (coins.Count > 0)
{
    GameObject last = coins[coins.Count - 1];
    coins.Remove(last);
    Destroy(last);
}

Удаление элемента из списка не затрагивает объект в сцене: скрой или уничтожь его самостоятельно.

challenge icon

Задание

Средне

Сделай так, чтобы клавиша пробела убирала последний ящик.

  1. В Update(), при нажатии Input.GetKeyDown(KeyCode.Space) и только если boxes.Count > 0, получи GameObject newest = boxes[boxes.Count - 1];.
  2. Скрой его с помощью newest.SetActive(false); и удали с помощью boxes.Remove(newest);.
  3. Выведи в журнал "Boxes: " + boxes.Count.

Нажми «Играть», щёлкни три раза, затем нажми пробел: последний ящик исчезнет. Затем нажми «Проверить».

Попробуйте сами

using System.Collections.Generic;
using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    List<GameObject> boxes = new List<GameObject>();

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 spot = transform.position + new Vector3(boxes.Count * 1.5f, 0, 0);
            GameObject box = Instantiate(boxPrefab, spot, Quaternion.identity);
            boxes.Add(box);
            Debug.Log("Boxes: " + boxes.Count);
        }

        // Space: скрыть последний добавленный ящик и удалить его из списка
    }
}

Все уроки раздела Основы скриптинга в Unity

Потренируйтесь самостоятельно: Песочница Unity