在我的场景中,我在运行时实例化了一个预制件,它有一个动态 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;
但它所做的只是冻结 prefab 上的位置,而不是实际的 gameObject 实例。而且我不明白这怎么可能,还考虑到脚本上的 Rigidbody 字段被 占据Ball(clone)
,这是场景中游戏对象的名称。我也尝试GetComponent
在 Awake/Start 中使用,但结果是一样的。
我已经在此处和 UnityAnswers 上查找了许多其他帖子,但没有一个可以帮助我。究竟发生了什么?