一款免费的插件,可以在Unity Asset Store里面下载到。
https://assetstore.unity.com/packages/tools/integration/linq-to-gameobject-24256
LINQ to GameObject 利用 LINQ 和 Iteration 给我们提供了一种方便且高效访问 GameObject的方式。
axis.jpg
基于 "Origin"这个GameObject,我们可以很方便的访问到其他相对于Origin的其他GameObject.
origin.Ancestors(); // 返回 Container, Root
origin.Children(); // 返回 Sphere_A, Sphere_B, Group, Sphere_A, Sphere_B
origin.Descendants(); //返回 Sphere_A, Sphere_B, Group, P1, Group, Sphere_B, P2, Sphere_A, Sphere_B
origin.BeforeSelf(); // 返回 C1, C2
origin.AfterSelf(); //返回 C3, C4
上面返回的都是 IEnumerable<GameObject>类型的,可以结合链式查询对结果进行其他操作,例如这样:
// 销毁所有(tag == "foobar") 的GameObject
root.Descendants().Where(x => x.tag == "foobar").Destroy();
// 销毁所有克隆出的GameObject.
origin.transform.root.gameObject .Descendants() .Where(x => x.name.EndsWith("(Clone)")) .Destroy();
// 获取 FooScript 子物体及自身 的 FooScript 组件
var fooScripts = root.ChildrenAndSelf().OfComponent<FooScript>();
网友评论