Menu
CoddyTech

Chegue à base

Lição 3 de 25 do curso Jogo de Unity: Defesa de Torres da Coddy.

Um inimigo no último ponto de passagem chegou à base: ele desaparece, e a base perde vidas. As vidas pertencem ao GameManager. Em breve, os inimigos serão criados a partir de prefabs, e um prefab não pode apontar para o GameManager na cena, então o inimigo envia um aviso por meio de um evento estático. Ele pertence à classe Enemy, então o GameManager se inscreve uma vez e recebe os avisos de todos os inimigos, inclusive daqueles criados mais tarde. O inimigo o dispara com ReachedBase?.Invoke(this);: o ? ignora a chamada quando ninguém está ouvindo, e this informa ao ouvinte qual tipo conseguiu passar.

void OnEnable()
{
    Enemy.ReachedBase += OnReachedBase;
}

void OnDisable()
{
    Enemy.ReachedBase -= OnReachedBase;
}

Um evento estático existe enquanto o jogo durar, então cada += precisa do seu -=: um GameManager destruído que nunca se desinscreveu ainda seria chamado.

challenge icon

Desafio

Fácil

Os inimigos que chegam à base custam vidas.

  1. Em EnemyData, adicione public int damage;.
  2. Em Enemy, adicione public static event Action<Enemy> ReachedBase; (using System;). No último ponto de passagem, dispare o evento e destrua o inimigo.
  3. Em GameManager, adicione [SerializeField] private int startLives = 20; e private int lives;, definidos em Start. Inscreva-se como acima; OnReachedBase subtrai enemy.data.damage das vidas.

Pressione “Jogar”: os dois inimigos desaparecem na base. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

// Vem depois: vidas, dinheiro, o HUD, vitória e derrota.
public class GameManager : MonoBehaviour
{
}

Todas as lições de Jogo de Unity: Defesa de Torres

Pratique por conta própria: Playground de Unity