'Is that a good usecase of delegates and events in Unity?

I just started learning Unity and wanna try to use events/delegates in FlappyBird game.

Flappy bird screenshot

As on this pic, I need to replace text with current score + 1, when the bird triggers collider between pipes.

public class BirdController : MonoBehaviour
{   
 private SpriteRenderer sr;
 private Rigidbody2D rigidBody;
 private Animator anim;

 [SerializeField]
 private float movementXForce, movementYForce, rotationSpeedUp, 
 rotationSpeedDown;

 private float lastPosY;
 float rotation;


 private string FLY_ANIMATION = "fly";

 private void Awake() {
    sr = GetComponent<SpriteRenderer>();
    rigidBody = GetComponent<Rigidbody2D>();
    anim = GetComponent<Animator>();
    lastPosY = transform.position.y;
 }
 // Start is called before the first frame update
 void Start()
 {
    
 }

 // Update is called once per frame
 void Update()
 {
     fly();
     moveRight();
     animFly();
 }

 void fly()
 {
     if (Input.GetButtonDown("Jump")) {
        rigidBody.AddForce(new Vector2(0f, movementYForce), 
        ForceMode2D.Impulse);
        lastPosY = transform.position.y; 
    }

    if (rigidBody.velocity.y < 0 && rigidBody.rotation > -30) {
        rotation = -1f * rotationSpeedDown;
        transform.Rotate(Vector3.forward * rotation);
    } else if (rigidBody.velocity.y >= 0 && rigidBody.rotation < 30) {
        rotation = 1f * rotationSpeedUp;
        transform.Rotate(Vector3.forward * rotation);
    }
}

void moveRight()
{
    transform.position += new Vector3(1f, 0f, 0f) * Time.deltaTime * 
    movementXForce;
}

void animFly()
{
    if (lastPosY < transform.position.y) {
        anim.SetBool(FLY_ANIMATION, true);
    } else {
        anim.SetBool(FLY_ANIMATION, false);
    }
}

private void OnTriggerEnter2D(Collider2D other) {
    if (other.CompareTag("Ground") || other.CompareTag("Trap")) {
        Destroy(gameObject);
    }
}

private void OnTriggerExit2D(Collider2D other) {
    if (other.CompareTag("Score")) {
        
    }
}

}

I am about to add extra field in BirdController, something like

public delegate void OnTriggerScoreLine();
public static event OnTriggerScoreLine onTriggerScoreLine;

Then in OnTriggerExit2D I will

if (onTriggerScoreLine != null) {
   OnTriggerScoreLine();
}

After that I will create new script ScoreController and there I will subscribe onTriggerScoreLine on method that will change the score text on score + 1 and also static scoreValue variable

And I just wanted to ask if I correctly understood delegates and events. Is it a good example of its using? Thanks:)



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source