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.
Desafio
FácilOs inimigos que chegam à base custam vidas.
- Em
EnemyData, adicionepublic int damage;. - Em
Enemy, adicionepublic static event Action<Enemy> ReachedBase;(using System;). No último ponto de passagem, dispare o evento e destrua o inimigo. - Em
GameManager, adicione[SerializeField] private int startLives = 20;eprivate int lives;, definidos em Start. Inscreva-se como acima;OnReachedBasesubtraienemy.data.damagedas 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