Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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
0
Question by habdelsalam · Jan 29, 2019 at 05:33 PM · event triggeringcallbackdelegatesevent handlersevent-listener

Where is the best place to use delegate call back without calling it in Update function?

I know how delegates work in general. What I don't understand, if I am going to use delegates to fire events instead of checking on the continuously in the update function. Where is the best place to call them? I am going to give an example in my real time strategy game. I have an army and everytime one of my units dies, a sound plays says "Unit has been eliminated" I created the function that plays the audio and subscribed to the onUnitDies(). What I don't understand where should I be using the call back? If I put it in the update function, isn't it as the same as just checking if the unit died in the update and then play the audio if the player died? whats the benefit then? If I used it in the Start function() its gonna be called only once. I need it to be called every time something happens. Not in the update and not in the start. How is that?

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

1 Reply

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

Answer by Hellium · Jan 29, 2019 at 07:45 PM

Without precise code of what you have so far, it is difficult to tell you if you understood the concept of events correctly.


Supposing you have two entities, a UnitsSpawner spawning Units. The latter will send an event when it dies and the UnitsSpawner will be automatically warned that a spawned unit has died and call the appropriate function, without the need to poll the condition if( unit.hasDied )


 public class Unit : MonoBehaviour
 {
     public event System.Action<Unit> OnDeath;
 
     private int health;
 
     public bool Dead { get ; private set ; }
 
     public void Hurt( int damages )
     {
          if( Dead ) return ;
          health = Mathf.Max( health - damages, 0 );
          if( health == 0 )
          {
              Dead = true;
              if( OnDeath != null )
                  OnDeath( this );
              Destroy( gameObject );
          }
     }
 }
 
 
 public class UnitsSpawner : MonoBehaviour
 {
     public Unit UnitPrefab;
     private void SpawnUnit()
     {
          Unit instance = Instantiate( UnitPrefab );
          instance.OnDeath += OnUnitDied;
     }
 
     private void OnUnitDied( Unit unit )
     {
         unit.OnDeath -= OnUnitDied;
         Debug.Log( "The unit " + unit.name + " has died");
     }
 }





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

100 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

Related Questions

A lack of basic understanding of events and such 1 Answer

Difference between Function and function() Types 1 Answer

Should I perform commands in Update function or my sensor's callback function? 2 Answers

EventManager with parameters 1 Answer

Setting up EventTrigger programmatically for GameObject throws NullReferenceException 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