Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
2
Question by thunderbuns · Nov 19, 2018 at 10:12 PM · c#deletecallbackactiontheory

What is a Callback?

I have been doing some online unity research and I can't seem to find an official documentation on Callbacks in unity. Google instead showed a Unity page about delegates. Are Callbacks, Delegates, and Actions all the same? I don't think that they are the same, but if that is true what are their differences?

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 Bunny83 · Nov 19, 2018 at 11:55 PM 0
Share

If you did some research you probably came across Callback, right? So yes callbacks generally are impemented using delegates. The "System.Action" type is literally a delegate without return type and without parameters, so yes, System.Action is a specific delegate type.

1 Reply

· Add your reply
  • Sort: 
avatar image
13
Best Answer

Answer by UnityCoach · Nov 19, 2018 at 11:05 PM

In theory, they are similar. Same same, but different :)

A callback is a general term to say a method is meant to be called back whenever something happens. In C#, Events, Actions, and in Unity, UnityEvents, all allow to create callbacks.

In C#, you have Events. They are in the form of a subscriber signature, called a delegate, and an event :

 public delegate void EventHandler();
 public event EventHandler OnSuchEvent;

Then you subscribe any method that matches the signature like this :

 OnSuchEvent += EventHandlingMethod;
 void EventHandlingMethod () {}

and unsubscribe like that :

 OnSuchEvent -= EventHandlingMethod;

Then you simply raise the event, checking it's not null first :

 if (OnSuchEvent != null)
     OnSuchEvent ();

This events can carry data. In which case, it looks like this :

 public delegate void EventHandler(int param);
 public event EventHandler OnSuchEvent;
 OnSuchEvent += EventHandlingMethod;
 void EventHandlingMethod (int param) {}
 if (OnSuchEvent != null)
     OnSuchEvent (12);

Then you have Actions. They are generic and save you the trouble of declaring the delegates and checking their null state.

 public Action<int> OnSuchEvent;
 OnSuchEvent += EventHandlingMethod;
 void EventHandlingMethod (int param) {}
 OnSuchEvent.Invoke (12);

Unity also has its own UnityEvents, they are also Generic. They show up in the inspector so that you can subscribe other components' members/methods to them. You need to add

 using UnityEngine.Events;

Then you can use parameter less events like this :

 [SerializeField] UnityEvent myEvent;
 myEvent.Invoke ();

and with parameters :

 [System.Serializable] public class IntEvent : UnityEvent<int> {}
 [SerializeField] IntEvent intEvent;
 intEvent.Invoke (12);
Comment
Add comment · Show 12 · 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 UnityCoach · Nov 19, 2018 at 11:10 PM 1
Share

Forgot to answer to the question, a callback is a general term to say a method is meant to be called back whenever something happens. In C#, Events, Actions, and in Unity, UnityEvents, all allow to create callbacks.

avatar image ecv80 UnityCoach · Nov 19, 2018 at 11:34 PM 0
Share

I think you should add this in the beginning of your answer.

avatar image UnityCoach ecv80 · Nov 19, 2018 at 11:44 PM 0
Share

You're right. I just did.

avatar image thunderbuns · Nov 20, 2018 at 12:03 AM 0
Share

Very helpful and useful, I am still a little confused about when and how callbacks work. Why would someone use a callback? When would someone want to use a callback?

avatar image UnityCoach thunderbuns · Nov 20, 2018 at 09:13 AM 0
Share

You usually use them to avoid watching variables for changes that'll happen occasionally, and also decouple components, as the event sender doesn't need to know about the receiver.

Consider the following code :

 void Update ()
 {
     if (distanceToPlayer < criticalDistance)
     {
         // do things
     }
 }

Now consider this ins$$anonymous$$d :

 Action OnCriticalDistanceReached;
 void Awake ()
 {
     OnCriticalDistanceReached += DoThings;
 }
 void DoThings ()
 {
     // do things
 }
avatar image thunderbuns UnityCoach · Nov 21, 2018 at 08:13 PM 0
Share

When do you use the CallBack(myCallback) function?

Show more comments
avatar image fafase · Dec 09, 2018 at 12:53 AM 0
Share

The Action part is a bit misleading and somehow wrong, Action is just a declaration based on delegate. The following is the declaration in the System namespace.

 public delegate void Action();

.NET and $$anonymous$$icrosoft, just decided to provide an already created type of delegate. You are also na$$anonymous$$g Action OnSuchEvent like it would be an event while an event would be declared as

  public event Action OnSuchEvent;

The Invoke method is not preventing the null check as you seem to mention. The problem with a public delegate, any other object can wipe it off (this is why we have event that prevents it), so your lines about Action can't just assume there is something to point at and should check for nullity.

Or I misunderstood your writing.

https://referencesource.microsoft.com/#mscorlib/system/action.cs

avatar image Bertlapp · Jan 03, 2020 at 08:21 PM 0
Share

Wow, nice overview

avatar image Fressbrett · Jun 17, 2020 at 09:07 PM 0
Share

Since C# 6 you can also use the ? Operator to make your Action null-checks a bit more compact:

Before:

 System.Action<int> OnSuchAction;
 
 if (OnSuchAction!= null)
      OnSuchAction.Invoke ();

Using the new null-operator:

 System.Action<int> OnSuchAction;
 
 OnSuchAction?.Invoke ();

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

566 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

I need help with Deleting and Initiating a gameobject 1 Answer

UnityAction Vs UnityEvent 1 Answer

[ANSWERED] c# performance impact - Global variables vs Local variables 1 Answer

Delegates & Events registration & deregistration - Doubt 0 Answers

Unity Custom Editor - Lauch callback at the end of the SerializeField. 0 Answers


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