- Home /
BoxCollider2D.bounds not update properly. Frame delay exists
Hi, I'm Unity user with C#.
I'm now having struggle with using BoxCollider2D.bounds to clamp object's moving boundary.
Debug.Log(Background.GetComponent<BoxCollider2D>().bounds.min);
Background.transform.localScale = new Vector3(MapSize, MapSize, 1);
minBound = Background.GetComponent < BoxCollider2D>().bounds.min;
maxBound = Background.GetComponent<BoxCollider2D>().bounds.max;
Debug.Log(Background.GetComponent<BoxCollider2D>().bounds.min);
Above is code of my function right now. "Background" is object that have BoxCollider2D component.
In first line, scale of Background is expanded as Mapsize (this is 2D object, so not touching z axis).
In third and fourth line, BoxCollider2D.bounds.min and max should be duplicated to minBound and maxBound.
But log that come from second and fifth line shows me same value, bounds.min value that is before executing first line(change local scale).
When I put same Debug.log code in Update(), it shows expected value 1 frame after this function executed.
To me, it looks like Unity Engine is busy changing localScale until it execute later lines, so it's BoxCollider2D size does not updated with changed localScale (normally it changes automatically).
Maybe that's why it give me expected value after 1 frame.
Am I right? Or is there anything that I missed? Is there any solution for this problem, plz let me know.
Scaling is a syncronous method so if its busy scaling your bounds the method will have to wait before it continues execution unless you are using threads. Second i dont really understanding your code, you are loging the bounds $$anonymous$$ from the background collider, but you are never changing that value inside both logs, so it will never change its value, i am missing something?
O$$anonymous$$G sorry. That code was wrong
First logging should be placed earlier then changing scale. I fixed it.
Also I tested little bit more, and find out that changing local Scale is worked fine. So I think changing BoxCollider in Background transform (derived from changing local scale) was delayed. Am I right?
hello, that sounds extrange, test that same code inside coroutine and yield return some secs between both logs for making sure is a delayed problem.
Your answer
Follow this Question
Related Questions
How to implement a delay between each time my gun fires (using coroutines or otherwise)?... 2 Answers
android audio delayed 1 Answer
cooldown timers 0 Answers
Shoot Bullet Delay Enemy 0 Answers