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.
Desafio
FácilO 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úblicoint AddAmmo(int amount). Ele pega deamounto máximo que couber dentro demaxAmmo, registra o novo total, comoAmmo: 7, e retorna quanto pegou. - Em
AmmoCrate.cs, quando o jogador entrar em uma caixa, ofereça ao Blaster oamountda 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
}
}
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
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para Coletar