所以我试着在我的测试竞技场上做一个小的反推效果,我有一个球体对撞机,这是我的脚本:
// PushBack Class Script
if (Input.GetKeyDown(KeyCode.Q))
{
explosion_ball.transform.position = transform.position;
StartCoroutine(WaitAndPrint());
}
IEnumerator WaitAndPrint()
{
float i = 0;
while (i < 1)
{
i += 0.01f;
explosion_ball.radius = curve.Evaluate(i) * 10;
yield return new WaitForSeconds(0.01f);
}
}
//__________//
球体对撞机是设置和东西,但它不推东西回来,像我想的那样。
谢谢你!
编辑:explosion_ball
是一个球体碰撞器,我用动画曲线上的点和 * 10来改变它
3条答案
按热度按时间shyt4zoc1#
编辑:Unity刚体进入睡眠状态,因此[如果碰撞器改变大小太快,也将插值更改为连续]
A.检查障碍刚体是否正睡用
onTriggerEnter
和Wake Up
或
B.将此forceWakeUp脚本附加到您希望成为障碍的所有对象。
公共类强制唤醒:单体行为{私有刚体rb;
}
强制保持许多对象处于激活状态 * 将 * 影响性能。因此,请您决定。
1.你需要放大碰撞器的半径和所有的对象,它应该摆动需要有刚体组件附加到他们
2.如果你正在做上面的事情,并且它没有添加任何力,你可以使用“OnCollisionEnterTrigger”和AddForceMethod在所有重叠的对象上添加一个力,径向远离球体障碍物。
我想你不需要协程。
bvpmtnay2#
在Unity脚本API中搜索时,发现了一个名为
Rigidbody.AddExplosionForce(explosionForce, explosionPosition, explosionRadius, upwardsModifier, mode)
的方法。为了获得受爆炸影响的刚体,我需要使用Physics.OverlapSphere(position, radius)
来获得它们,这将获得半径变量内的所有对象,然后获得组件。将这两个方法组合起来也将如下所示:如果有任何解释,你想让我做关于我的变量提到我会回复:)
谢谢你们的帮助。
jckbn6z73#
我不知道你的曲线和计算产生的值,但是你可以用Window/Analysis/Physics Debugger直观地检查你的代码,或者写一个gizmo:
或者直接使用https://docs.unity3d.com/ScriptReference/Rigidbody.AddExplosionForce.html