Transform[] drawns = GetComponentsInChildren<Transform>()

这也包括父级,但我只想获取脚本连接的变换的子级.

问题是它在循环中 destruct 了父循环.

case DrawStates.DrawOnGizmosRuntime:
drawOnce = true;
if (line != null && drawOnGizmos == false)
{
    Transform[] drawns = GetComponentsInChildren<Transform>();
    if (drawns.Length > 0)
    {
        foreach (Transform drawn in drawns)
        {
            Destroy(drawn.gameObject);
        }
    }
}
if (boxCollider == null)
{
    boxCollider = boxColliderToDrawOn.GetComponent<BoxCollider>();
}
drawOnGizmos = true;
break;

推荐答案

实际上有几种方法可以找到没有父母的子元素.

foreach (var child in children) Debug.Log(child);

Use Where extension:

使用system.linq后,可以分离不是原始变换的子级,如下所示.

var children = transform.GetComponentsInChildren<Transform>().Where(t => t != transform);

Removing index 0:

由于索引0始终是主转换,所以可以在将子级转换为列表后将其删除.

var children = transform.GetComponentsInChildren<Transform>().ToList();

children.RemoveAt(0);

Using Skip(1)

由于亲爱的@Enigmativity,另一个解决方案是使用Skip(1),这实际上避免了主要的转换成员.

var children = transform.GetComponentsInChildren<Transform>().Skip(1);

Csharp相关问答推荐

在包含空项的列表上使用具有断言T的摘要表

O(N)测试失败

在依赖性注入和继承之间进行 Select

无法解析数据库上下文的服务

最新的Mediatr和具有同步方法的处理程序Handle:并非所有代码路径都返回值"

Razor视图Razor页面指向同一端点时的优先级

SortedSet.Remove()不会删除SortedSet.Min返回的元素

Automapper 12.x将GUID映射到字符串

C#带主体的主构造函数?

使用Entity Framework6在对象中填充列表会导致列表大多为空

如何在.NET AOT中为所有枚举启用JsonStringEnumConverter

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

MSI无法将快捷方式添加到启动文件夹

这是否比决定是否使用ConfigureAWait(False)更好?

我应该为C#12中的主构造函数参数创建私有属性吗?

并发表更新.EF核心交易

在C#和HttpClient中使用REST API

ASP.NET Core 8 Web API:如何添加版本控制?

我应该使用IMhemyCache来存储承载令牌,还是应该为Azure函数中的401个错误实施Polly重试策略?

如何提高C#中比较大 struct 的性能?