foreach循环对某些gameObjects无法正常工作

时间:2017-04-14 10:33:54

标签: c# unity3d collision-detection game-physics

我正在开发一款我必须投球的比赛。它必须能够与其他球碰撞(我的演示有10个)。现在,在碰撞之后,被击中的球不断移动而不是停止。

我遇到此问题的方法是启用isKinematic一段时间,然后将其禁用。我使用带有以下代码的标签访问所有球:

GameObject[] marbles;
marbles = GameObject.FindGameObjectsWithTag ("Exit");
foreach (GameObject x in marbles) {
     x.GetComponent<Rigidbody> ().isKinematic = true;
}

我的问题是这只能部分启用对象。它启用了一些对象并禁用了其余的GameObjects。这段代码有什么问题?

我的老板告诉我在所有球上放一个脚本,然后按照相同的方法停止球(isKinematic在一段时间内是真的),但我认为如果我这会降低游戏的fps在每个gameObject上使用太多的一个脚本实例。哪种方法更好?

1 个答案:

答案 0 :(得分:1)

根据你的陈述:

  

碰撞后,撞击的球继续移动而不停止,所以我对该问题的解决方案是启用isKinematic一段时间然后禁用它

我几乎没有什么问题和建议可以帮到你:

  • 是否尝试将材料(具有一些摩擦值)添加到永不停止的移动物体上?

这有助于降低球速,并在一段时间后根据摩擦力让球停止。

  • 您是否让物理引擎控制球的运动或者您在碰撞事件中对这些运动物体施加了力?

如果您正在控制移动球的速度并且它在Update函数中不断更新速度,它将永远不会停止。让物理学判断移动球的移动速度,方向和持续时间。