Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, Berkapro kanalında yayınlanan bir Unity oyun geliştirme eğitim serisidir. Eğitmen, izleyicilerin oyunculuğuyla seçtiği Zigzag oyununun Unity platformunda nasıl yapılacağını adım adım göstermektedir.
- Video, üç boyutlu bir Unity projesi oluşturma sürecini kapsamlı şekilde ele almaktadır. Eğitim, temel oyun yapısının oluşturulmasından başlayarak, top hareketi programlama, zemin spawnlama, kamera takibi, zemin silme, top düşme algılama ve skor sistemi oluşturma konularını içermektedir. Her bölümde C# scriptleri kullanılarak oyun mekanikleri detaylı olarak kodlanmaktadır.
- Eğitim boyunca, oyunun zorlaşması için top hızının artması, zeminlerin rastgele spawnlanması, kameranın topu takibi ve skor sisteminin oluşturulması gibi önemli oyun mekanikleri adım adım gösterilmektedir. Ayrıca, performans için zeminlerin belirli bir süre sonra silinmesi ve oyunun görsel kalitesini artırmak için zeminlerin düşmesi gibi detaylar da kodlanmaktadır.
- 00:02Zigzag Oyunu Projesinin Başlangıcı
- Videoda Unity'de Zigzag oyununun nasıl yapılacağı anlatılacak.
- Oyun üç boyutlu olarak tasarlanacak, bu yüzden projenin 3D olarak açılması gerekiyor.
- Oyunun mantığı, topun zeminler üzerinde zikzak çizerek ilerlemesi şeklinde.
- 01:09Zeminlerin Oluşturulması
- Oyun için önce bir küp şeklinde 3D obje oluşturulup, x ve z uzunlukları 3 olarak ayarlanarak spawn zemin oluşturuluyor.
- Spawn zeminin üzerine yeni zeminler spawnlanacak ve top bu zeminler üzerinde ilerleyecek.
- Zeminler adında boş bir obje oluşturulup, bu objenin içine 1x1'lik küpler eklenecek.
- 02:47Zeminlerin Konumlandırılması
- Spawn zeminin ortasına bir küp eklendiği ve pozisyonu x=-1 ve z=2 olarak ayarlanarak spawn zeminin ucuna yerleştirildi.
- Top spawn zemininden başlayacak ve yeni zeminlerin solunda veya sağında zikzak çizerek ilerleyecek.
- Skybox'ın rengi gri olarak değiştiriliyor.
- 04:15Materyallerin Oluşturulması
- Materyaller adında yeni bir klasör oluşturulup, spawn zemin için kırmızı renkli bir materyal oluşturuluyor.
- Yeni zeminler için de farklı bir materyal oluşturulup, spawn zeminin rengine benzer ancak daha açık bir renk veriliyor.
- Kamera bakış açısı ayarlanarak oyun ekranı düzenleniyor.
- 06:58Topun Oluşturulması
- Top için bir küre oluşturulup, spawn zeminin tam ortasına yerleştiriliyor.
- Top için siyah renkli bir materyal oluşturulup, smoothness değeri 5'ten 3'e düşürüldüğü için daha mat bir görünüm alıyor.
- Topun gölgesi kapatılıyor ve yeni bir script dosyası oluşturuluyor.
- 09:00Topun Hareketi İçin Vektör ve Hız Değişkenleri
- Topun vektörünü atayaraktan pozisyon değerlerine ekleyerek gideceği yönü seçmek için bir Vector3 değişkeni tanımlanıyor.
- Topun hızını ayarlamak için bir float hız değeri oluşturuluyor ve bu değer Unity içerisinden değiştirilebilecek şekilde public olarak tanımlanıyor.
- Start fonksiyonunda yön değeri Vector3.forward olarak atanıyor, böylece oyun başlangıcında top ileri doğru gitmesi sağlanıyor.
- 11:37Topun Yön Değiştirme Mekanizması
- Update fonksiyonunda Input.GetMouseButtonDown(0) ile sol tık kontrolü yapılıyor ve topun yönü değiştiriliyor.
- Top ileri gidiyorsa sola, sola gidiyorsa sağa dönmesi için if koşulları kullanılıyor.
- Vector3.left ve Vector3.forward hazır değerleri kullanılarak topun yönü değiştiriliyor.
- 15:19Topun Hareketi ve Script Uygulaması
- FixedUpdate fonksiyonunda topun hareketi hesaplanıyor: Vector3 hareket = yön * Time.deltaTime * hız.
- Topun pozisyonu transform.position += hareket ile güncelleniyor.
- Script Unity'e sürükleniyor ve hız değeri ayarlanarak oyun test ediliyor.
- 18:43Zemin Spawner Scripti
- Bir sonraki adım olarak zeminleri rastgele spawnlamak için yeni bir script (ZeminSpawner) oluşturuluyor.
- ZeminSpawner script'i için yeni bir fonksiyon (zeminSpawnla veya zeminOluştur) oluşturuluyor.
- Her yeni zeminin, oyun içerisindeki son zeminin ucuna eklenmesi gerekiyor.
- 20:37Zemin Oluşturma ve Spawnlama
- Son zeminin hangi zemin olduğunu anlayabilmek için kod içerisinde "public GameObject sonZemin" tanımlanıyor ve Unity'de ilgili obje sürükle-bırak yöntemiyle atanıyor.
- Objeyi spawnlamak için "Instantiate" komutu kullanılıyor, bu komutun üç aşaması vardır: hangi objeyi spawnlayacağımızı, spawnlanacağı lokasyonu ve rotasyon değerini belirtmek.
- Yeni zemin, son zemin objesinin transform position'ına Vector3.forward eklenerek spawnlanıyor ve rotasyonu son zeminin rotasyonuna eşitleniyor.
- 25:18Zeminlerin Rastgele Konumda Oluşturulması
- Zeminlerin düz çizgide değil, rastgele konumda (sola veya sağa) spawnlanması için Vector3 yönü oluşturuluyor.
- Random.Range(0, 2) ile 0 veya 1 arasında rastgele bir değer seçiliyor, bu değer 0 ise yön Vector3.left, 1 ise Vector3.forward olarak ayarlanıyor.
- Bu şekilde yeni zemin, son zeminin ya önüne ya da soluna spawnlanıyor ve zikzak şeklinde rastgele bir yapı oluşuyor.
- 30:00Kameranın Topu Takip Etmesi
- Top düşerse kameranın da rotasyon değişmesini engellemek için kamerayı topun içine yerleştirmek yerine script kullanarak takip etmesi sağlanacak.
- Kamera takip scripti oluşturularak önce topun pozisyonu kaydedilecek, ardından top ile kamera arasındaki fark hesaplanacak.
- Kameranın pozisyonuna bu fark eklenerek kamera, topun pozisyonuna göre hareket edecek.
- 32:07Kamera Takibi Kodu
- Kamera, topun konumundan belli bir mesafeden takip edecek şekilde kodlanıyor.
- Kamera pozisyonu, topun konumuna eklenen bir "fark" vektörü ile hesaplanıyor.
- Oyun başladığında, mevcut pozisyon ile topun konumu arasındaki fark hesaplanıp kaydediliyor.
- 34:28Kamera Takibi Uygulaması
- Yazılan kod Main Kamera'nın içerisine ekleniyor ve topun transform değeri atanıyor.
- Oyun çalıştırıldığında kamera topu takip ediyor ancak rotasyonu topla beraber değişmiyor.
- Kamera sadece topun pozisyonunu takip ediyor ve araya mesafe eklenerek topu yukarıdan görebilmek sağlanıyor.
- 36:12Sonsuz Zemin Oluşturma
- Oyun başlangıcında sadece belirli sayıda zemin oluşturuluyor, bu zeminler bittiğinde oyuncu düşüyor.
- Her zeminden ayrıldığında yeni bir zemin oluşturulacak, yılan oyunu gibi bir zemin kuyruğu oluşacak.
- Top Hareketi scriptine "OnCollisionExit" fonksiyonu eklenerek zeminden ayrıldığında yeni zemin oluşturulacak.
- 38:36Script Arası Etkileşim
- Top Hareketi scriptinde Zemin Spawner script'i public olarak tanımlanarak erişilebilir hale getiriliyor.
- Zemin Spawner scriptindeki "ZeminOluştur" fonksiyonu, Top Hareketi scriptinden çağrılıyor.
- Eğer temastan ayrılan objenin etiketi "zemin" ise, yeni bir zemin oluşturuluyor.
- 42:04Oyun Optimizasyonu
- Başlangıçta spawnlanan zemin sayısı 10'dan 15'e artırılıyor.
- Oyun başlangıcında çok fazla zemin oluşturmak (örneğin 1500) oyunu kasıracak ve sonunda zemin bittiğinde oyuncu düşecek.
- Zamanla yeni zeminler oluşturuluyor ve ekranın dışına çıkan objelerin silinmesi ileride yapılacak.
- 43:45Zeminleri Silmek İçin Coroutine Kullanımı
- Zeminlerden ayrıldığımızda hemen silmek yerine, belirli bir süre bekleyip sonra silmek istiyoruz ki ekranda görüntü kirliliği oluşmasın.
- Bu işlem için coroutine kullanacağız, coroutine'lar zaman içeren kodları yazmak için kullanılır.
- Zemin silme fonksiyonu tanımlanırken "IEnumerator" ile başlanır ve "yield return new WaitForSeconds(3)" ile 3 saniye bekleme süresi belirlenir.
- 46:39Zemin Silme Fonksiyonunun Çağrılması
- Zemin teması kesildiğinde çalışan kodlar içinde "StartCoroutine" ile zemin silme fonksiyonu çağrılır.
- Fonksiyonun içine "collision.gameObject" ile temas edilen obje (zemin) gönderilir.
- Oyun test edildiğinde, zeminlerden ayrıldıktan sonra 3 saniye sonra silinir ve bu işlem ekranda görünmez şekilde gerçekleşir.
- 49:31Topun Düşme Durumunu Kontrol Etme
- Topun düşüp düşmediğini kontrol etmek için "public static bool düştü mü" değişkeni tanımlanır.
- Topun y değerinin 0.5'in altına düştüğünde "düştü mü" değişkeni true yapılır.
- Top düşerse, "Update" fonksiyonunda "return" ile alttaki kodların çalışması durdurulur ve top hareket etmez.
- 50:58Kameranın Topu Takip Etmesini Durdurma
- Top düşerse kameranın takip etmesini durdurmak için, kamera kodunda "if (TopHareketi.düştü mü == false)" koşulu eklenir.
- Top düşerse (true) kamera takip etmez, düşmezse (false) takip eder.
- Konsol ekranında "Debug.Log" ile "Düştüm" yazdırılarak düşme durumu kontrol edilebilir.
- 54:03Oyunu Zamanla Zorlaştırma
- Oyunun zamanla zorlaştırılması için, top her hareket ederken (ekrana tıklanınca) hızı belirli bir seviyede artması planlanıyor.
- Bu işlem için "public float eklenecekHız" değişkeni tanımlanabilir.
- 55:02Oyun Hız Ayarları
- Oyunda sol tıklandığında işlemler gerçekleşir ve hız artışı için "hız += eklenecek hız * Time.deltaTime" formülü kullanılır.
- Time.deltaTime her cihazda aynı performansı sağlar, bu nedenle kodlarda her zaman eklenmesi önerilir.
- Topun başlangıç hızı 2 olarak ayarlanmıştır ve her tıklamada hız değeri artar.
- 56:07Hız Artışı Sistemi
- Hız artışı için eklenecek değer artırıldığında (örneğin 0.5 yerine 2), hızın artışı daha hızlı gözle görülür hale gelir.
- Oyunda ilerledikçe topun hızı artacağından oyun zorlaşır.
- Her zikzak yapıldığında (tıklandığında) hız artar ve bu sayede oyun zorlaşır.
- 58:53Zeminlerin Düşme Animasyonu
- Zeminlerden geçtikten sonra zemini düşürmek için "OnTriggerExit" fonksiyonuna "gameObject.AddComponent<Rigidbody>();" kodu eklenebilir.
- Bu kod, temas edilen zemine Rigid Body komponenti ekleyerek zeminin aşağı doğru düşmesini sağlar.
- Zeminlerden geçtikten sonra düşme animasyonu eklenerek oyun daha hoş hale getirilir.
- 1:00:55Skor Sistemi Oluşturma
- Skor sistemi için yeni bir C# script oluşturulur ve "public static int skor" değişkeni tanımlanır.
- Skor değişkeni statik olarak tanımlandığı için farklı scriptlerden erişilebilir hale gelir.
- Oyun başlangıcında skor sıfırlanır.
- 1:01:52Skor Görüntüleme
- Skoru ekranda görüntülemek için Canvas oluşturulur ve Scale Mode ayarı "Scale with Screen Size" olarak ayarlanır.
- Canvas içinde Text oluşturulur ve "Skor" olarak adlandırılır.
- Text'in Best Fit özelliği kullanılarak, skor arttıkça yazı boyutu otomatik olarak küçülerek ekrana sığması sağlanır.
- 1:05:08Unity'de UI Paketi Kullanımı
- Unity'de UI (User Interface) paketini kullanmak için "using UnityEngine.UI" ifadesini script'e eklemek gerekiyor.
- Bu paket, canvas içindeki UI elemanlarını script'ten tanımlayabilmemizi sağlar.
- Default olarak bu paket gelmediği için, UI ile ilgili işlemler yapmak istiyorsak manuel olarak eklememiz gerekiyor.
- 1:05:40Skor Değerini Ekrana Yansıtma
- Skor değerini ekranda göstermek için "public Text scortext" şeklinde bir text değişkeni tanımlanıyor.
- Update fonksiyonunda "scortext.text = skor.ToString();" kodu ile integer skor değeri string'e dönüştürülerek text'e atanıyor.
- Bu şekilde skor değeri anlık olarak ekranda güncellenecek.
- 1:07:13Skor Arttırma Mantığı
- Skoru artırmak için ekrana her tıklanıldığında değil, her bir zeminden ayrıldığında artırılması daha adil olacaktır.
- Ekrana her tıklanıldığında skoru artırmak, kullanıcıların zeminden düşmeden skor artırmalarına izin verebilir.
- Skoru artırmak için "skor++" veya "skor = skor + 1" kodu kullanılabilir.
- 1:08:42Skor Sisteminin Test Edilmesi
- Skor script'i kamera objesine atanıyor ve scortext alanı canvas'taki text'e bağlanıyor.
- Oyun çalıştırıldığında her bir zeminden ayrıldığımızda skor artıyor, ekrana tıklamak skoru artırmıyor.
- Bu şekilde basit bir skor sistemi oluşturulmuş oluyor.