Menu
CoddyTech

Itens coletáveis

Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 17 de 63.

Um item coletável é um gatilho com um script próprio. Quando algo entra, o item coletável verifica se é o jogador, aplica seu efeito e se destrói. O script do jogador mantém o resultado e oferece um método público para isso. Este kit de saúde cura qualquer objeto que tenha um script Health:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs, no jogador
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

other.TryGetComponent(out Health health) é false para uma caixa que desliza para dentro do kit, então somente um objeto com um script Health pode pegá-lo, e um jogador com a saúde no máximo deixa o kit para depois. O kit encontra o jogador por meio de other, então nenhum kit precisa de uma referência no Inspector, e um nível pode ter cinquenta deles. Heal é public porque outro script o chama, e o limite de 100 fica em Health, o único lugar que controla hp. Destroy(gameObject) remove o kit; Destroy(other.gameObject) removeria o jogador.

challenge icon

Desafio

Fácil

O jogador carrega um Blaster: ammo (4 no início) e maxAmmo (10). As setas o movimentam e a tecla Space dispara, e ambos são exibidos. Faça as caixas de munição reabastecerem a munição:

  • Em Blaster.cs, adicione um método público int AddAmmo(int amount). Ele pega de amount o máximo que couber dentro de maxAmmo, registra o novo total, como Ammo: 7, e retorna quanto pegou.
  • Em AmmoCrate.cs, quando o jogador entrar em uma caixa, ofereça ao Blaster o amount da caixa e subtraia o que ele pegou. Uma caixa que ficar vazia é removida; uma que ainda tiver munição permanece com o que restou, para uma visita posterior.

A primeira caixa contém 3 e a segunda, 5. Pressione Jogar, caminhe para a direita, dispare alguns tiros e volte para a segunda caixa; depois, pressione Verificar.

Experimente você mesmo

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // O Blaster do jogador pega o que couber; a caixa guarda o restante e desaparece quando fica vazia
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Física e jogabilidade