我有一个有很多孩子的游戏对象(球体)
在游戏的某个阶段,我想让每个孩子顺利地移动,这样看起来就像是分崩离析。我尝试过的是使用foreach
循环移动Vector3.Lerp
的每个元素。可悲的是,一切都开始严重滞后。
让他们像这样顺利倒下会很棒
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);
}
答案 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)
您的动画图形似乎表明您的所有球体彼此保持相同的相对位置。他们似乎在一起作为一个整体,而不是“分崩离析”。如果您想要,而不是为每个单独的球体设置动画,请将它们全部放在单个父对象下并为该父对象设置动画。