Why sprite doesn't change without coroutine?
Hello.
I've got a game object "position". Under some conditions a child of this game object (a car) is destroyed. Then the next Car object is instantiated as a child of the "position". If the position is selected, I want the sprite of the car to be changed.
But if I just try something like:
if(selected)
{
position.transform.GetComponentInChildren<SpriteRenderer>().sprite = newSprite;
}
it doesn't work.
So I tried to do it this way:
if(selected)
{
StartCoroutine(Temp());
}
IEnumerator Temp()
{
yield return new WaitForSeconds(0.000000000001f);
position.transform.GetComponentInChildren<SpriteRenderer>().sprite = newSprite;
}
and now it does.
But I realize it's badly done. Can somebody help please?
Answer by Exceptione · Mar 04, 2016 at 11:38 AM
It looks like the instantiation may be happening after that line of code is running, is there any way you could call it after it's spawned?
Also, instead of yield return new WaitForSeconds(0.000000000001f);
you can do: yield return new WaitForEndOfFrame();
(or something similar, I don't have Unity open to check spelling)
I am completely sure I use the "spriting" function after instantiating the object. I put changing of sprite and Debug.Log() into one function and I got log.
Thank you for the tip with WaitForEndOfFrame() .
Interesting. The second way you tried would indicate that it's being called like a frame after. Could you not have a script on the newly spawned object and change it's sprite on Start()?
$$anonymous$$aybe try the first way again and Debug out the selected variable to see if it's true or not
Your answer
Follow this Question
Related Questions
Setting transform position in Coroutines - not updating when expected? 0 Answers
Instantiating random sprites, with no space between them? 0 Answers
Workflow ideas needed 0 Answers
Bullets with raycast and physics 2 Answers
Unity Freezing after for loop 1 Answer