Birlikte öğreniyoruz...

Oyununuzun için olmazsa olmazlardan biride efektlerdir. Basit 2D bir oyun bile yapsanız bir aşamada illaki efekt kullanma ihtiyacınız olacaktır. Kodlama, grafikler ya da animasyonların önemi kadar oyununuzun gerçekçiliği ve oynanabilirliğini arttırmak için efektlere ihtiyacımız bulunuyor.

Şöyle düşünün bir FPS oyunu yaptınız ve silahınızı ateşlediğinizde silahın ucundan kıvılcım çıkmıyorsa ya da vurulan düşmandan bir kan akma efekti olmazsa oyununuz çok yalın kalacaktır.

Bu yüzden efekt konusunun ayrı bir dünya olduğunu söyleyebilirim. Oyun stüdyolarına bakarsanız efektler için ayrı bir ekibin olduğunu görebilirsiniz. Belki aranızda yetenekli arkadaşlar olacaktır ve ya da bu alanda kendilerini geliştirerek güzel çalışmalar ortaya çıkarabilirler ama biz oyunumuzda genellikle hazır efektler kullanacağız.

Unity Asset Store üzerinde bir çok ücretsiz ve ücretli çalışmalar var bunları kullanacağız ama bu temel yapı taşlarından biri olan efekt konusunu atlayacağız anlamına gelmiyor tabi. Çünkü hazır yapılarda olsa çalışma mantıklarını bilmemiz, efektler üzerinde yapacağımız bazı değişiklikler olduğunda acemilik yaşamamamız için detaylı bir inceleme yapacağız.

Hadi o zaman başlayalım…

Bu dersimizde “Particle System” ve “Visual Graphic Effect” haricinde diğer hazır efektleri inceleyeceğiz. Particle Effect” ve “Visual Graphic Effect” için ayrı ders konularımız olacak.

Unity Görsel Efektler

Herhangi bir objeye ya da boş bir objeye bileşen olarak efekt alt yapılarını ekleyebiliriz. Bu işlem için bir objeyi seçtikten sonra “Inspector” alanında yer alan “Add Component” butonuna bastıktan sonra “Effect” penceresinin altında mevcut yapıları görebilirsiniz.

Unity Efekt Ekleme
Unity Efekt Ekleme

Tabi diğer bir seçenek olarak ise “Hierarchy” penceresinde obje ekliyormuş gibi “Effects” menüsü altından istediğiniz yapıyı seçerek ekleme işlemi gerçekleştirebilirsiniz.

Unity Efekt Ekleme Alternatif
Unity Efekt Ekleme Alternatif

İlk olarak “Trail Effect” ve “Line Effect” ile başlayacağız. Daha sonrasında ise “Particle effect” ve “Visual Effect” gibi aktif olarak kullanılan yöntemleri inceleyeceğiz.

Uyarı: Efektler konularında ayarlarda göreceğimiz parametreler genellikle çoğu efekt türünde aynı şekilde geçmektedir. O yüzden ne işe yaradığının aklınızda kalması için sizin de test ederek en azından anahtar kelimeleri ezberlemeye zemin hazırlamanız iyi olacaktır.

Trail Renderer Efekti

“Trail Renderer” bir objenin sahnede hareket ettiği yer boyunca geçtiği pozisyonlarda iz bırakan bir efekt oluşturmamıza yarar. Örneğin bir uçağın arkasında bıraktığı izi ya da bir merminin hedefine giderken arkasında çizilen efekti düşünebilirsiniz.

Sahneye boş bir obje ekleyerek “Trail Renderer” bileşeni eklediğimizde alacağımız ilk sonuç aşağıdaki gibi olacaktır. Daha hiç bir ayara dokunmadık ama en azından çalışma mantığını anlayabilirsiniz.

Trail Renderer Efekti İlk Görüntü

Şimdi ayarlarını inceleyerek neler yapabiliriz biraz bakalım.

Trail Renderer Ayarlari

Width: En üst kısımda yer alan ve grafik tablosuna benzeyen alan üzerinden objemizi takip eden efekti daraltmak ve arada alacağı eğimi belirleyebiliyoruz.

Boyutunu değiştirmen için kırmızı çizgiyi aşağıya doğru çekebilirsiniz. Ayrıca eğim ve açı vermek için ise sağ tuş yaparak “Add Key” seçeneğini kullanabilirsiniz ya da çift tıklayarak yeni bir eğim eklemek için yeni nokta oluşturabilirsiniz.

Trail Renderer Add Key Ekleme

Time: Efektin sahnedeki süresinin ayarlandığı seçenektir. Yaşam süresi olarak düşünebilirsiniz. Daha düşük bir değer verdikçe arkadan gelen iz sahneden daha hızlı bir şekilde silinecektir.

Min Vertex Distance: Oluşan efekti birimler olarak düşünürseniz bu ayar ile efektin birimleri arasındaki mesafeyi arttırabilirsiniz. Aslında yaptığı işlemi şöyle özetleyebilirim. Efektin dönüşler sırasındaki keskinliğini ayarlayabiliriz eğer yüksek bir değer verirsek keskin dönüşler olacaktır.

Min Vertex Distance Etkisi

Autodestruct: İlgili efektin işlemi bittikten sonra otomatik olarak “Trail Renderer” bileşeninin bağlı olduğu objeyi yok edecektir. Yani objenin hareketi sonlandıktan sonra efektin eklendiği obje otomatik olarak silinir.

Emitting: İşaretli yani aktif durumda gelmektedir. Eğer pasif duruma getirilirse obje sahneden silinmeyecek ama efekt gösterilmeyecektir. Efektin gösterilmesini durdurmak için kullanılır.

Color: Efekte renk verek için kullandığımız alandır. Sabit bir renk ya da renk geçişleri gerçekleştirebiliriz.

Corner Vertices: Oluşturulan efektte daraltma işlemi uyguladıysak ve bu daraltma işlemlerinde keskin değişde daha yumuşak geçişler kullanmak istiyorsak kullanılır. Daha yüksek değer verilerek geçişleri yumuşatabilirsiniz.

End Cap Vertices: Efektin başlangıç ve bitiş alanlarını yuvarlamak için kullanılan ayardır.

Alignment: Efektin yönünü değiştirmek için kullanılır.

  • View: Kamera efektin bakış açısına göre düzenler.
  • TransformZ: Efekt objenin Z eksenine doğru düzenlenir.

Texture Mode: Eklenecek olan dokunun efekte nasıl uygulanacağını seçtiğimiz alandır.

  • Stretch: Eklenecek olan doku, efektle tam eşleşme yaptırılarak bir kez uygulanır.
  • Tile: Dünya eksenine bağlantılı olarak belirli aralıklarla dokunun efekte uygulanması için kullanılır. Kesik kesik bir yapı oluşturacaktır. Ayarlamak için Material.SetTextureScale metodu kullanılır.
  • Distribute Per Segment: Efekte tüm aralıkları eşit sayarak dokuyu bir kere döşemek için kullanılır.
  • Repeat Per Segment: Dokuyu tüm efekt boyunca tekrarlamak için kullanılan ayardır.

Generate Lighting Data: Sahnede yer alan objeleri de hesaplayarak efektin ışığını ayarlayarak data haline dönüştürür.

Shadow Bias: Efektin gölgesinin yayılmasını sağlayan ayardır.

Materials

Size: Bu kısımda yer alan size alanına birden fazla bir değer verdiğimizde ek materyal ekleme alanları gelecektir. Seçtiğimiz materyalleri birleştirerek ortaya bir yapı çıkartacaktır.

Element 0: Uygulanacak olan efekte materyal eklemek için kullanılan kısımdır.

Element alanına varsayılan olarak gelen “Default-Particle” seçerek yumuşatılmış bir yapı ya da “Sprites-Default” seçerek keskin bir yapı kullanabilirsiniz.

– Lighting

Cast Shadows: Efektin gölgesinin olup, olmayacağının seçildiği ayardır.

  • Two Sided: Bu seçenek ile efektin takip ettiği yolun komple gölgesinin oluşmasını sağlayarak daha gerçekçi sonuçlar elde edebilirsiniz.
  • Shadows Only: Bu seçenek ile efektin gözükmeyip sadece gölgesinin gözükmesini sağlayabilirsiniz.
  • On: Bu seçenek ise ilgili efektin sadece uç kısmını gölgesini oluşturacaktır.

Receive Shadows: Eğer efektin üstüne farklı bir objeden gölge düşüyorsa ve bu gölgenin gözükmesini istiyorsak aktif edebileceğimiz ayardır.

Probes: Işıklandırmada oluşturulan probes yapısı ile nasıl çalışacağının belirlediği alandır. Daha sonra detaylı şekilde inceleyeceğiz. “Ligth Probes” ışıklar için “Reflection” ise yansımalar için ayardır.

– Additional Settings

Motion Vectors: Eğer “Probes” alanını “Off” durumdan çıkardıysak etki edecek ayardır. Eğer ışık ve yansıma probes ayarlarını kullanıyorsak hesaplamasının nasıl yapılacağını belirlediğimiz alandır.

Dynamic Occlusion: Statik olarak belirlenen objenin hesaplamaya dahil olması için kullanılan ayardır. Önceki derslerimizde detaylı incelediğimiz Occlusion konusuna bakabilirsiniz.

Order in Layer: Eğer objede birden fazla efekt varsa sıralamasını belirlediğimiz alandır.

Şimdi kod tarafına müdahale ederek bir çalışma yapalım.

Örneğimizde uzay gemimize belirli bir hız vererek sabit bir yönde gitmesini sağlayacağız. Sonrasında ise hızı oyun ekranından değiştirdikten sonra arkasında bıraktığı için daha uzun olmasını sağlayacağız.

Asset Store üzerinden bulunan ve ücretsiz olarak indirebileceğiniz bu adresteki uzay gemisi modelini indirerek “SpaceshipDiffuse” isimli objeyi sahneye aktarıyoruz ve ismini “UzayGemisi” olarak değiştiriyoruz. Ayrıca sahneye iki adet “Create Empty” yani boş obje ekleyerek isimlerini “SolMotor” ve “SagMotor” olarak düzenliyoruz.

“SolMotor” ve “SagMotor” boş objeleri “UzayGemisi” objesinin motor bölgelerine denk gelecek şekilde düzenledikten sonra her iki objeyi de “UzayGemisi” objesi altına taşıyoruz.

C# tarafına geçmeden önce “SolMotor” ve “SagMotor” objelerinin her ikisine de “Trail Renderer” bileşenini ekleyerek aşağıdaki görselde yer alan ayarları gerçekleştiriyoruz. Böylece basit bir sahne tasarımı yapmış olduk.

Trail Renderer Efekti için Sahne Tasarımı
Trail Renderer Efekti için Sahne Tasarımı

Şimdi yeni bir C# Script dosyası oluşturarak içerisine aşağıdaki kodları ekliyoruz.

public class Efektler : MonoBehaviour
{
    TrailRenderer[] trailefekt;

    public int hiz;
    void Start()
    {
        trailefekt = GetComponentsInChildren<TrailRenderer>();
    }

    // Update is called once per frame
    void Update()
    {

        if (hiz >10)
        {
            foreach (var item in trailefekt)
            {
                item.time = 3;
            }
        }
        transform.Translate(Vector3.back * hiz * Time.deltaTime);
    }
}

Kodumuzda TrailRenderer[] trailefekt; yazarak “Trail Renderer” nesnesinden türetilmiş bir dizi oluşturduk. [] yaparak dizi oluşturduk çünkü uzay gemisine bağlı iki adet objemiz(sol ve sağ motor) bulunuyor.

public int hiz; yazarak dışarıdan hız değerini alabilmesi için “Public” erişim belirleyicisine sahip bir “Integer” değişken ekledik.

trailefekt = GetComponentsInChildren(); yazarak uzay gemisi objesinin altında yer alan alt objelerin bileşenlerine eriştik. Sonrasında ise bir if bloğu oluşturarak eğer 10 değerinden fazla bir hız belirlenirse döngünün içine girmesini istedik.

İf bloğu içerisinde ise bir foreach döngüsü oluşturarak ise her döngüye girdiğinde bileşenin time değerini 3 olarak değiştirmesini istedik yani arkasında bıraktığı efektin daha uzun süre ekranda kalmasını sağladık. Eğer direk bu konuyu okumaya başladıysanız if ve for yapılarını anlamak için C# Dersleri konusuna göz atabilirsiniz.

Son olarak ise transform.Translate(Vector3.back * hiz * Time.deltaTime); yazarak verdiğimiz hız değeri ile doğru orantılı olarak “UzayGemisi” objesinin sabit bir yönde hareket etmesini sağladık.

Oluşturduğumuz C# Script dosyasını kaydederek “UzayGemisi” objemize atarak oyunu çalıştırdığınızda aşağıdaki videodaki gibi bir sonuç almanız gerekiyor.

Trail Renderer Efekti Örneği

Yukarıda C# ile müdahale ettiğimiz gibi herhangi bir objeye eklenmiş olan bileşenleri “GetComponents” ile yakalayarak ayarlarında değişiklik yaparak müdahale edebiliriz. Bu aşamadan sonraki efektlerde C# örnekleri değinmeyeceğim.

Lens Flare Efekti

Lens Flare Ayarları
Lens Flare Ayarları

“Lens Flare” yani mercek parlaması bileşeniyle, kamera merceğinden yansıyan ışık yapısını taklit eder. Genellikle oyunumuzdaki bir bölümde parlak bir alan oluşturmak için ya da skybox yani gökyüzüne ek parlaklık eklemek için kullanılır.

Lens Flare bileşenini kullanmak için “Hierarchy” bölümünden “Create Empty” ile boş bir obje oluşturduktan sonra boş objenin “Inspector” alanına gelerek “Add Component/ Effects/Lens Flare” yolunu takip ederek efekti ekleyebilirsiniz.

Unity Lens Flare Efekti

Flare: Mercek parlamasının görünümünün seçildiği alandır. İsterseniz kendiniz bir Flare oluşturabilir ya da daha önceden indirdiğiniz skybox paketinin içerisinde bulunan seçeneklerden birini seçebilirsiniz.

Project / Sağ Tık / Create / Lens Flare” yolunu takip ederek Lens Flare türünde bir materyal ekleyebilirsiniz.

Color: Lens parlaması için renk seçeceğimiz kısımdır. Ortam rengiyle uyumlu olması için uygun bir renk seçmemiz gerekiyor.

Brightness: Parlamanın boyutunu ve büyüklüğünü seçtiğimiz kısımdır.

Fade Speed: Parlamanın kaybolmasının hızının ayarlandığı bölümdür.

Ignore Layers: Hangi katmanlarda parlamaların gözükeceğini belirlendiği bölümdür.

Directional: Parlamanın Z ekseni boyunca yönlenmesinin belirttiğimiz kısımdır. Eğer bu seçenek işaretlenirse bağlı olduğu objenin konumu takip etmeyerek sadece Z ekseninin yönünü izler.

Halo Efekti

Unity Halo Efekti

Halo efekti ile havada toz parçacıkları görünümü oluşturabilir ya da bir objenin etrafında sis benzeri bir görüntü oluşturabilirsiniz.

“Color” ve “Size” paremetresini girebildiğimiz iki basit ayarı bulunmaktadır.

Color: Eklenecek olan sis efektinin rengini belirleyebiliriz.

Size: Eklenecek olan sis efektinin boyutunu belirleyebiliriz.

Projector Efekti

Projector Efektinin Kullanımı

Bir materyali herhangi bir objeye yansıtmak için kullanılan efekt türüdür.

Projector Efektinin Ayarları
Projector Efektinin Ayarları

Near Clip Plane: Yansıtma işleminde, yansıtacağı alanın nerede başlayacağının belirlendiği kısımdır.

Far Clip Plane: Yansıtma işleminde, yansıtacağı alanın nerede biteceğinin belirlendiği kısımdır.

Field Of View: Projektörün görüş açısının belirlendiği ayardır. “Orthographic” seçeneğinin işaretli olmaması gerekir.

Aspect Ratio: Projektörün yüksekliğini ve genişliğini belirli katlarda arttırmanıza yarayan ayardır.

Orthographic: Kutucuk işaretlenirse projektör türü perspektif açıdan Ortografik olarak değişecektir.

Orthographic Size: Projeksiyonun Ortografik buyutunun belirlendiği alandır. “Orthographic” seçeneğinin aktif olması gerekmektedir.

Material: Yansıtılacak olan materyalin seçildiği alandır.

Ignore Layers: Yansıma işleminin belirli katmanlarda gözüküp, gözükmemesi için katman seçiminin yapıldığı alandır.

Line Renderer Efekti

Line Renderer efekti oyunumuzun içerisinde belirlenen başlangıç ve bitiş noktaları belirtilen düz çizgiler oluşturmak için kullanılır. Aynı zamanda istediğimiz sayıda noktalar oluşturarak bu noktaların arasında çizgi çizerek birleşmesini sağlayabiliriz.

Kullanmak için boş bir obje oluşturarak “Line Renderer” bileşenini ekleyelim. Bileşeni ekledikten sonra karşımıza aşağıdaki gibi parametreler gelecektir.

Line Renderer Ayarları
Line Renderer Ayarları

“Trail Renderer” bölümde gördüğümüz ayarların bir çoğu burada yer alıyor o yüzden hepsine değinmeyeceğim. Önceliğimiz farklı olan ayarları ve işlevlerini incelememiz olacak.

Boş objemize “Line Renderer” bileşenini ekledikten sonra sahnemizde kara bir şekil oluşacaktır ve bileşen ayarları kısmında eklenen noktaları düzenlemek ve yeni nokta oluşturmak için simgeler göreceksiniz.

Artı şeklinde gözüken buton ile sahneye yeni noktalar ekleyerek çizgilerin oluşmasını sağlayabilirsiniz.

Input: Artı işaretine tıkladıktan sonra noktaları nasıl oluşturacağımızı belirlediğimiz kısımdır.

  • Mouse Position: Bu seçenek ile sahnede mouse ile tıkladığımız her alan arasına çizgi oluşturur.
  • Physics Raycast: Sahne içinde yer alan Raycast ışınlarına göre çizgiler oluşturur.

Min Vertex Distance: Sahnede fare ile tıklamanın haricinde sahnede sürükleyerek çizgi oluşmasını istediğiniz alanı belirleyebilirsiniz. “Min Vertex Distance” ayarı da sürükleme işleminden sonra ne kadar mesafede bir nokta koyacağımızı belirleyebildiğimiz kısımdır.

Offset: Oluşturulan noktalara verilen uzaklık.

Loop: Oluşturduğumuz noktalarından ilk ve son olarak oluşturulanları otomatik olarak bağlar.

Simplify Preview: “Tolerance” kısmında belirtilen değere göre oluşacak sonucun ön izlemesini gösterir.

Tolerance: Oluşturulan karışık çizgileri basitleştirmeye yarar. 0 sayısı verilirse sapma oranı çok az olur ya da hiç olmaz.

Color: Renk seçiminin yapıldığı ayardır.

Corner Vertices: Oluşturulan noktalardaki köşe kısımları yuvarlaklaştırmak için kullanılan ayardır.

End Cap Vertices: Başlangıç ve bitiş noktasını otomatik olarak yuvarlar.

Use World Space: Bu ayar seçilirse dünya ekseni ele alınır ve noktalar hareket ettirilemez. İşareti kaldırsanız bağlı olduğu objenin transform bilgilerini kullanır.

Sonraki dersimiz olan Unity Particle Efect konusuna aşağıdaki bağlantıdan erişebilirsiniz.