Uğur Kubat

Bir geliştiricinin not defteri

5 Mart 2016 Cumartesi

Yeni Oyunum Dice-Puzzle Game Yayınlandı

Hiç yorum yok
 Ara arada olsa 1 aydır üzerinde çalıştığım oyunum Dice- Puzzle Game Windows ve Android için yayınlandı.Oyunu yapma amacım ilk defa bir android oyun yapıyor olmam ve ilk unity projem olduğu için kendimi geliştirmekti.Yaparken bir çok şey öğrendim. Bunları da zamanla burda paylaşmayı düşünüyorum.




   Oyunun kaynak kodlarında paylaşacağım eğer incelemek isteyen olursa Github da yayınladım ordan indirebilirsiniz. Android için ve Windows işeltim sistemli cihazlarınıza indirebilirsiniz . Yorum yapmayı unutmayın iyi oyunlar:)


26 Şubat 2016 Cuma

Unity-Quaternion fonksiyonlarının Local/World olma

1 yorum
Başlığa tam olarak ne yazacağımı bilemedim konuda biraz karışık zaten. Benimde bu konuyla tanışmama yeni projemde yaşadığım sorundan sonra oldu. Bu konu hakkında türkçe kaynak yok.İngilizce kaynaklarda daha çok soru cevap şeklinde bulabildim.

Konumuza gelecek olursa konuyu daha iyi anlamak için Rotate fonksiyonundan bahsedeceğim.Bildiğiniz gibi rotate fonksiyonu bir objenin istediğimiz bir yönde dönmesini sağlıyor.Şöyle bir senaryo düşünelim.Bir küpümüz var bu küpü ok yönü ile sağa sola aşağı yukarı şekilde 90 derece döndürüyoruz.

Koda olarak göstermek gerekirse örneğin sağ yön tuşuna bastığımızda şu kodla döndereceğiz.



Diğer yönleride böyle küpün ne tarafa dönmesi göre yaptığımızı düşünelim.Oyunu çalıştırdığımızda döndermeye başladağımızda bir sorun olduğunu farkedeceksiniz.Bir sağa bir aşağı yön tuşuna bastığınızda aşağı deği yana doğru doksan derece döndüğünü göreceksiniz işte bunun sebebi dönme hareketinin locale göre olması yani dönme merkezi olarak küpü alıyor.Bu yüzden bunu worlde göre yapmamız gerekiyor.Onu bu Rotate de yapmak rotate fonksiyonuna Space.World ekliyoruz. 


Şimdi geldik asıl konumuza yine bir örnek üzerinden ilerileyelim. Benim yapmakta olduğum bir proje var. Bu projede bir zarımız var ve yön tuşlarıyla sağa sola aşağı yukarı birer birim ilerleterek 90 derece dönderek ilerletiyorum.Bunun da doğal bir görüntü olması için Vector3.MoveTowards ve Quaternion.RotateTowards kullanıyorum.

Direk kullanıldığımızda Rotate fonksiyonundaki sorunu yaşıyorum.Ama bunda direk Space.World ile dönmeyi world yapamıyoruz.Bunun yerine Quaternion.AngleAxis ile kendi rotatinumuzun çarpımı ile yapıyoruz.şimidi dönme için kodaları yapalım.

  • İlk önce Quaternionları tanımlayalım.




  • Daha sonra update fonksiyonu içinde RotateTowards ile döndürmeyi ayarlayalım.

  • En son olarakta yön tuşları ile AngleAxis ve konumları alalım.
Önemli nokta RotateTowards daki rotR*eski çarpım bu konumu world yapıyor.Bunu aynı şekilde diğer Quaternion fonksiyonları içinde kullanabilirsiniz.

23 Ocak 2016 Cumartesi

Unity-Çarpışma Algılamak

5 yorum
Unity de bir objenin diğer objeye çarpmasını anlamak için Collision veya Trigger kullanılır.Bu ikisinin temel farkı Triggerde objemizin objelerin içinden geçebilmesidir.

  • Collision

Collisionun çalışması için Colider componentinin ve rigidbody  ekli olması gerekir.3 tür fonksionu vardır.

             OnCollisionEnter
OnCollisionEnter bir objenin çarpma durumunda 1 kere çalışır.

void OnCollisionEnter(Collision col) {
 //her hangi bir objeye çarptığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarptığında çalışır
 }
 if (col.gameObject.name == "Cupe") {
 //ismi Cupe olan bir objeye çarptığında çalışır
 }
 }

            OnCollisionStay
OnCollisionStay bir objenin çarpma durumu sürdüğü sürece çalışır.

void OnCollisionStay(Collision col) {
 //her hangi bir  objeye çarptığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir nesneye çarptığında çalışır
 }
 if (col.gameObject.name == "Cupe"){
  //ismi Cupe olan bir objeye çarptığında çalışır
 }
 }
            OnCollisionExit
OnCollisionExit bir objenin çarpma durumu bittiğinde 1 kere çalışır.

void OnCollisionExit(Collision col) {
 //her hangi bir objeye çarpmayı bıraktığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 if (col.gameObject.name == "Cupe")  {
 //ismi Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 }


  • Trigger

Trigger çalışması için Colider componentinin ve rigidbody  ekli olması gerekir.Ayrıca Colider componentinin içindeki Is triggerin işaretli olması gerekir .3 tür fonksionu vardır.

             OnCollisionEnter
OnTriggerEnter bir objenin çarpma durumunda 1 kere çalışır.

 void OnTriggerEnter(Collider col)
    {
        //herhangi bir objeye çarptığında çalışır

        if (col.gameObject.tag == "Cupe")
        {
          //tagı Cupe olan bir objeye çarptığında çalışır
        }
        if (col.gameObject.name == "Cupe")
        {
            //ismi Cupe olan bir objeye çarptığında çalışır
        }
    }

            OnCollisionStay
OnTriggerStay bir objenin çarpma durumu sürdüğü sürece çalışır.

void OnTriggerStay(Collider col) {
 //her hangi bir objeye çarptığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarptığında çalışır
 }
 if (col.gameObject.name == "Cupe") {
 //ismi Cupe olan bir objeye çarptığında çalışır
 }
 }
            OnCollisionExit
OnTriggerExit bir objenin çarpma durumu bittiğinde 1 kere çalışır.

void OnTriggerExit(Collider col) {
 //her hangi bir objeye çarpmayı bıraktığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 if (col.gameObject.name == "Cupe") {
 //ismi Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 }

14 Ocak 2016 Perşembe

Unity-Parçacık Sistemleri

Hiç yorum yok
Parçacık sistemleri unity de efekt vermede kullanılır. Ateş,duman,buhar,havai fişek  gibi efektler yapılabilir.
Ayrıca Unitynin kendi hazır parçacık sistemler assetsi vardır. Assets menüsünden import package den particle systems seçilerek eklenebilir.
Şimdi bir parçacık sistemin ayarlarını yazacağım.İlk olarak GameObject menüsünden particle systems ekliyelim .Inspector penceresinde parçacık sisteminin componentlerini ve ayarlarını görebiliriz.
                                                     particlesystems

  • Duration: Parçacık sisteminin parçacık üretme süresini belirler.5 yazarsak 5 saniye parçacık üretilip durmasını sağlar.
  • Looping: Parçacık sisteminin sürekli olarak tekrar etmesini ve üretimin durmamasını sağlar. Durationla belirlediğimiz saniyede bir tekrar baştan başlar.
  • Prewarm: Parçacık sisteminin sanki önceden çalışıyormuş 2. defa tekrarlanıyormuş gibi çalışır.Loopingin açık olması gerekir.
  • Start Delay: Parçacığın belirlenen saniye sonra başlamasını sağlar.
  • Start Lifetime: Parçacıkların yaşama süresini gösterir. 5 saniye ise 5 saniye sonra üretilen parçacık yok olur.
  • Start Speed: Parçacıkların hızlarını gösterir.
  • Start size: Parçacıkların boyutunu gösterir.
  • Start Rotation: Parçacıkların yönünü belirtir.
  • Start Color: Parçacıkların rengini belirler.
  • Gravity Modifier: Parçacıklara yer çekimi ekler.
  • Simulation Space: Parçacığın kordinatlarının objeye göremi yoksa uzaya göremi olmasını belirlememizi sağlar.
  • Play On Avake: Oyunun çalıştığında otomotik olarak çalıştırılıp çalıştırılmayacağını belirlememizi sağlar.
  • Max Particles: Aynı anda yaşayabilecek parçacık sayısını gösterir.
Bu ayarların bir çoğunun yanında küçük üçgen var bunlarla o özelliğin ayar çeşidi seçiliyor.
                                                Curve
  • Constant: Default olarak gelen ayar çeşididir.Sabit bir değer girmemizi sağlar.
  • Curve: Değerin aşağıdaki grafikten ayarlanmasını sağlar.Üretim zamanına göre nasıl bir değer alacağını kolayca ayarlayabiliriz.
  • Random Between Two Constants: 2 farklı sabit değer girmemizi ve bu değerler arasında parçaçık üretilmesini sağlar.
  • Random Between Two Curve: 2 farklı grafik yapmamızı ve bu grafikler arasındaki değerler ile parçacık üretilmesini sağlar.
Bundan sonraki ayarları hem yanlarındaki kutucuktan seçmemiz hemde ayarlarını yapmamız gerekir.
  •   Emission: Parçacık üretilmesini sağlayan özelliktir altaki ayarlardan harekete göre veya zamana göre üretilmesi sağlanır.
  1. Rate: Üretilecek parçacık çokluğunu belirtir ne kadar fazlaysa parçacık okadar fazla üretilir.
  2. Time: Parçacığın zamana göre üretilmesini sağlar.Alttaki + işareti ile belli bir zamanda daha fazla üretilmesi sağlanabilir.
  3.  Dizstance: Parcacığın hareket ettirildiğinde üretilmesini sağlar araba egzoz vs  gibi yapılarda kullanılır.Simulation spacenin World olması gerekir.
  • Shabe: Üretilecek parçacıkların dağılma şeklini ve alanını belirler.
  • Velocity over Lifetime:  İstediğimiz yöne doğru hız vermemizi sağlar.
  • Force over Lifetime: İstediğimiz yöne doğru kuvvet uygular.
  • Color over Lifetime: Parçacığın rengini süreye göre değişmesini sağlar.
  • Color by Speed: Parçacığın renginin hıza göre değişmesini sağlar.
  • Size over Lifetime: Parçacığın boyutunun zamana göre değişmesini sağlar.
  • Size by Speed: Parçacığın boyutunun hıza göre değişmesini sağlar.
  • Rotation over Lifetime: Parçacığın yönünü  zamana göre değişmesini sağlar.
  • Rotation by Speed: Parçacığın yönünü  zamana göre değişmesini sağlar.
  • Renderer: Görüntünün oluştuğu bölümdür açık olmassa ekranda görüntü oluşmaz.Mesh ve materiali burada eklenebilir.