Menu
CoddyTech

Campo de Tiro de Canhão

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

Um canhão está em uma extremidade de um campo de tiro, e três alvos deslizam de um lado para o outro pelo campo a diferentes distâncias. Você inclina o cano para cima e para baixo para alcançar cada distância e sincroniza cada disparo para quando um alvo cruzar a linha de tiro. Uma bola que acerta um alvo o derruba e é consumida; qualquer outra coisa que esbarre em um alvo o deixa intacto. Os alvos são corpos cinemáticos, então os impactos nunca os empurram, e o canhão tem cinco bolas.

Escreva dois scripts: Cannon no cano e Target em cada alvo.

challenge icon

Desafio

Difícil

O Inspector fornece Cannon ballPrefab (um Rigidbody: o prefab Ball, massa 2, com a tag Ball), angle (30), turnSpeed (40), power (30) e balls (5).

  • A seta para cima aumenta angle e a seta para baixo o diminui, a turnSpeed graus por segundo, nunca abaixo de 10 nem acima de 60. A cada quadro, defina a rotação do cano como Quaternion.Euler(-angle, 0, 0): no Unity, um ângulo x positivo inclina a frente para baixo, então o sinal de menos a inclina para cima.
  • A barra de espaço dispara uma bola enquanto balls for maior que 0: crie-a 1 unidade à frente do centro do cano, ao longo do cano, impulsione-a com um Impulse de power ao longo do cano, subtraia 1 de balls e registre o que restou, como Balls left: 4. Sem bolas restantes, a barra de espaço não faz nada.

cada alvo tem um Rigidbody cinemático, e o Inspector fornece Target speed e range (2 e 3 para Target1).

  • A cada passo de física, mova o alvo ao longo de x com MovePosition a speed unidades por segundo e faça-o voltar sempre que se afastar range unidades do ponto de partida.
  • Quando uma bola (com a tag Ball) atingir o alvo, registre o nome do alvo e hit!, como Target2 hit!, e destrua tanto o alvo quanto a bola. Qualquer coisa que não seja uma bola o deixa intacto.

Pressione Play e derrube os três alvos, depois Check.

Experimente você mesmo

using UnityEngine;

public class Cannon : MonoBehaviour
{
    [SerializeField] private Rigidbody ballPrefab;
    [SerializeField] private float angle = 30f;
    [SerializeField] private float turnSpeed = 40f;
    [SerializeField] private float power = 30f;
    [SerializeField] private int balls = 5;

    void Update()
    {
        // mire com as setas para cima e para baixo, atire com Space
    }
}
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