Events

Checked with version: 4.1

-

Difficulty: Intermediate

How to create a dynamic "broadcast" system using Events.

Events

Intermediate Scripting

EventManager

Code snippet

using UnityEngine;
using System.Collections;

public class EventManager : MonoBehaviour 
{
    public delegate void ClickAction();
    public static event ClickAction OnClicked;

    
    void OnGUI()
    {
        if(GUI.Button(new Rect(Screen.width / 2 - 50, 5, 100, 30), "Click"))
        {
            if(OnClicked != null)
                OnClicked();
        }
    }
}
//Javascript doesn't have a built-in "event". Instead,
//you will need to use C# to gain this functionality.
//Other scripts written in Javascript can still subscribe
//to events created in C#.
import UnityEngine
import System.Collections


public class EventManager(MonoBehaviour):

    public callable ClickAction() as void
    public static event OnClicked as ClickAction

    
    
    private def OnGUI():
        if GUI.Button(Rect(((Screen.width / 2) - 50), 5, 100, 30), 'Click'):
            OnClicked()

TeleportScript

Code snippet

using UnityEngine;
using System.Collections;

public class TeleportScript : MonoBehaviour 
{
    void OnEnable()
    {
        EventManager.OnClicked += Teleport;
    }
    
    
    void OnDisable()
    {
        EventManager.OnClicked -= Teleport;
    }
    
    
    void Teleport()
    {
        Vector3 pos = transform.position;
        pos.y = Random.Range(1.0f, 3.0f);
        transform.position = pos;
    }
}
#pragma strict

//Scripts written in Javascript can subscribe to
//events made in C#. The key is that the C# scripts
//must be compiled before the Javascripts. In the are
//compiled at the same time, they won't be able to 
//"see" each other.

function OnEnable()
{
    EventManager.OnClicked += Teleport;
}


function OnDisable()
{
    EventManager.OnClicked -= Teleport;
}


function Teleport()
{
    var pos : Vector3 = transform.position;
    pos.y = Random.Range(1.0f, 3.0f);
    transform.position = pos;
}
import UnityEngine
import System.Collections


public class TeleportScript(MonoBehaviour):

    private def OnEnable():
        EventManager.OnClicked += Teleport

    
    
    private def OnDisable():
        EventManager.OnClicked -= Teleport

    
    
    private def Teleport():
        pos as Vector3 = transform.position
        pos.y = Random.Range(1.0F, 3.0F)
        transform.position = pos

TurnColorScript

Code snippet

using UnityEngine;
using System.Collections;

public class TurnColorScript : MonoBehaviour 
{
    void OnEnable()
    {
        EventManager.OnClicked += TurnColor;
    }
    
    
    void OnDisable()
    {
        EventManager.OnClicked -= TurnColor;
    }
    
    
    void TurnColor()
    {
        Color col = new Color(Random.value, Random.value, Random.value);
        renderer.material.color = col;
    }
}
#pragma strict

//Scripts written in Javascript can subscribe to
//events made in C#. The key is that the C# scripts
//must be compiled before the Javascripts. In the are
//compiled at the same time, they won't be able to 
//"see" each other.

function OnEnable()
{
    EventManager.OnClicked += TurnColor;
}


function OnDisable()
{
    EventManager.OnClicked -= TurnColor;
}


function TurnColor()
{
    var col : Color = new Color(Random.value, Random.value, Random.value);
    renderer.material.color = col;
}
import UnityEngine
import System.Collections


public class TurnColorScript(MonoBehaviour):

    private def OnEnable():
        EventManager.OnClicked += TurnColor

    
    
    private def OnDisable():
        EventManager.OnClicked -= TurnColor

    
    
    private def TurnColor():
        col = Color(Random.value, Random.value, Random.value)
        renderer.material.color = col
Attributes
Building a Custom Inspector

Related tutorials

Scripting

Beginner Gameplay Scripting

  1. Scripts as Behaviour Components
  2. Variables and Functions
  3. Conventions and Syntax
  4. C# vs JS syntax
  5. IF Statements
  6. Loops
  7. Scope and Access Modifiers
  8. Awake and Start
  9. Update and FixedUpdate
  10. Vector Maths
  11. Enabling and Disabling Components
  12. Activating GameObjects
  13. Translate and Rotate
  14. Look At
  15. Linear Interpolation
  16. Destroy
  17. GetButton and GetKey
  18. GetAxis
  19. OnMouseDown
  20. GetComponent
  21. Delta Time
  22. Data Types
  23. Classes
  24. Instantiate
  25. Arrays
  26. Invoke
  27. Enumerations
  28. Switch Statements

Intermediate Gameplay Scripting

  1. Properties
  2. Ternary Operator
  3. Statics
  4. Method Overloading
  5. Generics
  6. Inheritance
  7. Polymorphism
  8. Member Hiding
  9. Overriding
  10. Interfaces
  11. Extension Methods
  12. Namespaces
  13. Lists and Dictionaries
  14. Coroutines
  15. Quaternions
  16. Delegates
  17. Attributes
  18. Events

Editor Scripting

  1. Building a Custom Inspector
  2. The DrawDefaultInspector Function
  3. Adding Buttons to a Custom Inspector

Community Posts

  1. MonoDevelop's Debugger
  2. Good Coding Practices in Unity
  3. Unity Editor Extensions – Menu Items
  4. Creating Meshes

Project Architecture

  1. AssetBundles and the AssetBundle Manager
  2. Mastering Unity Project Folder Structure - Version Control Systems

Getting Started with Unity Development using Visual Studio

  1. Installing Tools for Unity Development
  2. Building your first Unity Game with Visual Studio
  3. Editing Unity games in Visual Studio
  4. Debugging Unity games in Visual Studio
  5. Graphics debugging Unity games in Visual Studio
  6. Taking Unity games to Universal Windows Platform
  7. Testing Unity games on Android in Visual Studio

Live Sessions on Scripting

  1. Scripting Primer and Q&A
  2. Scripting Primer and Q&A - Continued
  3. Scripting Primer and Q&A - Continued (Again)
  4. Persistence - Saving and Loading Data
  5. Object Pooling
  6. Introduction to Scriptable Objects
  7. How to communicate between Scripts and GameObjects
  8. Coding in Unity for the Absolute Beginner
  9. Sound Effects & Scripting
  10. Editor Scripting Intro
  11. Writing Plugins
  12. Property Drawers & Custom Inspectors
  13. Events: Creating a simple messaging system
  14. Using Interfaces to Make a State Machine for AI
Got it

We’ve updated our Terms of Service and software agreement to reflect recent changes to our business model. We’ve also updated our Privacy Policy to better reflect our current data collection and use practices.

We use cookies to ensure that we give you the best experience on our website. Click here for more information.