Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • 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
2
Question by ina · Nov 26, 2014 at 04:42 AM · uieditorbutton

uGUI UI Button onclick static methods

Is it possible for uGUI buttons to access onclick methods that are static? It seems like only instances do not show up as "missing"

Comment
Add comment
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

3 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Kiwasi · Nov 26, 2014 at 07:06 AM

Currently no. You have to use an instance method as a wrapper to call the static method.

Comment
Add comment · Show 4 · 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 ina · Nov 27, 2014 at 11:06 AM 0
Share

why is that

avatar image Kiwasi · Nov 27, 2014 at 08:24 PM 0
Share

There are some complex technical reasons. Events are called on instances, not on the class itself. Yeah, I'm not really sure of the exact reasons, just that it currently is not supported.

Wrapper methods are pretty easy.

 public class $$anonymous$$yClass : $$anonymous$$onoBehaviour {
     public static void $$anonymous$$yStatic$$anonymous$$ethod(){
         Debug.Log("I just called a static method from a button");
     }
 
     public void $$anonymous$$yStaticWrapper (){
         $$anonymous$$yStatic$$anonymous$$ethod();
     }
 }


avatar image ina · Nov 27, 2014 at 10:45 PM 1
Share

Seems rather extraneous or redundant to have yet another instance wrapper for each static method..

avatar image Kiwasi · Nov 27, 2014 at 10:49 PM 2
Share

Don't complain to me. Send feedback to Unity. :)

You also have to use the wrapper method for calling non monobehaviour methods. Its all still much more efficient then the old OnGUI system.

avatar image
1

Answer by Untherow · Jun 07, 2018 at 10:39 PM

I found a work around to this that kind of simulates static methods:

Add your script onto a gameobject and make it a prefab. Now you can select the prefab in your button onclick and it will work just fine but you still need to use non static methods.

I really don't understand though why, even today, those static functions are not supported. Would seem like a no-brainer to me.

Comment
Add comment · Show 1 · 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 vfxjex · Nov 21, 2020 at 05:23 PM 0
Share

I never realize this simple solution. Thanks!

avatar image
0

Answer by Moeyvozhenie · Sep 22, 2017 at 08:14 PM

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.Events;
 
 public class BtnForStatic : MonoBehaviour {
 
     private Button btn;
 
     // Use this for initialization
     void Start () {
         btn = GetComponent<Button>();
     }
 
     public void AddBtnListener(UnityAction call)
     {
         btn.onClick.AddListener(call);
     }
 }
Comment
Add comment · 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

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.

Follow this Question

Answers Answers and Comments

30 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

Related Questions

uGUI Button without renderer 3 Answers

Adding functions in editor 1 Answer

UI Button and Color Tint Transition issue 0 Answers

uGUI WorldSpace elements part of GameObjects 1 Answer

instantiate a button in a panel in new uGUI 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges