- Home /
Calling arbritary functions with arguments in Unity
Okay so we will have events happening. Problem is, these events can occur in arbitrary order and do alter the same items. So we have a scheduler system, which stores the function that executes the event, timing, etc, including arguments. So we need to execute arbitrary functions with arguments. I know its possible to pass functions as objects around in UnityScript and C#. The problem is in applying the arguments. Any way to do this in Unity?
I tried to use the Javascript apply
function, which didn't work.
To make this clearer,
Script A adds function B to ArrayList C
Script D iterates through C and finds B
D calls B([ArgumentList])
How can I do this?
Answer by Zeroth · Jan 07, 2011 at 06:04 PM
Actually, the right answer(as I found afterwards) is using C# reflection.
t = typeof(closure_schedule[currState]);//grabs the Type for the class for(var mi: System.Reflection.MethodInfo in t.GetMethods()) { if(mi.Name==function_schedule[currState]) { mi.Invoke(closure_schedule[currState], args_schedule[currState].ToArray());
}
}
args_schedule[currState]
is an ArrayList which I've added the arguments to, and I do the ToArray to get an Object[], which is what Invoke expects. closure_schedule[currState]
contains the object in which the function/method is being executed in scope of(ie, closures).
Answer by DaveA · Jan 06, 2011 at 12:31 AM
Look into the 'eval' function, Mono's Evaluator, and this post: http://answers.unity3d.com/questions/21984/eval-or-can-i-call-jscript-from-an-editor-c-script
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
Is it possible to create a List filled with methods? 3 Answers
function arguments list...? 2 Answers
Find the correct index number for array inside two loops 2 Answers