Menu
CoddyTech

Top Atış Poligonu

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 61 / 63.

Bir atış poligonunun bir ucunda bir top bulunur ve üç hedef, farklı mesafelerde poligon boyunca bir yandan diğer yana kayar. Her mesafeye ulaşmak için namluyu yukarı ve aşağı eğersin ve her atışı, hedef ateş hattını geçtiği ana denk getirirsin. Hedefe çarpan bir top hedefi devirir ve kendisi de kullanılır; hedefe çarpan diğer her şey ise hedefi olduğu gibi bırakır. Hedefler kinematik cisimlerdir, bu yüzden çarpmalar onları asla itmez ve topta beş mermi bulunur.

İki betik yaz: Namluda Cannon ve her hedefte Target.

challenge icon

Görev

Zor

Inspector, Cannon'a ballPrefab (bir Rigidbody: Ball prefab'ı, kütlesi 2, etiketi Ball), angle (30), turnSpeed (40), power (30) ve balls (5) değerlerini verir.

  • Yukarı ok angle değerini artırır, aşağı ok azaltır; saniyede turnSpeed derece hızla değiştirir ve değer hiçbir zaman 10'un altına ya da 60'ın üstüne çıkmaz. Her karede namlunun dönüşünü Quaternion.Euler(-angle, 0, 0) olarak ayarla: Unity'de pozitif bir x açısı ön kısmı aşağı eğer, bu yüzden eksi işareti namluyu yukarı kaldırır.
  • balls 0'dan büyükken Space bir top ateşler: topu namlunun merkezinin 1 birim önünde, namlu doğrultusunda oluştur; namlu doğrultusunda power gücünde bir Impulse uygula; balls değerini 1 azalt ve kalan sayıyı Balls left: 4 olarak kayda geçir. Top kalmadığında Space hiçbir şey yapmaz.

Her hedefin kinematik bir Rigidbody'si vardır ve Inspector, Target için speed ve range değerlerini verir (Target1 için 2 ve 3).

  • Her fizik adımında hedefi MovePosition ile x ekseninde saniyede speed birim hızla hareket ettir ve başlangıç noktasından range birim uzaklaştığında yönünü tersine çevir.
  • Ball etiketli bir top hedefe çarptığında hedefin adını ve hit! ifadesini Target2 hit! olarak kayda geçir ve hem hedefi hem de topu yok et. Top olmayan hiçbir şey hedefe dokunmaz.

Play'e bas ve üç hedefin hepsini de devir, ardından Check'e bas.

Kendin dene

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()
    {
        // yukarı ve aşağı ok tuşlarıyla nişan al, Space ile ateş et
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Fizik ve Oynanış bölümündeki tüm dersler