void OnTriggerEnter2D(Collider2D other) { Destroy (____________); }
时间: 2024-03-30 15:37:29 浏览: 115
在 OnTriggerEnter2D 函数中,需要销毁某个游戏对象。空白处应填写需要销毁的游戏对象。根据代码上下文需要,应填写 "other.gameObject"。因为 other 参数是一个 Collider2D 类型的对象,而我们需要销毁的是与其相关的游戏对象,即碰撞到该触发器的游戏对象,所以应该使用 other.gameObject 来获取这个游戏对象。
相关问题
using System.Collections; using System.Collections.Generic; using UnityEngine; public class gukeyaoqiu : MonoBehaviour { Dictionary<string, int> customerRequirements = new Dictionary<string, int>() { {"luohanguo",1 }, {"gancao",1 }, {"xiakucao",1 }, {"sangye",1 }, {"juhua",1 }, }; List<string>itemsInContact = new List<string>(); List<string> keysToRemove = new List<string>(); private bool isnone ; void Start() { } void Update() { if (customerRequirements.Count == 0&&isnone==false) { Debug.Log("100!"); isnone = true; } } private void OnTriggerEnter2D(Collider2D other) { string itemName = other.gameObject.name; if(!itemsInContact.Contains(itemName)) { itemsInContact.Add(itemName); } foreach (var kvp in customerRequirements) { if(itemsInContact.Contains(kvp.Key)) { int count = customerRequirements[kvp.Key]; if (count > 0) { customerRequirements[kvp.Key] -= 1; Destroy(other.gameObject); if (customerRequirements[kvp.Key] == 0) { keysToRemove.Add(kvp.Key); } } } } foreach (var key in keysToRemove) { customerRequirements.Remove(key); } } }
这段代码是一个Unity脚本,用于管理一个关卡中的某个游戏对象与其他游戏对象的碰撞检测。具体来说,这个脚本实现了以下功能:
1. 定义了一个Dictionary类型的customerRequirements变量,用于保存客户的需求,其中键为物品名称,值为物品数量。
2. 定义了一个List类型的itemsInContact变量,用于保存当前与本游戏对象碰撞的游戏对象名称。
3. 定义了一个List类型的keysToRemove变量,用于保存已经满足客户需求的物品名称。
4. 在Start()函数中,没有任何操作。
5. 在Update()函数中,判断是否已经满足所有客户需求,如果是,则输出"100!"。
6. 在OnTriggerEnter2D(Collider2D other)函数中,判断当前与本游戏对象碰撞的游戏对象是否为客户所需物品,如果是,则将该物品从场景中移除,并将客户需求中对应物品数量减1。如果某个物品的数量已经减到0,则将其从customerRequirements中移除。
总体来说,这段代码实现了一个简单的游戏机制,玩家需要将特定的物品送给客户以完成任务。
但是他会报以下错误 InvalidOperationException: Collection was modified; enumeration operation may not execute. System.Collections.Generic.Dictionary`2+Enumerator[TKey,TValue].MoveNext () (at <9aad1b3a47484d63ba2b3985692d80e9>:0) gukeyaoqiu.OnTriggerEnter2D (UnityEngine.Collider2D other) (at Assets/Script/gukeyaoqiu.cs:39)
这个错误是由于在foreach循环中修改了字典customerRequirements导致的。在foreach循环中,编译器会生成一个迭代器,用于遍历字典中的所有键值对。如果在循环中修改了字典,会导致迭代器失效,从而抛出InvalidOperationException异常。
解决这个问题的方法是,在foreach循环中不直接修改字典,而是通过另一个List类型的keysToRemove变量来保存需要删除的键。循环结束后,再遍历keysToRemove,将其中保存的键从字典中删除即可。修改后的代码如下:
```
private void OnTriggerEnter2D(Collider2D other)
{
string itemName = other.gameObject.name;
if (!itemsInContact.Contains(itemName))
{
itemsInContact.Add(itemName);
}
foreach (var kvp in customerRequirements)
{
if (itemsInContact.Contains(kvp.Key))
{
int count = customerRequirements[kvp.Key];
if (count > 0)
{
customerRequirements[kvp.Key] -= 1;
Destroy(other.gameObject);
if (customerRequirements[kvp.Key] == 0)
{
keysToRemove.Add(kvp.Key);
}
}
}
}
foreach (var key in keysToRemove)
{
customerRequirements.Remove(key);
}
keysToRemove.Clear();
}
```
这样修改后,就不会再出现"InvalidOperationException: Collection was modified"的错误了。
阅读全文