移动每个孩子

时间:2016-08-04 00:15:54

标签: c# unity3d unity5

我有一个有很多孩子的游戏对象(球体)

here

在游戏的某个阶段,我想让每个孩子顺利地移动,这样看起来就像是分崩离析。我尝试过的是使用foreach循环移动Vector3.Lerp的每个元素。可悲的是,一切都开始严重滞后。

让他们像这样顺利倒下会很棒

enter image description here

foreach (Transform child in GameObject.Find("Carbon").transform)
{
        child.transform.position = Vector3.Lerp(child.transform.position, 
                                    new Vector3(child.transform.position.x,
                                                child.transform.position.y - 200,
                                                child.transform.position.z), 0.2f);
}

2 个答案:

答案 0 :(得分:3)

我认为主要问题来自GameObject.Find()。从代码的外观来看,它会在每个foreach中找到碳转换。如果你有100个对象,它将使用" GameObject.Find"一帧100次。 这可以通过缓存转​​换来修复:

List<Transform> carbonList = new List<Transform>();

void Start () {
    //cache carbon tranform in Start() or OnEnable()
    carbonList.AddRange( transform.GetComponentsInChildren<Transform>());//use this if you attach your code in object parent

    //loop transform form caching list so it will not keep finding transform and cause lagging
    foreach (Transform child in carbonList)
    {
        var childPos = child.position;
        child.position = Vector3.Lerp(childPos, new Vector3(childPos.x, childPos.y - 200, childPos.z), 0.2f);
    }
}

如果您的脚本不在父对象中,则可以使用find标记。 http://answers.unity3d.com/questions/24257/how-do-i-find-all-game-objects-with-the-same-name.html

答案 1 :(得分:0)

您的动画图形似乎表明您的所有球体彼此保持相同的相对位置。他们似乎在一起作为一个整体,而不是“分崩离析”。如果您想要,而不是为每个单独的球体设置动画,请将它们全部放在单个父对象下并为该父对象设置动画。