In my scene I am instantiating at runtime a prefab, which has a dynamic Rigidbody2D and a BoxCollider2D; It also has a script with an OnTriggerEnter2D method, that runs the following function:
/* ... */
public Rigidbody2D rigidbody;
private void StopMovement()
{
rigidbody = GetComponent<Rigidbody2D>();
rigidbody.velocity = Vector2.zero;
Debug.Log(rigidbody.velocity);
}
Basically I want the object to stop when he collides with the trigger. The problem is it doesn't stop, and even if the console message says (0.0, 0.0)
the rigidbody's inspector looks like this:
And as you can see, its velocity isn't actually zero. I tried adding
rigidbody.constraints = RigidbodyConstraints2D.FreezeAll;
but all it does is freezing the position on the prefab, not on the actual gameObject instance. And I don't get how that's possible, also considering that the Rigidbody field on the script is occupied by Ball(clone)
, which is the name of the gameObject that's in the scene.
I also tried using GetComponent
in Awake/Start instead of there, but the result was the same.
I've already looked up a bunch of other posts, both here and on UnityAnswers, but none of them could help me. What is happening exactly?
Turns out that what caused that strange behaviour was related to a custom Event System, that's why it has taken so long to figure out. Basically I was assigning the prefab as the target object in the Event Listener's inspector, thinking that its effect would be automatically applied to all the instances of that prefab, but in the end it doesn't work like that. If anyone has the same issue, I solved it by putting the Event Listener component onto the vary target object, so basically it references itself and causes the expected behaviour.
Thanks for everyone's time, this can be closed now.