最新のものを取り消す
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 66/85。
リストの最新の項目は最後の項目で、インデックスは Count - 1 です。Remove で取り出し、まず Count > 0 か確認しましょう。リストが空の場合、最後の項目は存在せず、読み取ろうとすると ArgumentOutOfRangeException が発生してスクリプトが停止します。
if (coins.Count > 0)
{
GameObject last = coins[coins.Count - 1];
coins.Remove(last);
Destroy(last);
}リストから項目を削除しても、シーン内のオブジェクトには影響しません。自分で非表示にするか、破棄してください。
チャレンジ
中級Spaceキーで最新のボックスを取り除きます。
Update()内で、Input.GetKeyDown(KeyCode.Space)が押され、かつboxes.Count > 0の場合に限り、GameObject newest = boxes[boxes.Count - 1];を取得します。newest.SetActive(false);で非表示にし、boxes.Remove(newest);で取り除きます。"Boxes: " + boxes.Countをログに出力します。
「プレイ」を押して3回クリックし、その後Spaceキーを押します。最後のボックスが消えます。次に「確認」を押します。
自分で試してみよう
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プレイグラウンド