Cohorts
  • Discover
  • About Us
  • Blog
  • Patika.dev
  • Web3

Unity Junior Programmer

Unity'ye Giriş
Unity'yi İndir

Ünite 1-Giriş
3D Motorlarınızı çalıştırın
Ders Klasörü ve Yeni Proje Oluşturun
Assetleri içe aktarın ve Prototip 1'i açın
Aracınızı sahneye ekleyin
Bir engel ekleyin ve yeniden konumlandırın
Kameranızı bulun ve oyunu çalıştırın
Kamerayı aracın arkasına taşıyın
Arayüz düzenini özelleştirin
Ders Özeti

Giriş
İlk komut dosyanızı oluşturun ve uygulayın
Güncelleme yöntemine bir yorum ekleyin
Araca ileri bir hareket verin
İlerlemek için bir Vector3 kullanın
Aracın hızını özelleştirin
Nesnelere RigidBody bileşenleri ekleyin
Engelleri çoğaltın ve konumlandırın
Ders Özeti

Giriş
Aracınız için bir hız değişkeni ekleyin
Kamera için yeni bir script oluşturun
Kamera konumuna bir ofset ekleyin
Ofseti bir Vector3 değişkenine dönüştürün
LateUpdate ile Kamerayı Pürüzsüzleştirin
playmod’un renk tonunu düzenleyin
Ders Özeti

Sürücü Koltuğuna Geçin
Aracın sola/sağa hareket etmesine izin verin
Girdilerde temel sol/sağ hareketi
Araç hızının kontrolünü elinize alın
Aracı kaydırmak yerine döndürmek
Kodunuzu ve hiyerarşinizi temizleyin
Ders Özeti

Challenge 1 - Düzlem Programlama

Bonus Özellikler 1 - Çalışmanızı Paylaşın
Kolay: Engel piramitleri
Orta: Karşıdan gelen araçlar
Zor: Kamera değiştirici
Uzman: Yerel çok oyunculu

Project Design Document
Understand what a Personal Project
Review Design Doc examples
Complete your Project Concept V1
Complete your Project Timeline
Complete your MVP sketch
Ders Özeti

Üretim aşamalarını özetleyin
Başlık
Tasarım belgeleri ve proje planları
Projeleri yönetmek ve ilerlemeyi izlemek
Proje yönetiminizi ve izlemenizi destekleyecek araçları belirleyin
Yayınlamaya hazırlanıyor
Projenizi yayınlamak

Oyuncu Konumlandırma
Ünite 2 - Giriş
Prototip 2 için yeni bir Proje oluşturun
Oyuncuyu, Hayvanları ve Yiyecekleri Ekleyin
Kullanıcının yatay girişini alın
Oyuncuyu soldan sağa hareket ettirin
Oyuncuyu sahada tut
Kodunuzu ve değişkenlerinizi temizleyin
Ders Özeti

Yiyecek Uçuşu
Merminin ileriye doğru uçmasını sağlayın
Mermiyi hazır bir yapı haline getirin
Boşluk çubuğuna basmayı test edin
Boşluk çubuğuna basarak mermiyi başlatın
Hayvanları prefabrike yapın
Mermileri ekran dışında yok edin
Ekran dışındaki hayvanları yok edin
Ders Özeti

Rastgele Hayvan Kaçışması
Bir spawn (yumurtlama) yöneticisi oluşturun
S'ye basıldığında bir hayvan doğurun
Diziden rastgele hayvanlar üretin
Doğma yerini rastgele belirleyin
Kamera perspektifini (açısını) değiştirin(değiştirmek)
Ders Özeti

Çarpışma Kararları
Hayvanları yumurtlatmak için yeni bir yöntem yapın
Hayvanları belirli aralıklarla yumurtlatın
Çarpıştırıcı ekleyin ve bileşenleri tetikleyin
Çarpışma anında nesneleri yok edin
Bir "Oyun Bitti" mesajını tetikleyin
Ders Özeti

Challenge 2 - Fetch Oyunu
Daha Fazla Challenge

Bonus Features 2 Genel Bakış
Kolay: Dikey oyuncu hareketi
Orta: Agresif hayvanlar
Zor: Oyun kullanıcı arayüzü
Uzman: Hayvan açlığı çubuğu
İpuçları ve çözüm önerileri

Primitive’lerle Yeni Proje
Yeni bir Proje oluşturun ve sahnenizi yeniden adlandırın
Bir arkaplan düzlemi oluşturun
Yeni bir malzeme ile primitive bir Oyuncu oluşturun
Proje türüne göre kamerayı konumlandırın
Düşmanlar, engeller, atılan cisimler ve malzemeler
nity Package yedekleme dosyasını dışa aktarın
Ders Özeti

Lab 3 Oyuncu Kontrolü
1 PlayerController oluşturun ve kodunuzu planlayın
Kullanıcı girdisinden temel hareket
Oyuncunun hareketini sınırlayın
Kod Temizleme ve Yedeklemeyi Dışa Aktarma
Ders Özeti

Ses ve Efektler Giriş
Zıplama Kuvveti Giriş
Prototipi aç ve arka planı değiştir
Bir oyuncu karakteri seçin ve ayarlayın
Oyuncunun başlangıçta zıplamasını sağlayın
Boşluk çubuğuna basıldığında oyuncunun zıplamasını sağlayın
Atlama kuvvetini ve yerçekimini değiştirin
Oyuncunun çift zıplamasını engelle
Bir engel yapın ve sola hareket ettirin
Bir Spawn Manager oluşturun
Aralıklarla engeller ortaya çıkarın
Ders Özeti

Dünyayı Hızlandırın
Arka planı tekrarlamak için bir komut dosyası oluşturun
Arka planın konumunu sıfırlayın
Collider ile arka plan tekrarını düzeltin
Trigger üzerinden yeni bir oyun ekleyin
gameOver'da MoveLeft'i durdurun
gameOver'da engellerin oluşmasını durdurun
Sınırlardan çıkan engelleri yok edin
Ders Özeti

Orada Öylece Durma
Oyuncunun animasyonlarını keşfedin
Oyuncunun başlangıçta koşmasını sağlayın
Bir atlama animasyonu ayarlayın
Atlama animasyonunu ayarlayın
Düşme animasyonunu ayarlayın
Oyuncunun baygın iken zıplamasını engelleyin
Ders Özeti

Parçacıklar ve Ses Efektleri
Bir patlama parçacığını özelleştirin
Parçacığı çarpışmada oynatın
Kir sıçratma parçacığı ekleyin
Kamera nesnesine müzik ekleyin
Ses Klipleri için değişkenleri bildirin
Zıplayınca Ve Çarpınca Ses Klibi Çalma
Ders Özeti

Genel Bakış
Uyarı

Bonus Özellikler 3 Genel Bakış
Kolay: Engelleri rastgele düzenleyin
Orta: Çift atlama
Zor: Atılma yeteneği ve puanı
Uzman: Oyun başlatma animasyonu
İpuçları ve çözüm yolu

Game Play Griş
Nereye Gittiğinizi İzleyin - Giriş
Proje oluştur ve sahneyi aç
Oynatıcıyı kurun ve bir doku ekleyin
Kamera için bir odak noktası oluşturun
Kullanıcı girişi ile odak noktasını döndürün
Oyuncuya ileri kuvvet ekleyin
Odak noktası yönünde hareket et
Ders Özeti

Oyuncuyu Takip Etmek Giriş
Bir Düşman ve Bir Fizik Materyali Ekleme
Oyuncuyu Takip Etmek İçin Düşman Komut Dosyası Oluşturma
Bir lookDirection Değişkeni Oluşturma
Düşman İçin Bir Doğma Yöneticisi (Spawn Manager) Oluşturma
Rastgele Doğma Noktası Oluşturma
return methodunu Bir Doğma Noktası Yapma
Ders Özeti

PowerUp ve CountDown
Bir PowerUp seçin ve hazırlayın
Çarpışmada PowerUp’ı yok edin
Düşmanı ve PowerUp’ı test edin
PowerUp ile ekstra geri tepme uygulayın
PowerUp için CountDown Rutini Oluşturunp
Bir güç açma göstergesi ekleyin
Ders Özeti

Düşman Dalgaları İçin For-Döngüleri
3 düşman oluşturmak için bir for döngüsü yazın
For-döngüsüne bir parametre verin
Düşmanlar eğer düşerlerse onları yok edin
Düşman sayısını (enemyCount) dalgalarla artırın
Yeni dalgalarla birlikte Powerups oluşturun
Ders Özeti

Genel Bakış
Uyarı

Bonus Özellikler 4 Genel Bakış
Kolay: Daha zorlu düşman
Orta: Güdümlü roketler
Zor: Sert saldır
Uzman: Boss savaşı

Temel Oynanış
Objelere temel hareket ver
Objeleri ekran dışında yok et
Obje çarpışmalarını işle
Objeleri prefab’lara dönüştür
SpawnManager'ın Prefabs oluşturmasını sağla
Ders Özeti

Kullanıcı Arayüzü Giriş
Tıklayıcı Fare - Giriş
Proje oluşturun ve 2B görünüme geçin
Good (İyi) ve Bad (Kötü) hedefleri oluşturun
Nesneleri rastgele havaya fırlatın
Dağınık kodu yeni metodlarla değiştirin
Game Manager içerisinde obje listesi oluşturun
Objelerin ortaya çıkması için bir coroutine oluşturun
Tıklama ve sensör yoluyla hedefleri yok edin
Ders Özeti

Skor Tutmak
Skor metni ekle ekranda konumlandırın
Puan Metninin özelliklerini düzenleyin
Puan metnini ve değişkeni başlat
Yeni bir UpdateScore yöntemi oluşturun
Hedefler yok edildiğinde puan ekleyin
Her hedefe bir puan değeri atayın
Parçacık patlaması ekleyin
Ders Özeti

Game Over Giriş
Game Over metin nesnesi oluşturun
GameOver metninin görünmesini sağla
GameOver fonksiyonu oluştur
Stop spawning and score on GameOver
Yeniden Başlat butonunu ekle
Yeniden başlatma butonunun çalışmasını sağlayın
Oyun bittiğinde yeniden başlat butonunu göster
Ders Özeti

Zorluk Nedir?
Başlık Metni ve Menü Butonları Oluşturma
Zorluk Seviyesi İçin DifficultyButton Scripti Ekleme
Butona Tıklandığında SetDifficulty Metodunu Çağırma
Yeni Butonlarınız ile Oyunu Başlatma
StartGame’de Başlık Ekranını Devre Dışı Bırakma
Zorluğu Değiştirmek İçin Parametre Atama
Ders Özeti

Genel Bakış
Uyarı

Bonus Özellikler 5 Genel Bakış
Kolay: Lives UI
Orta: Müzik sesi
Zor: Pause menüsü
Uzman: Tıkla-ve-kaydır

Assets kitaplığını içe aktarın ve göz atın
Oynatıcıyı yeni assetsla değiştirin
Assets mağazasına göz atın
Oyuncu olmayan tüm temel öğeleri değiştirin
Arka plan dokusunu değiştirin
Replace the background texture
Ders Özeti

Kullanıcı geri bildirimine ve testine giriş

Proje Optimizasyonu - Giriş
Değişken özellikleri
Unity Event Fonksiyonları
Object Pooling
Ders Özeti

Make the vehicle use forces
Prevent car from flipping over
Add a speedometer display
Add an RPM display
Prevent driving in mid-air
Lesson Recap
Sharing your Projects

ECS Hayatta Kalma Rehberi

Kariyer araştırması ve hazırlık

Portfolyolara Giriş

Junior Programmer: Sahne akışını ve verilerini yönetin
Başlık
Sürüm kontrolünü ayarla
Örnek projeyi keşfedin
Nesne yönelimli programlamanın ilkeleri
Bir sahne akışı oluşturun
Sahneler arasında veri kalıcılığı uygulayın
Oturumlar arasında veri kalıcılığı uygulayın

Gönderim: Yeni bir depoda veri kalıcılığı
7.5 Veri kalıcılığını uygulayın

Nesne yönelimli programlamada soyutlama

Nesne yönelimli programlamada kalıtım ve polimorfizm

Nesne yönelimli programlamada kapsülleme

Sorunları belirlemek için profil kodu

Job preparation: Junior Programmer

Sunum: Programlama teorisi iş başında

Sorunları belirlemek için profil kodu

Bu öğreticide, bir sahneyi analiz etmek ve optimizasyon darboğazlarının nerede meydana geldiğini belirlemek için Profiler'ı nasıl kullanacağınızı öğreneceksiniz.

Bu eğitimin sonunda şunları yapabileceksiniz:

  • Profiler penceresindeki CPU profil oluşturucuyu kullanarak en fazla CPU zamanını kullanan komut dosyası yöntemini (kullanmayan bir komut dosyası yöntemine karşı) belirleyin
  • Bir Update() çağrısında bir koleksiyondan verimli bir şekilde geçen bir döngüyü, Update() çağrısında aynı koleksiyondan geçen birçok döngüden ayırt edin
  • Bir senaryo verildiğinde, performans sorunlarına neden olabilecek olası sorunları (örneğin, çok fazla RigidBody bileşeni, çok fazla Çarpıştırıcı, çok fazla gölge vb.) tanıyın.
  • Unity'nin İstatistikler penceresini kullanarak çoklu sayı, doku boyutları veya ekrandaki çok fazla nesnenin neden olduğu performans sorunlarını araştırın
  • Gereksiz iç içe if deyimlerini tanımlayın

1. Adım: Genel Bakış

Projenizi sonlandırmaya ve yayınlamaya hazırlamaya çalışırken, yeniden düzenleme sırasında veya sonrasında kodunuzda kalan tüm darboğazları belirlemek ve çözmek önemlidir. Unity'nin Profil Oluşturma aracı, kare hızınızı düşürebilecek, bulunması zor sorunları bulmak için idealdir. Profiler, hangi komut dosyalarının çağrıldığı, belleğin nasıl ayrıldığı, görsellerin ekranda nasıl oluşturulduğu ve daha fazlası dahil olmak üzere, bir uygulamada kare kare tam olarak ne olduğuna dair ayrıntılı bir rapor üretir. Profiler'da projenizin performansını etkileyen her şeyi görebilirsiniz.

Projenizin performansı büyük ölçüde üzerinde çalıştığı bilgisayara bağlıdır; bu nedenle, projenizin profilini belirli hedef cihazınızda veya hedefinizin masaüstü gibi bir dizi desteklenen donanım varsa, farklı cihazlarla birden fazla cihazda profil oluşturmanız önemlidir. özellikler. Bu projeyi yeni bir üst düzey oyun bilgisayarında çalıştırırsanız, büyük olasılıkla çok yüksek kare hızları elde edersiniz, oysa yerleşik grafiklere sahip beş yıllık bir dizüstü bilgisayarda deneyim tamamen farklı olabilir.

Yaygın optimizasyon sorunlarını belirlemeyi kolaylaştırmak için, Profiler'ı ilk kez keşfederken gözden geçirmeniz için oldukça optimize edilmemiş bir sahne oluşturduk. Bunu akılda tutarak, bu eğitimde gördüğünüz sayıların muhtemelen kendi bilgisayarınızdakilerle tam olarak aynı olmayacağını unutmayın. Ancak, kare hızınızdan bağımsız olarak, komut dosyalarını optimize ettiğinizde ölçülebilir sonuçlar görebileceksiniz.

2. Adım: Sahneyi keşfedin

Profiler ile inceleyebileceğimiz bir performans sorunu örneğine bakalım. Daha önce de belirtildiği gibi, projenizde özel bir optimizasyon klasöründe bulunan, yalnızca bu eğitim için oluşturulmuş özel bir sahne kullanacağız.

  • Projede Optimizasyon klasörünü bulun ve Sahneler klasöründe Optimizasyon sahnesini açın.
  • Sahneyi ilk açtığınızda, yalnızca gri bir düzlem göreceksiniz. Hiyerarşide ayrıca bir OptimManager komut dosyası eklenmiş bir Manager GameObject göreceksiniz.
  • Oynat'a basın ve sahneyi izleyin.

figures

Alternatif metin: Rastgele yönlerde hareket eden 2000 forkliftin bulunduğu Optimizasyon sahnesinden oyun görünümü. Oyun İstatistikleri penceresi, sağ üst köşede 9.2 FPS kare hızı vurgulanmış olarak açılır.

  • Oynatma modunda, uçakta hepsi belirli bir sınır içinde dönen ve hareket eden binlerce forklift belirir. İstatistikler sekmesini açın ve bilgisayarınız için geçerli saniyedeki kare sayısını (FPS) not edin.
  • Oynatma modundan çıkın ve denetçideki OptimManager komut dosyasına bakın. Bu komut dosyası, forklift alanının üretilmesinden sorumludur. Forklift hazır yapısı için değişkeni, örnek sayısını ve sınırın boyutunu not edin.
  • Hiyerarşide Yönetici nesnesini seçin, ardından Optim Yöneticisi bileşeninde örnek sayısını 200 olarak değiştirin. Oynatma moduna yeniden girin ve FPS'nizdeki değişikliği gözlemleyin.

figures

Alternatif metin: Şu anda rastgele yönlerde hareket eden yalnızca 200 forkliftin bulunduğu Optimizasyon sahnesinden oyun görünümü. Oyun İstatistikleri penceresi, iyileştirilmiş 69,1 FPS kare hızı vurgulanmış olarak sağ üst köşede açıktır.

Sahnedeki forklift sayısının azalması genel FPS'yi artırıyor. Bir uygulamada kare hızının diğer her şeyden daha önemli olduğu bir durumda, bu uygun bir optimizasyon çözümü olabilir. Ancak, uygulama hem 2000 forklift hem de 60 FPS kare hızı gerektiriyorsa?

Bu gereksinimleri göz önünde bulundurarak, darboğazın tam olarak nerede meydana geldiğini anlamak önemlidir. İlk örnekte kare hızı, ekranda 10 kat daha fazla kafes olduğu için mi daha düşüktü? Hepsi hareket ettiği için mi? Başka bir şey mi? Cevabı bulmak size tam olarak neyi ele alacağınızı söyleyecektir.

Profil oluşturma, meydana gelen her şeyin ve her işlemin tam olarak ne kadar sürdüğünün bir anlık görüntüsünü verir, böylece kare hızınızı nasıl iyileştireceğiniz konusunda bilinçli bir karar verebilirsiniz.

3. Adım: Profil oluşturma verilerini toplayın

Şimdi kaputun altına bakalım ve Unity'nin bu sahnede ne işlediğini anlayalım.

  • OptimManager'da Örnek Sayısını 2000'e geri ayarlayın.
  • Pencere > Analiz > Profil Oluşturucu'yu seçerek Profil Oluşturucu'yu açın.
  • Profiler penceresini Proje pencerenizin yanına yerleştirin.
  • Şu anda Profiler tamamen boş çünkü sahne hakkında henüz hiçbir veri toplanmadı. Profil Oluşturucu, Oynatma modunu başlattığınızda çalışmaya başlar. Profiler'ın kayıt düğmesinin (kırmızı nokta) etkin olduğundan emin olun ve ardından Oynat'a basın.

figures

Alternatif metin: “Profil Bilgilerini Kaydet” düğmesinin vurgulandığı Profil oluşturucu penceresi.

  • Profiler, performans verilerinin renk kodlu bir tablosunu günlüğe kaydetmeye başlayacaktır. Bir veya iki saniye sonra Oynatma modundan çıkın. Artık, bu süre zarfında uygulamada meydana gelen her şeyin ayrıntılı bir taslağına sahipsiniz.

figures

Alternatif metin: Neredeyse tüm pencere açık mavi renkle doldurulmuş, CPU kullanımını gösteren Profiler penceresi, her karenin oluşturulmasının çok uzun sürdüğünü gösterir. Pencerede, belirli bir kareyi belirten, "94.57ms" etiketli dikey bir beyaz çizgi vardır; bu, karenin oluşturulmasının 94.57 ms sürdüğünü gösterir.

Profiler'ın üst yarısı, CPU Kullanımından başlayarak modüllere ayrılmıştır. Bu eğitimde kullanacağımız tek modül bu olacak.

Modül, çeşitli işlem kategorilerinin ve bunların CPU'yu nasıl kullandıklarının bir tablosunu içerir. Modülün sol tarafında bu kategoriler için bir renk tuşu bulunmaktadır. Ani artışlar, İşleme gibi bu işlem kategorilerinden birinin belirli bir çerçeve üzerinde çalışmak için daha fazla zaman harcadığını gösterir.

Mavi arka planın bir arka plan değil, çalışan komut dosyalarının bir temsili olduğuna dikkat edin! Bu çok yüksek seviyeden bile, senaryolarımızda bir şeylerin ters gittiğini söyleyebiliriz, çünkü senaryolar sahnenin kendisini oluşturmaktan bile çok daha fazla işlem gücü alıyorlar. Kısa süre içinde komut dosyalarını inceleyeceğiz.

4. Adım: Milisaniyelik bir bütçe oluşturun

Profiler'ın alt yarısı, her karede tam olarak ne olup bittiğinin görsel bir dökümünü gösterir. Profil Oluşturucu'nun alt yarısında çubuk grafik görselleştirmesini görmüyorsanız, Profil Oluşturucu Modülü bölümünün hemen altındaki açılır menüden Zaman Çizelgesi'ni seçin.

figures

Alternatif metin: Profiler penceresinin sol tarafının yarısında, “Zaman Çizelgesi” seçeneği seçili olarak bir açılır öğe vurgulanır.

CPU Kullanımı grafiğindeki beyaz dikey çizgi, uygulamada oynatılan bir kareyi temsil eder. Kullanımın çerçeveden çerçeveye nasıl değiştiğini görmek için CPU Kullanımı modülünde bu satırı sol tıklayın ve sürükleyin. CPU kullanımında ani artış olan bir çerçeve seçin.

figures

Alternatif metin: Profiler penceresinde tek bir çerçeve seçilir. Zaman Çizelgesi panelinde, CPU oluşturma süresi vurgulanır ve "CPU: 117.26ms" görüntülenir.

Yukarıdaki örnekte, CPU: 117.26ms (vurgulanmış) notasyonunu görebilirsiniz. Bu, bu çerçevedeki her şeyin tamamlanması için geçen milisaniye cinsinden toplam süreyi temsil eder.

Profil oluştururken, son kare hızı hedefine ulaşmanın anahtarı olduğu için bu milisaniyelik tamamlama oranına özellikle dikkat etmek istiyoruz. Hedef kare hızına bağlı olarak, kare başına belirli bir milisaniye bütçeniz olacaktır. Bunu hesaplamanın yolu şudur:

1000 ms / saniye başına hedef kare = ms bütçe

Bu nedenle, 60 FPS hedefine ulaşmak için her karenin milisaniye bütçesi 16'dır. Bu, şu anda profili çıkarılmakta olan karenin olması gerekenin yedi katından fazla olduğu anlamına gelir!

Adım 5: Profiler Zaman Çizelgesini Keşfedin

Profiler Zaman Çizelgesi'nin en üstünde iki alternatif etiket vardır: PlayerLoop ve EditorLoop. Bunları görmüyorsanız, yakınlaştırmak için kaydırma tekerleğinizi veya izleme dörtgeninizi kullanmanız gerekebilir. PlayerLoop, oyunun kendisinde çalışan her şeyi temsil ederken, EditorLoop, Editör'de uygulamayı çalıştırmak için olan her şeyi temsil eder. Bu durumda, son kullanıcımız Unity Editor'daki uygulamayı kullanmayacağından, EditorLoop'u yok saymak ve yalnızca PlayerLoop'ta olanlara odaklanmak güvenlidir.

PlayerLoop'un altında listelenen çubuklar, o çerçeve sırasında uygulamada olan her şeyi zamana göre azalan sırayla temsil eder. Profiler Zaman Çizelgesi, CPU Kullanım grafiğiyle eşleşecek şekilde renk koordinelidir. Büyük mavi çubuk, bu çerçevede büyük miktarda zaman alan, komut dosyasıyla ilgili belirli bir eylemin gerçekleştiğini gösterir.

figures

Alternatif metin: Profiler penceresinin Zaman Çizelgesi'nde açık mavi bir çubuk seçilir. Mavi çubuğun yanında, “OptimUnit.Update()” için bilgi görüntüleyen bir açılır arayüz bulunur.

Bu eylemin kaynağının OptimUnit betiği, özellikle de Güncelleme yöntemi olduğunu görmek için çubuğa tıklayın. Tamamlanması 98,27 ms sürer, bu da kendi başına milisaniye bütçemizi birçok kez aşar. Ayrıca, bu çerçevede çalışan bu komut dosyasının 2.000 örneğinin bulunduğunu unutmayın; bu, OptimManager komut dosyasında 2.000 forklift oluşturduğumuzu bildiğimiz için önemlidir. Her nasılsa, bu iki faktör ilişkili olmalıdır.

Senaryo neden 2.000 kez çalıştırılsın? Her forklift için bir örnek olmalıdır. OptimManager'da OptimUnit Prefabrik'i seçersek, OptimUnit komut dosyasının Prefabrik'in kendisine eklendiğini keşfederiz - bu, bu komut dosyasının gerçekten 2.000 kopyasının çalıştığı anlamına gelir.

Ardından, bu projeyi yavaşlatan tam kod satırlarını belirlememize yardımcı olması için Profiler'ı kullanabiliriz.

6. Adım: Profiler örnek yöntemlerini ekleyin

OptimUnit komut dosyası Güncelleme yönteminde çok şey oluyor, bu yüzden Profiler'dan biraz daha yardım alalım. Profiler.BeginSample ve Profiler.EndSample yöntemlerini ekleyerek kodun belirli bölümlerini profilleyebiliriz.

  • Komut Dosyaları klasöründe, Optimizasyon klasörünü bulun ve OptimUnit komut dosyasını açın.

Güncelleme yöntemi dört ayrı görevi yerine getirir: taşıma süresi, forklift hazır yapısını döndürme, forklift hazır yapısını taşıma ve Yönetici sınırını kontrol etme. Profiler'ın izlemesi için bu görevleri işaretleyelim.

  • BeginSample ve EndSample yöntemlerini, Update'in en üstündeki HandleTime yönteminin hemen üstüne ve altına ekleyin:
Profiler.BeginSample("Handling Time"); // begin profiling a piece of code with a custom label
HandleTime();
Profiler.EndSample(); // ends the current profiling sample

Profiler.BeginSample öğesinin özel bir etiket adı bildirmek için bir parametreye sahip olduğuna dikkat edin. Bu etiket Profiler'da "OptimUnit.Update" ile aynı şekilde görünecektir.

  • Profiler.EndSample yönteminden hemen sonra, Döndürme için yeni bir BeginSample ekleyin:
Profiler.BeginSample("Rotating"); // begin profiling

var t = transform;

if (transform.position.x <= 0)
    transform.Rotate(currentAngularVelocity * Time.deltaTime, 0, 0);
else if (transform.position.x > 0)
    transform.Rotate(-currentAngularVelocity * Time.deltaTime, 0, 0);

if (transform.position.z >= 0)
	transform.Rotate(0, 0, currentAngularVelocity * Time.deltaTime);
else if (transform.position.z < 0)
	transform.Rotate(0, 0, -currentAngularVelocity * Time.deltaTime);

Profiler.EndSample(); // end profiling
  • Yine, son EndSample'ın hemen altına, bu sefer Moving için yeni bir BeginSample ekleyin:
Profiler.BeginSample("Moving"); // begin profiling
    	
Move();
    	
Profiler.EndSample(); // end profiling
  • Son olarak, önceki EndSample'ınızın altına son bir BeginSample ekleyin, bu sefer Sınır Kontrolü için:
Profiler.BeginSample("Boundary Check"); // begin profiling

//check if we are moving away from the zone and invert velocity if this is the case
if (transform.position.x > areaSize.x && currentVelocity.x > 0)
{
    currentVelocity.x *= -1;
    PickNewVelocityChangeTime(); //we pick a new change time as we changed velocity
}
else if (transform.position.x < -areaSize.x && currentVelocity.x < 0)
{
    currentVelocity.x *= -1;
    PickNewVelocityChangeTime();
}
        
if (transform.position.z > areaSize.z && currentVelocity.z > 0)
{
    currentVelocity.z *= -1;
    PickNewVelocityChangeTime(); //we pick a new change time as we changed velocity
}
else if (transform.position.z < -areaSize.z && currentVelocity.z < 0)
{
    currentVelocity.z *= -1;
    PickNewVelocityChangeTime();
}

Profiler.EndSample(); // end profiling
  • Komut dosyasını kaydedin ve Editör'e dönün.
  • Profiler'da, halihazırda yakalanan verileri temizlemek için Temizle düğmesine basın.

figures

Alternatif metin: Temizle düğmesinin vurgulandığı Profil oluşturucu penceresi.

  • Oynat'a basarak ve uygulamanın birkaç saniye çalışmasına izin vererek yeni verileri yakalayın, ardından Oynatma modundan çıkın.
  • Profiler penceresinin CPU Kullanımı modülünde, CPU Kullanımında ani artış olan başka bir çerçeve seçin.
  • İşaretlediğimiz kod bölümlerine bakalım. OptimUnit.Update çubuğunun hemen altında yeni bir komut dosyası çubuğu bulunur. Bu çubuk, tüm yeni örneklenmiş kodu temsil eder. Onu seçin ve yeni numune etiketlerinden biri görünecektir.
  • Zaman Çizelgesi açılır menüsüne tıklayın ve Hiyerarşi'yi seçin.

figures

Alternatif metin: Profiler penceresinde, "Zaman Çizelgesi" açılır menüsü, fare imlecinin "Hiyerarşi" seçeneğinin üzerine gelmesiyle genişletilir.

  • Çerçeve verileri, otomatik olarak seçilen dört kod bölümü için etiketlerle bir liste görünümüne dönüşecektir.

figures

Alternatif metin: Profiler penceresinin Hiyerarşi görünümünde, Zaman sütunu için 99.74ms gösteren "Hareketli" etiketi satırı vurgulanır.

Bu görünümde, sorunun Hareketli yöntemde olduğu Zaman ms sütununda hemen anlaşılır! Artık sorunu tanımladığımıza göre, bunu kodda denemenin ve çözmenin zamanı geldi.

7. Adım: Kodu Optimize Edin

  • OptimUnit komut dosyasına dönün ve Update'te Move yöntemi çağrısını bulana kadar aşağı kaydırın. Yöntemin kendisine atlamak için Ctrl (Windows) veya Cmd (Mac) tuşunu basılı tutun ve Taşı'ya sol tıklayın.
void Move()
{
    Vector3 position = transform.position;

    float distanceToCenter = Vector3.Distance(Vector3.zero, position);
    float speed = 0.5f + distanceToCenter / areaSize.magnitude;

    int steps = Random.Range(1000, 2000);
    float increment = Time.deltaTime / steps;
    for (int i = 0; i < steps; ++i)
    {
        position += currentVelocity * increment * speed;
    }

    transform.position = position;

    transform.position = transform.position + currentVelocity * Time.deltaTime;
}

Move yöntemi birkaç değişkeni hesaplar ve forkliftin yeni konumunu hesaplamak için 1.000 ile 2.000 kez arasında bir for döngüsü yineler. Bunu 2.000 forklift (2-4 milyon döngü!) ile çarpın ve bu yöntemin çerçeve başına bir kez çalıştığını düşünün - bu yöntemin neden bu kadar yavaş olduğunu görmek kolaydır. Bu hesaplamalar, Sınır Kontrol kodunda hesaplanan currentVelocity için fazlalıktır, bu nedenle bu yöntemi basitleştirmek kolaydır, böylece sadece forklifti hareket ettirmekle ilgilenir.

  • Move'un gövdesini aşağıdaki satırla değiştirin:
void Move()
{
	transform.position = transform.position + currentVelocity * Time.deltaTime;
}
  • Komut dosyasını kaydedin ve Editör'e dönün.
  • Profiler verilerini temizleyin ve Oynatma modunda bir kez daha daha fazla veri yakalayın.

figures

Alternatif metin: Profiler penceresinin Hiyerarşi görünümünde, "Hareketli" etiketi satırı vurgulanır, şimdi Zaman sütunu için 1,08 ms ve tüm çerçeve için toplam CPU oluşturma süresi 14,94 ms'dir.

Profiler'daki değişiklik çarpıcı! Daha önce, Taşıma kodunun tamamlanması 99.74 ms alıyordu. Optimizasyon değiştikten sonra sadece 1.08 alır. Toplam CPU ms'si de 16 ms hedefinin altında olan 14.94'e düştü!

figures

Alternatif metin: Rastgele yönlerde hareket eden 2000 forkliftin bulunduğu Optimizasyon sahnesinden oyun görünümü. Oyun İstatistikleri penceresi sağ üst köşede açık ve şimdi 67.9 FPS (14.7 ms) kare hızı gösteriyor. Oyun görünümünde FPS 67'ye yükseldi!

8. Adım: Özet

Bu uç bir örnek olmasına rağmen, bu örnek sahne basit komut dosyası yazma hatalarının bazen bir uygulamanın performansı üzerinde nasıl büyük bir etki yaratabileceğini göstermektedir. Ticari bir amaç için üretilen bir uygulamada, birçok komut dosyasında birçok farklı darboğaz bulacaksınız, ancak süreç her zaman aynı kalacaktır. Sorunlu komut dosyalarını belirlemek için Profiler'ı kullanın ve bir sorun olabileceğinden şüphelendiğiniz kod bloklarını yalıtmak için Profiler Örneği yöntemlerini kullanın. Belirli sorun kodu belirlendikten sonra, yeniden düzenleyin, yeniden profil oluşturun ve tüm sorunları çözene kadar işlemi tekrarlayın. Artık kendi projelerinizdeki verimsiz kodu belirlemek için araçlara sahipsiniz.

Previous
Next

Lesson discussion

Swap insights and ask questions about “Unity Junior Programmer”.

Enroll to participate
Start the course to unlock the discussion. Enrolling helps us keep conversations relevant to learners.
Cohorts
WebsiteDiscoverBlogPatika.devRise In
CoursesCircleRustSoliditySolanaWeb3 FundamentalsBlockchain Basics
CompanyAbout UsTerms of UsePrivacy PolicyGDPR NoticeCookies
Don't miss any update!

Disclaimer: The information, programs, and events provided on https://cohorts.patika.dev is strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice, nor do we make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://cohorts.patika.dev disclaims any responsibility for financial decisions made by users based on the information provided here.

© 2026 Cohorts, All rights reserved