• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Arterion · Aug 08, 2017 at 03:44 PM · c#

C# Call a Function by a String with Parameters / Invoke a Function with parameters?

Hi,

I try to create a Button in WorldSpace. The Button is triggered by a Raycast when the Player press the LMB. Then a function is called, that call the Action Function, which I have defined in public variables.

The Variables :

     public MonoBehaviour ButtonActionClass; 
 
     public string FunctionName;
 
     public float FunctionDelayTime = 0.0f;

The Function:

 public void TriggerButton ()
 {
     if(!hasCondition)
     {
         ButtonActionClass.Invoke(FunctionName,FunctionDelayTime);
     }
 }


This code works pretty well, but the problem is that I can't add parameters with this Invoke function.

So I tried something different :

 public void TriggerButton ()
 {
     if(!hasCondition)
     {
         // ObjArray is a private Object[] ObjArray; in which I've added a few Variables
 
         ButtonActionClass.GetType().GetMethod(FunctionName).Invoke(FunctionName,ObjArray);
     }
 }

But the Problem is that I have to replace every Target Function parameters to an Object[] and convert them, if this is possible at all.

So I hope that a solution can be found.

PS : Sorry for my English

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image fafase · Aug 13, 2017 at 08:47 PM 0
Share

Is the parameter list constant or it can change? If constant, you could use an Action reference pointing to the appropriate method.

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by ShadyProductions · Aug 08, 2017 at 04:56 PM

Since you can not call Invoke with parameters you can use StartCoroutine for this.

Say your code is:

  void Start()
  {
      Invoke("MyFunction", 1f);
  }
  
  void MyFunction()
  {
      // Do your thing.
  }

Instead you can use Coroutine by passing argument like:

  void Start()
  {
      StartCoroutine(MyFunction(false, 1f));
  }
  
  IEnumerator MyFunction(bool status, float delayTime)
  {
      yield return new WaitForSeconds(delayTime);
      // Now do your thing here
  }
Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Arterion · Aug 08, 2017 at 05:11 PM 0
Share

But this code only work if the Function is a Coroutine ,or am I wrong ?

But it is already a good approach, which helps me a lot .

avatar image ShadyProductions Arterion · Aug 09, 2017 at 06:54 AM 0
Share

The function simply needs to return an IEnumerator.

avatar image
0

Answer by Arterion · Aug 13, 2017 at 09:02 AM

Today I finally could test the code, but I realised that I can't use a variable with StartCouroutine() and I get the following error : .. is a field but a `method group' was expected

 ButtonActionClass.StartCoroutine(FunctionName( TransformInput, GameobjectInput...));





Comment
Add comment · Show 5 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image ShadyProductions · Aug 13, 2017 at 08:43 PM 0
Share

Need more information about your code..

avatar image Arterion · Aug 14, 2017 at 11:53 AM 0
Share

I simply used the same variables as before :

 public $$anonymous$$onoBehaviour ButtonActionClass; 
 
 public string FunctionName;
 
 // $$anonymous$$ethod Parameters
 
 public Transform TransformInput;
 
 public Gameobject GameobjectInput;


the trigger Function:

  public void TriggerButton ()
  {
         ButtonActionClass.StartCoroutine(FunctionName( TransformInput, GameobjectInput...));
  }



avatar image Arterion · Aug 16, 2017 at 01:58 PM 0
Share

Do you need more information?

avatar image ShadyProductions Arterion · Aug 18, 2017 at 08:06 PM 0
Share

You cannot pass it like a string

public string FunctionName; // not possible to pass it to startcoroutine with parameters like that.

Pass the actual method.

avatar image Arterion ShadyProductions · Aug 19, 2017 at 08:26 AM 0
Share

If so, StartCoroutine is not a solution for me, because I wan't to use the Button Script much more than 10 times and call always different functions.

That is why I use those public variables, so that I don't have to write every function name and there specific parameters in the Code.

Would Sendmessage be an alternative? Or is there no other option?

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

366 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Initialising List array for use in a custom Editor 1 Answer

Illuminating a 3D object's edges OnMouseOver (script in c#)? 1 Answer

Flip over an object (smooth transition) 3 Answers

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges