【发布时间】:2015-07-14 16:39:28
【问题描述】:
所以我错过了一些对某些人来说可能非常简单的东西,但我遇到了麻烦。我创建了一个列表(msgSymbols),每次按下按钮时都会填充一个新的游戏对象(它基本上是一个自定义键盘),然后实例化为网格布局。
但是我如何只删除该列表中的最后一个游戏对象并更新网格布局以反映该更改? (比如按下键盘上的退格键)?我目前拥有的删除键代码抛出错误:ArgumentOutOfRangeException: Argument is out of range。参数名称:索引
我该如何解决这个问题?
public string prefabPath;
List<GameObject> msgSymbols = new List<GameObject>();
Vector3 symbolPos = new Vector3(0, 0, 0);
GameObject currentChar;
GameObject msgPanel;
Vector3 symbolScale = new Vector3(1.0f, 1.0f, 1.0f);
GameObject[] charKeys;
GameObject deleteKey;
private int index = 0;
void Start()
{
msgPanel = GameObject.FindGameObjectWithTag("MessagePanel");
charKeys = GameObject.FindGameObjectsWithTag("SymbolKey");
deleteKey = GameObject.FindGameObjectWithTag("DeleteKey");
}
#region IPointerClickHandler implementation
public void OnPointerClick (PointerEventData eventData)
{
if (transform.CompareTag("SymbolKey"))
{
// Load a GameObject into the msgSymbols List
// and store the last character added in a variable (lastChar)
msgSymbols.Add((GameObject)Resources.Load(prefabPath));
currentChar = msgSymbols.Last<GameObject>();
// Instantiate the last character (lastChar) added to msgSymbols List
GameObject symbol = Instantiate(currentChar, symbolPos, Quaternion.identity) as GameObject;
// Define transforms for symbol
symbol.transform.SetParent(msgPanel.transform);
symbol.transform.localScale = symbolScale;
}
if (transform.CompareTag("DeleteKey"))
{
Debug.Log (currentChar);
GameObject toDestroy = msgSymbols[msgSymbols.Count - 1];
msgSymbols.RemoveAt(msgSymbols.Count - 1);
Destroy(toDestroy);
Debug.Log(msgSymbols.Count);
}
}
#endregion
【问题讨论】:
标签: c# list unity3d instantiation