Well, all those co-routines and waiting for some seconds are nice but, why not just use `Invoke()` for this purpose as well? 


    //...
    public void SpawnObject (){
        var warningDelay = 5.0;
        Instantiate (spawnee, transform.position, transform.rotation);
        Invoke("CreateWarningImage", warningDelay);
        if (stopSpawning) {
            CancelInvoke ("SpawnObject");
        }

    }
    //someTransform is where you want the image to be, assuming you've already defined it
    public void CreateWarningImage(){
        Instantiate (warning, someTransform.position, someTransform.rotation);
    }

And then, you just put a destroy on the a script's `Awake()` function which is on the image like so:

    var lifetime = 2.0;
    function Awake()
    {
        Destroy(gameObject, lifetime);
    }

Note that I'm assuming you're not spawning hundred thousand enemies per second, so the [performance difference between an invoke call (looks for a string) and a co-routine][1] shouldn't matter at all. For the simplest stuff (like doing one thing after some seconds), you shouldn't really need anything other than `Invoke()`.


  [1]: https://answers.unity.com/questions/477862/what-is-the-best-between-startcoroutine-or-invoker.html