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.
Desafio
DifícilO 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
anglee a seta para baixo o diminui, aturnSpeedgraus por segundo, nunca abaixo de 10 nem acima de 60. A cada quadro, defina a rotação do cano comoQuaternion.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
ballsfor maior que 0: crie-a 1 unidade à frente do centro do cano, ao longo do cano, impulsione-a com um Impulse depowerao longo do cano, subtraia 1 deballse registre o que restou, comoBalls 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
MovePositionaspeedunidades por segundo e faça-o voltar sempre que se afastarrangeunidades do ponto de partida. - Quando uma bola (com a tag
Ball) atingir o alvo, registre o nome do alvo ehit!, comoTarget2 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
}
}
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