刚体 2D 不会停止

Rigidbody 2D doesn't stop

在我的场景中,我在运行时实例化了一个预制件,它有一个动态的 Rigidbody2D 和一个 BoxCollider2D; 它还有一个带有 OnTriggerEnter2D 方法的脚本,该方法运行以下函数:

/* ... */
public Rigidbody2D rigidbody;

private void StopMovement()
{
    rigidbody = GetComponent<Rigidbody2D>();
    rigidbody.velocity = Vector2.zero;
    Debug.Log(rigidbody.velocity);
}

基本上我希望对象在与触发器碰撞时停止。问题是它不会停止,即使控制台消息显示 (0.0, 0.0) 刚体的检查器看起来像这样:

如你所见,它的速度实际上并不为零。 我尝试添加

rigidbody.constraints = RigidbodyConstraints2D.FreezeAll;

但它所做的只是冻结预制件上的位置,而不是实际游戏对象实例上的位置。而且我不明白这是怎么可能的,还考虑到脚本上的 Rigidbody 字段被 Ball(clone) 占用,这是场景中游戏对象的名称。 我也尝试在 Awake/Start 中使用 GetComponent 而不是那里,但结果是一样的。

我已经在此处和 UnityAnswers 上查找了很多其他帖子,但其中 none 可以帮助我。到底发生了什么?

您访问的是预制件,而不是实际的 gameObjecy 和刚体。当你实例化球时使用 a

'GameObject ballClone = Instantiate(ballpref, pos, quaternion);'

通过这种方式您可以访问 ballClone.getcomponent() 并且它会正常工作

事实证明,导致这种奇怪行为的原因与自定义事件系统有关,这就是为什么花了这么长时间才弄清楚的原因。 基本上我是在 Event Listener 的检查器中将预制件指定为目标对象,认为它的效果会自动应用于该预制件的所有实例,但最后它并没有那样工作。 如果有人有同样的问题,我通过将事件侦听器组件放在 vary 目标对象上来解决它,所以基本上它引用自身并导致预期的行为。

感谢大家的宝贵时间,现在可以关闭了。