- Home /
problem with #pragma strict and Function type
Is it possible to call a coroutine stored in a variable and use #pragma strict at the same time? And I'm sorry if this has already been answered or the question does not make sense.
#pragma strict
function Start ()
{
StartCoroutine(coroutineFunction(1.0f));
//works with #pragma strict
var testSimpleFunction : Function = simpleFunction;
testSimpleFunction(1.0f);
//works with #pragma strict
var testCoroutineFunction : Function = coroutineFunction;
StartCoroutine(testCoroutineFunction(1.0f));
//does not work with #pragma strict
//BCE0023: No appropriate version of 'UnityEngine.MonoBehaviour.StartCoroutine' for the argument list '(Object)' was found
}
function coroutineFunction (waitFor:float)
{
yield WaitForSeconds (waitFor);
Debug.Log("coroutineFunction");
}
function simpleFunction (simpleNumber:float)
{
Debug.Log("["+Time.frameCount+"]simpleFunction :"+simpleNumber);
}
Answer by Eric5h5 · Jul 18, 2011 at 05:23 PM
You can let type inference take care of the correct type for you (which works fine with #pragma strict; type inference is not dynamic typing):
var testCoroutineFunction = coroutineFunction;
StartCoroutine(testCoroutineFunction(1.0));
If you wrote out the type explicitly, it would be this:
var testCoroutineFunction : function(float):System.Collections.IEnumerator = coroutineFunction;
StartCoroutine(testCoroutineFunction(1.0));
I know this thread is pretty old but hoping someone could shed some light.
I've followed Eric5h5's example but just can't seem to get it to work. The following code gives the error "Cannot convert 'function(): System.Collections.IEnumerator' to 'System.Collections.IEnumerator'."
I've tried all different combinations of type for the First() function but no dice:
var coroutine : System.Collections.IEnumerator;
function Start()
{
coroutine = First;
yield StartCoroutine(coroutine);
print("Done!");
}
function First() : IEnumerator
{
print ("First!");
yield WaitForSeconds(2.0);
}
Sorry, that was a typo in my second example...should have been:
var testCoroutineFunction : function(float):System.Collections.IEnumerator = coroutineFunction;
Your answer
Follow this Question
Related Questions
Coroutine... should I worry about synchronization or not? 1 Answer
Segment within a nested If does not get evaluated 2 Answers
Make a coroutine run when Time.timeScale = 0; 3 Answers
convert timer from update() to coroutine or invokerepeating 0 Answers
Static Coroutine being called endlessly 2 Answers