我有一个代码,循环通过一个变换,并发送每个游戏对象在说变换到一个航点。这位工作正常。
当我使用碰撞删除一个游戏对象时,这个问题就出现了。在被删除的对象之后,在转换中索引的对象被抛出了航点路径。(在被删除的对象之前索引的对象仍然存在)。
我的问题是如何让ForLoop跳过Transform中删除的元素,这样程序就不会像这样"中断"。
我想可能有一个相当简单的解决方案,但我确实在网上看了看,关于这一点的文章很少。
private void MoveToNextWaypoint()
{
for (int i = 0; i < targets.Count; i++)
{
var targetWaypointTransform = _waypoints[_nextWaypointIndex];
targets[i].MoveTo(targetWaypointTransform.position, MoveToNextWaypoint);
targets[i].transform.LookAt(_waypoints[_nextWaypointIndex].position);
_nextWaypointIndex++;
if (_nextWaypointIndex >= _waypoints.Count)
_nextWaypointIndex = 0;
}
}
(第一个目标[i]行上的断点)
谢谢你的帮助!
注意:对象不一定按顺序删除。
1条答案
按热度按时间epggiuax1#
你的问题似乎可以归结为这样一句话:
如何让ForLoop跳过转换中删除的元素
答案是:
注意for循环中的第一个条件,检查数组中的元素是否为
null
。重载的equality ==不仅检查项是否为null,还检查基础托管对象是否也设置为删除。我们看不到你代码的大部分,但是你暗示你从
Transform
中获取数组,如果在这个框架中完成,可能在一小段时间内,仍然包含已经标记为销毁的项目。