2017-04-14 148 views
0

我正在开发一个游戏,我有一个球,我必须抛出。它必须能够与其他球碰撞(我有10个为我的演示)。目前,碰撞后,被击中的球持续移动而不停止。foreach循环无法正常工作一些gameObjects

我对这个问题的解决方案是启用isKinematic一段时间,然后禁用它。我访问所有的球有标签的代码是这样的:

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

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

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

+0

这些球是在游戏中实例化的,还是你将它们全部放在场景中? – CNuts

回答

1

按照您的说法:

不断碰撞的hitted球跑动,而不是停止,所以我对这个问题的解决方案是让isKinematic了一段时间,然后将其禁用

我有几个后问题和建议可能会对您有所帮助:

  • 已尝试将材料(具有一定的摩擦值)添加到从未移动的物体停止?

这应该有助于降低球的速度,并根据摩擦值让球停止一段时间。

  • 也有你让由物理引​​擎控制球或者你施加的力对碰撞事件,这些运动物体的运动?

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

+0

感谢您的回答!从第一个子弹我想你说的物理材料,我已经补充说,已经得到玻璃的属性..我不认为这样我是对的还是错的,因为一个是动态摩擦是0.4和静摩擦是0.94 .. – Badshah

+0

请让我知道abput物理引擎..关于摩擦值的 – Badshah

+0

可以看看这个视频,它可以变化以控制任何方向的摩擦:https://unity3d.com/learn/tutorials/topics/物理/物理材料 关于物理引擎我的意思是你增加力/应用速度的游戏对象(http://answers.unity3d.com/questions/636566/addforce-with-2d-character.html),而不是在更新中的变换,应用力将被物理效果处理,但像这样在更新中变换(http://stackoverflow.com/questions/22467674/move-simple-object-in-unity-2d)不知道何时停止除非定义。 – NeverHopeless