目前我通过使用if
语句
float addGap = gapFix;
foreach (Transform child in topViewPlan.transform)
{
if (child.name.Substring(5, 2).Equals("45") || child.name.Substring(5, 2).Equals("46") || child.name.Substring(5, 2).Equals("47") || child.name.Substring(5, 2).Equals("48"))
{
//rearrange child position
if (!child.name.Substring(5, 2).Equals("45"))
child.transform.localPosition += Vector3.right * addGap * 2;
else
child.transform.localPosition += Vector3.right * addGap;
}
}
有没有可能获得topViewPlan.transform
的最后几个元素?
例如,letay topViewPlan.transform
由10个元素组成,我想要最后4个元素(即元素7,8,9和10),所以也许我可以写: -
foreach (Transform child in topViewPlan.transform.getLast(4)){} //this is just example
所以我可以获得topViewPlan.transform
答案 0 :(得分:2)
您可以使用 GetComponentsInChildren<变换>(),它将为您和数组提供子对象和对象本身。
例如:
var childs = GetComponentsInChildren<Transform>();
int offset = 5; // want the five last elements
for(int i=childs.Length - offset; i<childs.Length; ++i)
{
// Do something with childs[i]
}
但是我认为这段代码效率低且不稳定,我无法确保 GetComponentsInChildren 返回的数组以正确的方式排序(父级为0,后级为子级)。一个更加确定和简单的方法是GameObject的每个孩子都有一个特定的组件,让我们说:
class ChildrenIdentificator : MonoBehavior
{
public int id = 0;
}
您可以在每个孩子中设置ID,以便它具有您想要的行为,然后您可以执行以下操作:
var childs = GetComponentsInChildren<ChildrenIdentificator>();
for(int i=0 ; i<childs.Length ; ++i)
{
if(childs[i].id == // I let you figure out the rest
}
通过这种方式,您可以更好地控制,并且可以直接看到自己在做什么。你也避免进行字符串比较。 无论如何,我强烈建议不要在每一帧使用 GetComponentsInChildren ,以解决你可以在之后使用它之前将childs数组存储在Start()函数中。
答案 1 :(得分:1)
使用
transform.childCount
获得孩子的数量,然后生孩子这样做:
例如,这将返回子编号5:
transform.GetChild(5);
您需要的代码:
int numberOfChildNeeded = 5;
for (int i = transform.childCount - 1; i > transform.childCount - numberOfChildNeeded ; i--)
{
//do something
transform.GetChild(i)
}