Corutine not behaving like it should?

Hello there…

Alright, so im new to the whole yield keyword and corutines in unity.
So im pretty confused as it is, and not having it behave like it ‘should’, doesnt make it easier :stuck_out_tongue:

Anyway, here’s what i want to do:

This is taken directly from here.


using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    IEnumerator Do() {
        print("Do now");
        yield return new WaitForSeconds(2);
        print("Do 2 seconds later");
    }
    void Example() {
        Do();
        print("This is printed immediately");
    }
}

And this is my code:


private void SetView()
{
    ActivateFirstPersonView();
    Debug.Log("This is immediately after");
}

public IEnumerator ActivateFirstPersonView()
{
    Debug.Log("Starting");
    yield return new WaitForSeconds(2);
    Debug.Log("Finished");
}

The problem is, ‘ActivateFirstPersonView’ isnt being called at all.

If i use,

StartCoroutine(ActivateFirstPersonView());

instead. Then it behaves like it should, I just dont get it?

Is it a documentation error? I hope not, because i would like to call the method without starting a coroutine, for simplicity’s sake.

Thanks for your comments guys.

This is what i might end up with:


Class 1:

private void SetView()
{
    StartFirstPersonView();
    Debug.Log("This is immediately after");
}

Class 2:

public void StartFirstPersonView()
{
    StartCoroutine(ActivateFirstPersonView());
}

private IEnumerator ActivateFirstPersonView()
{
    Debug.Log("Starting");
    yield return new WaitForSeconds(2);
    Debug.Log("Finished");
}

It might be a bit exessive, but i want to keep all the coroutine responsibility inside class 2.

If you guys have a more clever way of doing this, let me know.