22 Ağustos 2016 Pazartesi

Gizmos Hakkında Herşey

Bu dersimizin konusu Gizmos.Derse geçmeden önce size şöyle birşey söyleyebilirim Debug.log fonksiyonuyla nasıl hatalarımızı tespit edebiliyoruz, gerektiği zamanlarda değerlerimizi görebiliyoruz vs.. gizmoda debug.log gibi işimizi kolaylaştıran bir araç fakat oyunun içinde gözükmez sadece editörde çalışır.

İlk olarak 2 fonksiyona değiniyoruz.Bildiğim kadarıylada Gizmoların sadece 2 fonksiyonu bulunuyor.Bunların ilki
OnDrawGizmos = Editörde update gibi çalışan fonksiyondur.Fonksiyonun içindeki herşeyi hemen editöre yansıtır.Örneğin
OnDrawgizmos fonksiyonunun içine yazdığım kodum hemen editörde gözüktü.

OnDrawGizmosSelected= OnDrawGizmos gibi çalışır fakat bunun farkı çalışması için tek bir şart vardır, editörde bir objeyi seçmemiz gerekmektedir.
Resimdede görceğiniz üzere 1. obje seçili değilken, 2. obje seçili.2. Objeye kod ile Sphere oluşturdum.Şimdi bu işaretleri nasıl çıkartacağımızı göreceğiz.

Fonksiyonlarımız bitti.Şimdi geçelim bu işaretleri nasıl çıkartacağımıza.İlk olarak c# scripti oluşturalım ve OnDrawGizmos fonksiyomuzu yazalım.
(Not: Script adını Gizmos yaptığım için Gizmos fonksiyonuyla karıştı bu yüzden kodunuzun adını benim gibi Gizmos yapmayın)

Kodumuzu yazdıktan sonra OnDrawGizmos içindeki kodlar editorde Update gibi çalışmaya başladılar.Tabiki şuanlık kodumuz boş olduğu için boş olarak çalışıyor.
Şimdi kodlarımıza geçelim.
Resimdeki gibi "Gizmos." koyduğumuzda yazabileceğimiz kodları görebiliyoruz.Ben ilk örnek yapıp ondan sonra sadece kodları açıklayacağım.Her kod için anlatım yapmayacağım.

DrawLine fonksiyonumuz 2 nokta arası çizgi oluşturuyor ve 2 değer alıyor.Birinci değer çizginin başlayacağı vector3 pozisyonu, 2. değer ise çizginin biteceği vector3 pozisyonu.Daha iyi anlamanız için bu çizginin birde dikeyini yapacağım.

Şimdi bu kodumuzu OnDrawGizmos fonksiyonumuz içine yazdık peki ya OnDrawGizmosSelected fonksiyomuzun içine yazsaydık ne olcaktı?

Bunuda anladığınızı düşünüyorum.Şimdi gelelim diğer gizmos kodlarımıza.

Gizmos.DrawCube
Sahnede 3 boyutlu küp oluşturur.
2 değer alır.İlk değer Vector3 cinsinden gözükeceği pozisyon, İkinci değerimiz ise yine Vector3 cinsinden Küpümüzün Büyüklüğü.(Unutmayın Gizmos ile yaptığımız şeyler sadece editorde gözükür ve oyuna hiçbir etkisi yoktur.)
Gizmos.DrawIcon
Sahnede Icon/Resim göstermemizi sağlar.
3 Değer alır.İlk değer Vector3 cinsinden gözükeceği pozisyon, ikinci değer dosyamızın adı.Yalnız burada yapmanız gereken bir işlem dosyamız Assets/Gizmos Klasöründe bulunması lazım.Sizde Assetsin içinde Gizmos klasörü yoksa Gizmos isimli klasör açın ve iconunuzu onun içine atın.Diğer değeri hep true olarak kullanabilirsiniz.
Gizmos.DrawSphere
Sahnede 3 boyutlu daire oluşturur(Sphere/Küre).
2 Değer alır.İlki objenin vector3 cinsinden gözükeceği pozisyon, İkinci değer ise boyutu.


Gizmos.DrawWireSphere
Wire Spherenin türkçesi tel küre.Sahnede tel küre oluşturuyor.
Draw.Sphere gibi 2 değer alıyor ilk değer gözükeceği pozisyon, ikinci değer ise boyutu.Ben WireSphere'yi 2D projelerimde kullanıyorum o zamanda daire olarak gözüküyor.



Bu derslikde bu kadar.Görüşmek üzere...


18 Ağustos 2016 Perşembe

Unity Grid Kullanımı ve Boyut Ayarlama Kodu


Bu dersde resimdeki gibi grid sistemi nasıl oluşturulur onu inceleyeceğiz.

İlk olarak ben şu şekilde bir proje oluşturdum.
Beyaz çerçevenin içini ilk resimdeki gibi 1,2,3,4,5...17,18 gibi level butonları ekleyeceğiz.İlk olarak beyaz çerçeveme yani "LevellarCerceve" diye oluşturduğum resim dosyamın Image componentini siliyorum ve Grid Layout Group compenentini ekliyorum.

Daha sonra Cercevemin içine 10 tane buton oluşturuyorum.
Şimdi grid ayarlarını yapacağız fakat bu ayarlara fazla takılmayın çünkü asıl ayarları script ile halledeceğiz.Bunu sadece görüntünün kötü gözükmemesi için yapıyorum.Siz isterseniz böylede bırakabilirsiniz.
Şimdi geçelim kodumuza.Ama ilk olarak neden koda ihtiyaç duyuyoruz onu göstermek istiyorum.Şuan bu ekran boyutunda gridde hiçbir sıkıntı yok tam istediğim gibi fakat ekranı büyütünce bakalım ne olacak?
Gördüğünüz gibi gridin boyu ekran boyutuyla ilişkili olmadığı için ekran büyüyünce boyutlar artmıyor ve bu yüzden küçük kalıyor.
Şimdi bunu nasıl çözceğimize bakalım.
Kodumuzu inceleyelim ve iyice anladığımızdan emin olalım.Kodumuzu Cercevemizin içine atalım.
Şimdi ise projemizi çalıştıralım ve sonuca bakalım
Grid sistemimiz olmuştur.Yalnız start fonksiyonuna yazdığımız için kodumuzu oyun başladıktan sonra ekran çözünürlüğü değişirse yine küçük kalacaktır fakat böyle bir sorunu oyuncular yaşamaz(Dikey ekranda oynarken yatay ekrana geçmezse)



Unity Analog Saat Projesi


Can sıkıntısından yaptığım analog saat projesi.Cihazın saatini alarak çalışır.

Projeyi indirmek için:
https://yadi.sk/d/63NztWXRuJySm


Kod Resmi:

UI Anchor nasıl kullanılır?

Anchor unity UI objelerde çıkan kulakçıklardır.Aşağıdaki resme bakacak olursanız kulakçıklardan kastımı daha iyi anlayabilirsiniz.
Bu kulakçıklar koyduğumuz UI objesinin tüm çözünürlüklerde sabit kalmasını sağlıyor.Mesela biz kulakçıkları kullanmadan menü yaptık diyelim.Yaptığımız menü unityde düzgün durabilir ama daha büyük ekranlı telefonlarda yada daha küçük ekranlı telefonlarda menüler büyük yada küçük kalabilir bu durumuda aşağıdaki resimlere bakarak görebilirsiniz.
İlk Olarak anchor nasıl kullanılmaz

İlk resimde anchorları tam ortaya almıştık, ikinci resimde ise sadece çözünürlüğü küçülttüm ve gördüğünüz gibi beyaz çizgi nasılda büyüdü.Yani bu ne demek oluyor?
Diyelimki iphone ekran boyutu üzerinden projemizi yapıyoruz ve oyunumuzu yayınlıyoruz.İphoneda hiçbir görüntü bozukluluğu olmaz ama biz onu başka telefona attığımızda mesela Samsung galaxye attığımızı düşünelim ekran çözünürlükleri aynı olmadığı için görüntü resimlerdeki gibi büyüyecek yada küçülecektir.Şimdi doğru kullanıma bakalım
Anchor nasıl kullanılır

Anchoru tam köşe noktalara getirdiğimizde gördüğünüz gibi ekran boyutu ne olursa olsun çizgi hep aynı ölçüde kalır.Telefonu ister yatay çevirin ister dikey, ister samsungda açın oyunu isterseniz iphone'da hiçbir şekilde görüntü bozulmayacaktır.

Anchor Nasıl Ayarlanır?
Anchoru kulakçıkları mavi yuvarlaklara sürükleyerek ayarlayabilirsiniz.Fakat bu yöntem ile kulakçıklarınız tam mavi yerin üstüne gelmez ve ufakda olsa kayma yaşarsınız ikinci ve en iyi yöntem ise 
Resimde gördüğünüz gibi panelin inspectoründe anchor diye bölüm var orda kordinat düzlemiyle anchorların yerini değiştirebiliyoruz.Bu değerler 0 ile 1 arasında olmak zorundadır.Mesela ortayı almak istiyorsak 0.5 olmalı.Yukarıdaki resmi inceleyelim minimum değerler en alt sol noktayı gösteriyor, maksimum değerler ise en üst sağ noktayı.Diğer 2 nokta ise otomatik olarak yerleşiyor.
Şimdi örnek yapalım panelin boyutunu küçültelim
Anchorun üst kısmındaki değerler önceden 0dı şimdi kulakçıklarımızın yerini değiştirdik ve sayılar büyüdü peki bu neden? O ölçüler mavi noktalarla kulakçıklarımız arasındaki mesafeyi gösterir.Yani mavi noktalar kulakçıkların üstünde olmadığı için 0 değiller.O değerlerin hepsini sıfır yapalım ve sonucu görelim
Gördüğünüz gibi mavi noktalar hiç boşluk kalmayacak şekilde kulakçıkların olduğu yere yerleşti.
Şimdi bu panelin içine bir tane resim oluşturalım.

Birşey dikkatinizi çektimi az öncede değerleri min 0.25, max 0.75 girmiştik fakat panelin boyutu daha büyük olmuştu fakat şimdi oluşturduğumuz resmin boyutu daha küçük oldu peki neden?
Bunun cevabı Panel canvas içindeydi ve maksimum noktası canvasın boyutları kadar olabiliyordu, şimdi oluşturduğumuz resim ise panelin içinde ve maksimum değeri panelin boyutu kadar olabiliyor.
Yani sıralamayı şöyle düşünürsek
Canvas<Panel<Resim
Panelin maksimum ve minimum noktası = Canvasın boyutu
Resmin maksimum ve minimum noktası = Panelin boyutu

Resimdede gördüğünüz gibi resmin minimum noktasını 0,0 yaptığımda ve maksimum noktasını 1,1 olarak ayarladığımda tam panelin boyutunda oluyor.




17 Ağustos 2016 Çarşamba

Unity Cihazın Saat Bilgisini Alma

Datetime'ı kullanabilmek için ilk olarak "using System;" kütüphanesini ekliyoruz.Daha sonra kodumuzu inceliyoruz.

Analog saat projesine buradan bakabilirsiniz:
http://unityturkce.blogspot.com.tr/2016/08/unity-analog-saat-projesi.html

Kayıt İşlemleri - PlayerPrefs ve Örnek

Merhabalar..Bu sefer PlayerPrefi inceleyeceğiz.İlk Olarak nedir bu playerpref?

PlayerPref:
Unitynin bize hazır olarak sunduğu fonksiyon olan playerpref bize 3 adet farklı değişken kaydetmemize yarıyor.
Bu değişkenler float, int ve stringdir.

Kaydetme işlemini yapmak için örneğin string ile örnek yapalım.
Örneğin bir karakterin pozisyonunu kaydetmek istiyoruz ama playerprefe sadece tek değer atayabiliyoruz bunu nasıl yaparız dersenizde aşağıdaki resmi inceleyin
Skor kaydetme örneği


Unity 3D ile Yarışma Oyunu Yapımı

Unity 3D ile Yarışma Oyunu Yapımı


İlk Olarak 2D Proje açarak başlıyoruz.Boş sahnemize Canvas ekliyoruz ve Canvas ayarlarında bulunan Render Mode'u "Screen Space - Camera" yapalım.Bu işlemden sonra birkaç satır altında bulunan "Render Camera" seçeneğine tıklayarak cameramızı seçiyoruz.Bu sayede Canvasımızı kameraya sabitlemiş olduk.
2. Adım olarak Canvasa panel ekliyoruz ve bu aşamadan sonra tasarımıza başlayacağız.
İlk olarak sorumuzu yazacağımız çerçeveyi hazırlıyoruz.Panelin içine Image istiyoruz ve bu image'in içinede text istiyoruz.
Şimdilik sorumuzu yazacağımız çerçeveyi boşverip şıkların butonlarını yapacağız.İlk olarak altdaki resimde gördüğünüz gibi image oluşturuyoruz.Image'e tıklayarak Inspectorden Image compenentini kaldırıyoruz.
Şimdi yapacağımız işlem grid oluşturmak.Aslında 4 buton için grid oluşturmaya gerek yok ellede koyabiliriz fakat ben düzenli olması için grid kullanıyorum.Siz ellede tek tek ayarlayabilirsiniz.Oyunumuzun ilerleyen zamanlarında bu grid için kodda yazacağız.Bunun sebebi ekran boyutu büyüdükçe yada küçüldükçe grid için girdiğimiz değerler küçük ve büyük gelecektir ve kötü görünüm oluşacaktır.Yani gridin ayarları tam ekrana uysun diye uğraşmayın bunu kod bizim için otomatik ayarlayacak ilerki zamanlarda.


Yukarıdaki resimde CevapButonları isimli gameobject e 4 tane Image attığımı görmüşsünüzdür.Siz 4 Adet Image oluşturmayın direk Button oluşturun.Çünkü bende Imagelerin içine ButtonCompenenti ekledim.

Şuan oyunumuz yukarıdaki resimdeki gibi sadece tasarımını oluşturduk ve daha hiç kod yazmadık.Artık kod kısmına girmenin vakti geldi.İlk olarak _GameManager.cs İsimli c# scripti oluşturuyoruz ve açıyoruz.

Resimdeki gibi kodlarımızı yazıyoruz.Bu kodda yapmak istediğimiz sahnede oluşturduğumuz soru çervesini ve butonları kodumuza tanımlamak.Image,Panel,Canvas vs.. Bu tür objeler UI olarak geçtiği içinde "using unityEngine.UI" kütüphanesini eklememiz gerekiyor.
Şimdi yapacağımız işlem editöre geri dönüp boş bir GameManager isimli obje oluşturuyoruz.Bu objeye az önce oluşturduğumuz _GameManager isimli kodumuzu atıyoruz ve tanımlamaları yapıyoruz.
Şimdi ise Soru isimli c# scripti oluşturuyoruz ve kodları aşağıdaki resimdeki gibi yapıyoruz.


Oyunumuzu nerdeyse ortaladık.Şimdi yapacağımız işlem soru listesi oluşturmak bunun içinde SoruListesi.cs isimli C# scripti açıyoruz ve kodu aşağıdaki şekilde yapıp Sahnemizdeki boş obje olarak duran GameManager objesine sürüklüyoruz.

GameManagerdan sorularımızı ekliyoruz.İster hepsini şimdi ekleyin isterseniz bitince ama deneme yapacağımız için 2-3 adet soru eklemenizde fayda var.
Şimdi işimiz birazdaha zorlaşacak._GameManager script dosyasını açıyoruz ve aşağıdaki gibi güncelliyoruz.

Biraz uzun bir güncelleme oldu ama az kaldı.Şimdi Oyunumuza yani sahnemize dönelim ve GameManagerdan butonlarımızı tanımlayalım.


Bittimi? tabiki hayır :) Şimdi her butonumuza tek tek tıklayarak CevapAl fonksiyonumuza eşitleyeceğiz.
AButonu numarası = 1
BButonu numarası = 2
CButonu numarası = 3
DButonu numarası = 4
Disabled color renginide beyaz yapmaya unutmayalım.


Şimdi neler yapmışız görmek için bi test edelim.
Şimdi yapcağımız şey, doğru cevap verdiğimizde yeni soru gelmesi yanlış cevap verdiğimizde ise oyunun yeniden başlaması.Ama ilk olarak SoruVer fonksiyonunu aşağıdaki gibi değiştirelim bu sayede bir soru aldığımızda o soru listeden silinecek ve birdaha karşımıza çıkmayacak.
Şimdi ise cevapKontrol fonksiyonunda ufak bir oynama yapacağız ve doğru cevap verdiğimizde yenisoru alabileceğimiz fonksiyon oluşturacağız.Bu fonksiyon ile kapattığımız butonları tekrar açıyoruz ve yeni soru istiyoruz.Daha önce yaptığımız oyunbaslat fonksiyonunu sadece oyun başlarken kullanacağız.

SoruVer() fonksiyonunda yine küçük bir güncelleme yaptım bu sayede soru bittiği zaman oyun yeniden başlayacak tabiki siz başka birşeyler yaptırtabilirsiniz.

Bu derslikde bu kadar.Projeyi aşağıdan indirebilirsiniz.Oyunu geliştirmesi size kalmış ister puan tablosu ekleyin ister süre belki ilerleyen derslerde bunlarıda yaparız ama şuanlık sadece mantığını göstermek istedim.

Edit: Şıkların grid sisteminin kodunu yapmayı unutmuşum :) Hemen onuda ekleyelim._GridManager isimli c# scripti oluşturuyoruz ve resimdeki gibi scripti yazıyoruz ve Gridimizin objesinin içine atıyoruz.

Projeyi indirmek için(Unity sürümüm 5.4.0f3):
https://yadi.sk/d/ux7WU0R6uHGt8