6 Mayıs 2014 Salı

Scritpler Devam:Fonksiyonlara Detaylı Bakış

Fonksiyonlara Detaylı Bakış                         

Unity'nin Update() (Güncel, Sürekli yapılan) ve Start() (Başlangıç, Tek seferlik) fonksiyonları  

Unity’nin scriptlerimizi çalıştırmak için kullandığımız fonksiyonları bulunmaktadır. En yaygın olarak kullanılan fonksiyon Update() fonksiyonudur. Her yeni bir script oluşturduğunuzda bu fonksiyon da otomatik olarak scriptin içerisinde yazılı olarak gelir. Ee, bu da demektir ki bu fonksiyon dehşet derecede önemli. Bir bakış atalım.
Yeni bir script oluşturmak    

Yeni bir UnityScript (JavaScript) oluşturmak için üst taraftaki menüden şu yolu izleyin:  
Assets --> Create (Oluştur) -->  JavaScript  
Niçin JavaScript? Unity’nin resmî forumlarında bu konuyla ilgili pek çok tartışma konusu açıldı. Çoğu kişi bu dile JavaScript yerine UnityScript demeyi tercih ediyor, çünkü bu dil tam olarak JavaScript değil, ancak çok benzer yapıda. Ben de bu dili UnityScript olarak adlandıranlardanım.

Bir script oluştururken ‘Assets’ menüsünü kullandığımıza dikkat ettiniz mi? Hatırlayın, bir scripti GameObject’e (Oyun Objesi) atadığınız zaman script sihirli bir şekilde o GameObject’in bir Component’i (Parça) oluveriyordu. Eğer sözlüğü açıp da ‘Asset’ kelimesinin anlamına bakarsanız şu tanımla karşılaşırsınız: "a useful or valuable thing or quality." (Türkçesi: Değerli veya işe yarar, kullanışlı şey). Ve elbette bir script de bir GameObject’i daha kullanışlı (useful) kılar. :)


NewBehaviourScript adında yeni bir script oluşturduk  

Bu yeni UnityScript dosyası Unity’nin arayüzünde yer alan Project (Proje) paneline yerleşti. Varsayılan olarak ismi otomatikman ‘NewBehaviourScript’ olarak ayarlandı.


Scriptin ismini değiştirmek    
Scriptinizin ismini değiştirmek için önce onu mouse ile seçin ve ardından F2 tuşuna basın (MAC OS işletim sistemi kullanıyorsanız Enter tuşuna basın.). Ardından scriptinize ne işe yarayacağını her gördüğünüzde anlayabileceğiniz, açıklayıcı bir isim verin. Bu bir eğitim kılavuzu olduğu için ben kendi scriptimi ‘StudyFunctions’ (EgitimFonksiyonlari) olarak adlandırıyorum. İsim değişikliğini hallettikten sonra Enter tuşuna basarak isim değişikliğini bitirin.

NOT: Scriptlerinizi isimlendirirken, tıpkı değişkenlerde olduğu gibi, Türkçe karakter kullanmayın. Aksi takdirde bir objeye atadığınız scriptinizin Component’ine, başka bir scriptten erişim yapamazsınız, çünkü kodlama dilleri kesinlikle Türkçe karakterleri desteklemez, hata verir. 


Scriptimizi ‘Scripts’ klasörüne taşımak    
1. Sadece scriptinizi mouse ile sürükleyip ‘Scripts’ klasörüne atın.
2. İşte benim scriptim.

NOT: Eğer ki sizde ‘Scripts’ diye bir klasör yoksa telaş yapmayın, çünkü bu klasör projenize isteğe bağlı olarak eklediğiniz hazır paketler vasıtasıyla gelir ve Unity’nin hazır scriptlerini içerisinde barındırır. Kendiniz bir klasör oluşturmak içinse yine Project panelinde, üst taraftaki ‘Create’ (Oluştur) butonuna basın ve ardından ‘Folder’ (Klasör) seçeneğini seçin.                


Unity'nin Inspector paneline bakın    

Project (Proje) panelinde scriptiniz seçiliyken Inspector paneline bakarsanız scriptinizin içeriğini görebilirsiniz.
1. Burada scriptinizde otomatik olarak oluşturulan Update() fonksiyonu bulunmakta.
2. Edit butonuna basarak script editörü vasıtasıyla scriptinizi düzenleyebilirsiniz.

Update(): Sürekli, sürekli ve sürekli "Şunu yap" fonksiyonu

Niçin Update() fonksiyonu otomatik olarak yeni scriptlere eklenir?

Unity oyununuz sırasında her bir karede (frame) otomatik olarak bu fonksiyonu gerçekleştirir.
(Çevirmen Eklemesi): Bir saniye kesinlikle bir kareye (frame) eşit değildir. Bir saniye oyunun hızına göre 30 kare de olabilir, 60 kare de 150 kare de. Bunu unutmayın.
Script Referans Kılavuzu’nu (Scripting Reference Manual) okudukça, çoğu kodun Update() fonksiyonu içerisine yazıldığını görebilirsiniz.

Start(): Tek bir seferlik “Şunu yap” fonksiyonu  

Unity içerisindeki bir başka çok yaygın kullanılan fonksiyon da Start() (Başlangıç) fonksiyonudur. Bu fonksiyon sadece 1 kere çalıştırılır ve uygulanır.
İçerisinde Start() fonksiyonu bulunan ve bir GameObject’in (Oyun Objesi) Component’i (Parça) olan bir scriptteki Start() fonksiyonu, Unity tarafından, o obje oyunun herhangi bir bölümünde oluşturulduğu anda otomatik olarak tek bir seferlik çalıştırılır.                    


Fonksiyon İsimleri  

Kılavuzun ilk bölümlerinde fonksiyonların ne oldukları hakkında ve niçin onlara ihtiyacımızın olduğu hakkında konuşmuştuk.

Şimdi ise nasıl fonksiyon oluşturabileceğinizi aşama aşama göstereceğim.

 Fonksiyon Tanımlamak (Declare)  

Kullanmak istediğiniz herhangi bir fonksiyonu (function) öncelikle tanımlamalısınız. Bunun anlamı nedir? Bunun anlamı siz Unity’e bir dizi kod yazacağınızı ve bu kod dizisine de bir isim vereceğinizi söylemektir. Ardından Unity siz bu fonksiyonu çağırdığınızda tam olarak neyden bahsettiğinizi bilecektir.

Hadi Start() fonksiyonuna bir bakalım. Bu sizin değil, Unity’nin içinde tanımlanmış olan ve otomatik olarak çağrılan bir fonksiyondur. Buna rağmen bu fonksiyonun içindeki kod dizisi tamamen size bağlıdır.

1. Fonksiyonun ismi olan Start()’tan hemen önce bir ‘function’ takısı getirdik. Başa ‘function’ takısını koyman Unity’e yeni bir fonksiyon oluşturmakta olduğumuzu söyler.
2. Fonksiyon ismi olan Start’tan hemen sonra iki parantez “( )” açılır. Bu parantezlerin anlamı, işlevi nedir?  

Bu parantezler bir fonksiyonun parçası olmakla beraber (Yazması zorunlu parçası) bu parantezler sayesinde fonksiyonun içine özel veri (data) girişleri de yapabiliriz.

Şu anda kafanızı parçalayıp ne demek istediğimi kavramaya çalıştığınızı görür gibiyim :) . Madem Start() fonksiyonundaki parantezlerin içerisinde hiçbir şey yazmıyor, o zaman bu fonksiyona hangi veri giriyor ki?
Aslında hiçbir şey yok gibi duruyor değil mi, ancak korkmayın, adım adım bunu açıklayacağım.

3. Fonksiyonun başlangıç noktasına bir tırtıklı parantez ‘{‘ işareti koyulur,
4. Fonksiyonun bitim noktasına da bir tırtıklı parantez ‘}’ koyulur.
 NOT: Fonksiyon tanımlamaları (declaration) göreceğiniz üzere sonlarına ‘;’ (Noktalı virgül) almazlar. Derleyici (compiler) bu sondaki tırtıklı parantezin ‘}’ fonksiyonun bitiş noktası olduğunu anlar.
5. Bu iki tırtıklı parantez (3 ve 4) arasındaki her şey fonksiyonun gövdesini (body) oluşturur, buraya yazılan kodlar fonksiyon çağrıldığı zaman gerçekleştirilir.
NOT: Biraz kişisel bilgiye kaçacak ama olsun. Ben aylar önce ilk defa fonksiyonları öğrenmeye başladığımda bu şeyin nasıl işlediğini anlamak için az daha kendimi paralıyordum. Basitçe belirtmek gerekirse burada neler olup bittiğini bir türlü kafam almıyordu. Sonradan anladım ki fonksiyonlar tekrar tekrar kullanılabilen kod parçalarından ibaretmiş, bu kadar basit. Buna rağmen bir fonksiyonu çağırmak ve içine özel veri girmek hâlâ kafamın basmadığı konulardı; bunun bir diğer nedeni de kitaplar yazıp bu konuda eğitim veren şahsiyetlerin bu konuda hiç detaylı bilgi vermemesiydi. Bu yüzden bu dersleri yazıyorum, çünkü ben bu konuyu anlamaya çalışırken çok zorluklar çektim ve sizin de çekmenizi istemem.

Bir sonraki bölüm, yaşadığım sıkıntıyı yaşamamanız için bu bahsettiğim konuyla ilgili olacaktır.              

29 Nisan 2014 Salı

Scritpler Devam: Scriptlerde Noktasal Yapı (Dot Syntax):

 Scriptlerde Noktasal Yapı (Dot Syntax): İletişim Kurmak  

Scriptimiz bir veriyi depolayan değişkenlere (variable) ve bir işlemi yapmaya yarayan fonksiyonlara (function) sahip. Şimdi sizlere bir GameObject’teki başka Component’lerle (Parça) iletişim kurmayı göstereceğim. Bu konuya sadece burada değineceğim, çünkü Component’ler arası iletişim de scriptlemenin bir parçasıdır. Bunun sayesinde etkileşimler mümkün olur.

Noktalarla işimiz ne?    

Başkaları tarafından yazılmış kodlara bakarsanız, birbirlerinden noktalarla ayrılan çeşitli kelimelerin birer küme oluşturduklarını görürsünüz. Bu da nesi? Oldukça da karmaşık duruyor, değil mi?

Unity’nin kendi dökümanından basit bir örnek vereyim:
transform.position.x  

Yukarıdaki kodun ne işe yaradığıyla ilgili kafanızı yormayın, bunu sonradan öğreneceksiniz. Buradaki amaç noktasal yapıyı göstermekti.

İşte bu yapıya Noktasal Yapı (Dot Syntax) denir.  


UnityScript’in de uyulması gereken çeşitli gramer kuralları bulunmaktadır. İşte size başka bir örnek: Evimin adresi:  USA.Vermont.Essex.22 benimSokagim .Eğlenceli duruyor, değil mi? Çünkü UnityScript’in Dot Syntax gramerini kullandım, posta ofislerinde kullanılan grameri değil. Ancak bahse girerim biraz yakından bakarsanız pekâlâ evimi rahatça bulabilirsiniz.
Başka bir örnek daha. Sizinle Dünya üzerinde rasgele bir yerde buluşsaydık ve sizden gözlüğümü almanızı isteyip şu bilgiyi verseydim:
USA.Vermont.Essex.22 benimSokagim.2nci kat.ofis.masa.orta cekmece.gozluk
Herhalde gözlüğümü bulurken herhangi sorun yaşamazdınız, değil mi?
Yani bu bir adres (Address) mi?
Evet, hepsi bu. Noktasal Yapı (Dot Syntax) basit anlamda bir GameObject’i, Component’i (Parça), değişkeni (variable) veya bir fonksiyonu (function) tanımlamak için kullanılan adrestir

22 Nisan 2014 Salı

Scritpler Devam: Scriptlerde Fonksiyonlar (Function)

Scriptlerde Fonksiyonlar (Function)  

Fonksiyonlar asıl eylemlerin uygulandığı yerdir. Kararlar alınır, işlemler yapılır. Bir scriptin çalışan kısmıdırlar. Bir arkadaşımızla sohbet ederken araya telefonun girdiği örneğimizde; arkadaşımızla “sohbet etmek” fonksiyonunu gerçekleştiriyorduk ancak sonrasında, başka bir fonksiyon olan “telefonla konuşmak” fonksiyonuna geçiş yapmak zorunda kaldık.
Adım, adım, kaçınmak, adım...  
Bir script çalıştırılırken her satır kod düzenli olarak yerine getirilir (işlenir).
Script çalışırken bazı engellemeler çıkabilir (interruption), arkadaşımızla sohbet ederken telefona bakmak zorunda kalmamız gibi. “Arkadaşımızla sohbet etmek” fonksiyonunu (function) gerçekleştiriyorduk ki bir engelleme (interruption) çıktı, telefonun çalması. Artık başka bir fonksiyonu çalıştırmak zorunda kaldık. Bu fonksiyonun da kendine has adımları (davranışları) vardır. Bu engelleyici fonksiyonu tamamladıktan sonra ise “arkadaşla sohbet etme” fonksiyonumuza kaldığımız yerden devam ettik.
Fonksiyon demek mantık demektir
Oyun objeleri (GameObject) pek çok girdi (Input) alabilirler, bir şeyle çarpışmak (temas etmek) (collision) veya kullanıcının bir tuşla girdi sağlaması bunlara sadece basit iki örnek. Bu girdiler belirli bir fonksiyonu, çeşitli eylemleri uygulaması için iş başına çağırırlar. Bu fonksiyonları da scriptlerinizde oluşturursunuz.    


Bir fonksiyonun oluşturulma sebebi defalarca kullanılmasından dolayıdır. Yani aynı işlemleri tek tek her seferinde yazmak yerine o işlemleri tek bir taşıyıcının (container) içine yerleştiririz ve bu taşıyıcıya bir isim veririz. Böylece bir fonksiyonumuz olmuş olur. Bu fonksiyonu bir yerde kullanmamız gerekince de orada fonksiyonun ismini yazarız ve böylece fonksiyon ilgili kısımda işini yapar.

Daha Sonra

İlerleyen zamanlarda bir fonksiyonu nasıl çağıracağınızı göreceksiniz. Şimdilik bilmeniz gereken, bir fonksiyonun belli bir işlem kümesi olduğudur ve fonksiyonların oluşturulmalarının sebebi ise fonksiyona yazılan işlemin defalarca kullanılacak olmasıdır. Yani bir dizi işlemi kendi taşıyıcısına koyup o taşıyıcıya bir isim vererek fonksiyonları oluşturmak epey akıllıcadır, sonradan da bu fonksiyonu; ismiyle dilediğimiz yerde çağırabiliriz.

15 Nisan 2014 Salı

Geçen Haftanın Detayları:Scriptlerde Değişkenler (Variable)

Scriptlerde Değişkenler (Variable)  

Bir değişken (variable) nedir?
Teknik olarak bu, bilgisayarınızın hafızasının; bir bilgiyi barındıran minicik bir parçasıdır. Bir oyun çalışırken bu değişken bilginin (information) depolandığı yeri, miktarını ve türünü sürekli gözetimi altında tutar. Sizin tek bilmeniz gerekense bir scriptte bir değişkenin (variable) nasıl çalıştığını bilmektir ki bu da oldukça kolaydır.

Bir değişken bir posta kutusuna benzer.

Bir posta kutusunun içinde hava haricinde genelde ne olur? Aslında genelde içinde bir şey olmaz, boş olur. Ancak zaman zaman içinde bir şeyler olabilir. Mesela para (maaş çeki), halanızdan bir mektup, bir örümcek vb. Asıl nokta, bir posta kutusunun içindeki şeyin farklı farklı olabilmesi, değişken olmasıdır. Peki, biz de şimdilik bu posta kutularını birer değişken (variable) olarak tanımlayalım.

Bir değişkenin adı  


Size yukarıdaki resmi gösterip de posta kutusunun içerisinde ne olduğunu sorsam heralde ilk söyleyeceğiniz şey “Hangisi?” olurdu. Eğer Ali’nin posta kutusu, kahverengi posta kutusu veya yuvarlak posta kutusu desem tam olarak hangisini kastettiğimi anlayabilirdiniz.  


Scriptlerde değişkenlerle (variable) ilgili yapmamız gereken bir başka şeyse o değişkeni adlandırmaktır. Böylece örneğin benimNumaram isimli değişkende (Veya sizin uygun gördüğünüz başka bir isim) ne depolandığını bulabiliriz.
Biraz daha teknik konuşursak, değişkenler; bilgisayarınızdaki birer hafıza adresleridirler (Memory address)(Türkçe karşılığını tam olarak bilmiyorum.). Ne zaman ki bir değişken kullanırsak bilgisayar tam olarak hafızasının (Memory) hangi kısmına bakarak veriyi bulacağını, depolayacağını bilir.
Değişkenlerin (Variable) tek yaptığı bir verinin yerine geçmektir .


Resmin sol tarafındaki isimlere bakın: Sensitivity (Mouse Hassaslığı) X, Sensitivity Y, vb.? Bunlar bir script’teki değişkenlerin (variable) isimleridirler. Sağdaki sayıları görüyor musunuz? İşte onlar da bu değişkenlerin (posta kutusu) içerisinde depolanan veridirler. Peki bu şey nasıl çalışır?
Sizin myNumber isminde bir değişkeninizin (posta kutusu) olduğunu varsayalım. Bu myNumber değişkeninin (variable) içerisinde ise 9 rakamı depolanmakta (yani posta kutusunun içinde 9 rakamı var.). Şu an bu sayı bir şey ifade etmiyor olabilir, tabi işin içine okulda gördüğünüz cebirsel matematiği koyarsanız işler değişir:
2 + myNumber = ??
Normalde rakamlarla yazıları toplayıp da sonuç elde edemezseniz. Ancak bu yazı bir scriptin içindeki bir değişkense işler değişir. Çünkü değişkenin içerisinde ne depolanmışsa o değer; ilgili rakamla toplanır. Yani bu basit toplama işleminde, 9 rakamı, depolandığı myNumber isimli değişken nerede kullanılırsa oraya yazılır, yani:
2 + 9 = 11
Uzun lafın kısası, script yazarken tanımladığınız değişkenler (variable) basit anlamda; onlara atanan değerler için birer yer tutucudurlar.      

Daha Sonra  

Böylece basit anlamda değişkenleri görmüş olduk. Onlar bir scriptte, istediğiniz herhangi bir veriyi depolamak için kullanılırlar. Değişkenler birden çok türde veri depolayabilirler, örneğin yazılar, sayılar ya da bir GameObject’in (Oyun Objesi) kendisi gibi. Değişkenlerle ilgili değişken söz dizimi (variable syntax) ve bir değişkene veri atamak ve o veriyi kullanmak gibi konuları ise daha sonra öğreneceğiz.

8 Nisan 2014 Salı

GameObject (Oyun Objesi): Scriptler ve Componentler (Parçalar)

Class (Sınıf), Component (Parça) ve Script  

Her şeyden önce, bu kelimelerin ne anlama geldiğini bilmelisiniz. Sonra da bu kelimelerin nasıl kullanıldığını bilmelisiniz. İlkokuldaykenki anılarınıza dönüş yapın ve Edebiyat öğrendiğiniz zamanları hatırlayın. Ne kadar da sıkıcı ders, ancak nasıl yazı yazacağınızı bilmeniz açısından önemli. Belki de bu kelimelerin anlamını zaten biliyor ve script’le ne alakası olduğunu anlamaya çalışıyorsunuz. Ancak bu kelimeler scriptleme aşaması için oldukça önemli ve kavranması kolay terimler.

Bu aşamada bir script’in ne olduğuyla ilgili birkaç basit açıklama yapacak ve bir script’i oluşturan iki elemanı tanıtacağım: variable(değişken) ve function(fonksiyon). Bunları açıklamak için genel, günlük yaşamdan örnekler vererek gerçekte bu terimlerin ne kadar da basit olduğunu göstereceğim. Sonraki aşamalarda ise bu basit konseptleri nasıl kullanacağımızı öğreneceğiz.

Unity GameObject (Oyun Objesi) Referans Linki  

Unity 3D GameObject Örneği

Class (Sınıf): 

Genel Tanım

Class’lar Unity’de önemli bir role sahiptir. Şimdi bir Class nedir bunu göreceğiz ve ileride göreceğimiz diğer terimlerin Class ile olan alakalarını öğreneceğiz. Peki nedir bu Class dediğimiz şey?

Basit cevap – bu herhangi bir şeyin tanımıdır, tıpkı bir sözlükte olduğu gibi.

Mesela sözlüğü açıp da “köpek” ya da “ördek” kelimelerine bakarsanız bir köpeğin ya da ördeğin ne olduğunu öğrenirsiniz. Peki “köpek” kelimesi için sözlükteki tanım ‘köpek’ midir? Elbette hayır, Ancak sözlüğün yaptığı bir köpeğin nasıl göründüğünü açıklamak ve köpeklerin sahip olduğu temel davranışları tanımlamaktır.

Unity cevabı – şöyle bir tanımlamadır:

1) Veri (data) depolamak için kullanılan değişkenlerin (variable) tanımlandığı,
2) Değişkenler (variable) üzerinde işlem yapılmasını sağlayan fonksiyonların (function) tanımlandığı bir terimdir.

Başka bir deyişle, bir Class (Sınıf) şunları tanımlamak için kullanılır:

 1) Birkaç kelime – değişken (variable) adları
 2) Bunların yapabildiği bir şeyler – fonksiyonlar (function)

Component’ler (Parça) ve Scriptler: 

Biraz sihire bulaşalım :)
  
Unity ile çalışırken iki tür şapka giyersiniz:
1) Bir Oyun Tasarımcısı (Game-Creater) şapkası
2) Bir Scriptleme (programcı) şapkası.

Oyun Tasarımcısı şapkanızı giydiğinizde; bir GameObject’i (Oyun Objesi) seçebilir ve bu objeye atanmış herhangi bir Component’in (Parça) özelliklerini (Properties) inceleyebilirsiniz.

Ne zaman ki Scriptleme şapkanızı giydiniz, o zaman işin boyutu değişir:

 - Bir script; bir GameObject’e çeşitli şeyler yaptırmak için yazılır.
 - Bir script kaydedildiğinde, artık o scriptin adı bir Class (Sınıf) adı olur – bir takım değişkenlerin (variable) ve fonksiyonların (function) depolandığı.
 - Bu Class (script dosyası) Project (Proje) dosyanızda depolanır, burada boş boş hareketsiz bir şekilde kullanılmak için bekler.
 - Şimdi Scriptleme şapkanızı çıkarın.

Ardından tekrar Oyun Tasarımcısı şapkanızı giydiğinizde ve Class’ınızı (script dosyası) bir GameObject’e (Oyun Objesi) atadığınızda sihir etkisini gösterir;
Artık Class (Sınıf) (script dosyası) objeniz bir Component (Parça) olarak tanımlanmakta ve Sınıfın (Class); public (genel) değişkenleri (variable) artık Inspector’da (UNITY arayüzündeki, sağdaki parça) göreceğiniz özelliklere (Properties) dönüşecektir.

2 Nisan 2014 Çarşamba

Unity 3d Harita Hazırlama

GAMEOBJECT => TERRAİN ( HARİTA HAZIRLAMA)


Bugün ki yazımızda Unity 3D ile örnek bir harita hazırlayacağız arkadaşlar.İlk olarak File>New Project seçiyoruz.Yeni proje oluşturuyoruz.Menülerden GameObject>Crete Order>Terrain seçiyoruz.Sahneye oluşturacağımız haritayı ekliyoruz.Daha sonra Terrain>Options dan boyutunu ayarlıyoruz.Boyutları ayarladıktan sonra çizmeye başlıyoruz arkadaşlar.Ben videoda örnek bir harita yaptım.Sizinde çizim kabiliyetinize göre daha iyi haritalar yapabileceğinizi söyleyerek yazımı bitiyorum.

26 Mart 2014 Çarşamba

RIGIDBODY (Yerçekimi) COMPONENT

RIGIDBODY COMPONENTI

Yeniden birlikteyiz bugünkü dersimizde bir classı sınıfı ve aynı zamanda unity3d de çok önemli bir yere sahip olan  nesnelerin fiziki yapısını içine alan rigidbodyi her yönüyle inceleyeceğiz.


Şekildeki gibi bir küp oluşturduktan sonra oyunumuzu başlattığımızda küpün yerinden oynamadığını sabit bir şeklide durduğunu yer çekimi kuvvetinden etkilenmediğini görüyoruz.
Tahmin edebileceğiniz üzere rigidbody componenti ekleyerek yer çekimi etkisi yaratabiliriz küp objesi içinbunun için küp objesine tıklayarak şekildeki adımları takip edelim.

Oyunumuzu tekrar başlattığımızda küpün yer çekiminden etkilendiğini ve yere düştüğünü görürüz.Rigidbody sadece yer çekimini getirmez belli başlı fizik unsurlarını  da beraberinde getirir.

Gördüğümüz gibi rigidbody componentinde birçok seçenek bulunmakta bunlardan mass isimli en yukarıda ki seçenek objemizin ağırlığını belirlememizi sağlar.Drag sürükleme yavaşlatma anlamındadır ve nesneyi bir paraşüt açmış havasına sokar yavaş yavaş yere doğru indirir yani hava sürtünme kuvvetini artırır.Değeri ne kadar artılırsa sürtünme o kadar artar. Angular Dragın farkı ise düşerken dönme açılarını da düşürmek yavaşlatmaktır.

Use Gravityi bizim yapmaya çalıştığımız şeydir yani yer çekimi bu seçenekteki tiki kaldırırsak yer çekimi yokmuş gibi davranır objemiz.objemiz. Kinematic özelliği ise daha çok animasyonlarda işe yarar ve insanların veya cisimlerin eklem yerlerindeki fizik olaylarının doğru çalışmasını sağlar.İnterpolate i şuan anlatmayacağım kullamanız lüzumsuz olan bir seçenek.Collision Detection objenin diğer bir objeyle karşılaşığında çarpması yada devam etmesi seçeneklerini barındırır.

19 Mart 2014 Çarşamba

Unity 3D Game Object-Component İlişkisi

GameObject - Component İlişkisi

GameObject

GameObject’ler Unity’nin en önemli parçasıdırlar. Bir GameObject’in ne olduğunu ve nasıl kullanıldığını anlamak çok önemlidir. Bu bölüm size bunu açıklayacaktır.

GameObject Nedir?

Oyununuzda yer alan her bir obje bir GameObject’tir. GameObject’ler tek başlarına hiçbir şey yapamazlar. Bir GameObject; bir karakter, ağaç veya özel efekt olmadan önce üzerinde özel ayarlamalar yapılmalıdır. Ama az önce saydığım şeyler birbirinden oldukça farklı şeylerdi diye düşünebilirsiniz. Örneğin sabit (static) bir oda objesini bir kuş objesinden farklı kılmayı nasıl başarabileceğimizi merak edebilirsiniz. Evet o hâlde bu GameObject’leri birbirinden farklı kılan şey nedir?

Bunun cevabını şöyle verebiliriz: GameObject’ler birer taşıyıcıdırlar. Onlar boş birer kutudurlar ve bizler bu kutunun içine değişik parçalar sokarak bir ada ya da fiziksel bir araba oluştururuz. O yüzden GameObject’leri gerçekten anlamak için bu parçaları da anlamalısınız, biz bu parçalara Unity’de Component (Parça) diyoruz. Nasıl bir obje oluşturacağınıza bağlı olarak, bir GameObject’in içerisine değişik Component’ler atayarak farklı farklı kombinasyonlar kurarsınız. GameObject’i boş bir tencere olarak düşünün ve Component’leri de bu tencereye koyduğunuz farklı farklı içerik olarak düşünün. Unity’nin içerisindeki hazır Component’leri kullanabileceğiniz gibi script yazarak kendi Component’lerinizi de oluşturabilirsiniz.

Konuya ısınmaya başladıysanız biraz daha detaya inmeye hazırız demektir.

1) GameObject - Component İlişkisi

Az önce de söylediğimiz gibi, GameObject’ler çeşitli Component’ler içerirler. Şimdi bu ilişkiyi, GameObject’i ve en yaygın Component’i olan Transform Component’ini inceleyerek daha yakından göreceğiz. Unity’de herhangi bir sahnedeyken yeni bir GameObject oluşturun (Kısayol tuşu CTRL+Shift+N, Mac’deyse Command+Shift+N), oluşturduğunuz bu GameObject’i seçin ve ardından Inspector paneline dikkatinizi verin.
Yukarıda boş bir GameObject’in Inspector’daki görünümü verilmiştir. Bir GameObject’in boş olmasına rağmen yine de bir isme (Name), Tag’a (Etiket) ve Layer’a (Katman) sahip olduğuna dikkat edin. Ayrıca buna ek olarak her GameObject, oluşturulduğu anda bir Transform Component’ine sahip olur.

Transform Component’i

Unity’de Transform Component’ine sahip olmayan bir GameObject oluşturmanız imkansızdır. Transform Component’i en önemli Component’lerden biridir. Bu Component, GameObject’in 3 boyutlu uzaydaki konumunu (position), yaptığı açıları (rotation) ve boyutunu (scale) ifade eder. Eğer bir GameObject’in içerisinde Transform Component’i yoksa o GameObject sadece bilgisayarın hafızasındaki bir bilgidir. O GameObject kesinlikle 3 boyutlu dünyada yer almaz.
Transform Component’i ayrıca Parenting adında bir konsepti de mümkün kılar. Bu işlemi UnityEditor’den yaparsınız. Parent atama işlemi GameObject’lerle çalışırken sık sık kullanacağınız, çok önemli bir işlemdir. Transform Component’i ve Parent atama işlemi hakkında daha detaylı bilgi için Unity’nin kendi kılavuzuna bakabilirsiniz.

Diğer Component’ler

Transform Component’i her GameObject’te bulunur ve bu yüzden çok önemlidir. Ancak bir GameObject bunun dışında başka Component’lere de sahip olabilir.
Yukarıda, yeni bir sahne oluşturduğunuzda otomatik olarak oluşturulan Main Camera objesinin Component’lerini görüyorsunuz. Bu resme bakarak Main Camera GameObject’inin Camera, GUILayer, Flare Layer ve Audio Listener olmak üzere çeşitli Component’lerden oluştuğunu fark etmişsinizdir. Tüm bu Component’ler o GameObject’e bir takım fonksiyonellik verir. Onlar olmadan, oyuncuya bir görüntü verecek render işlemi gerçekleşmezdi!

2) Component Kullanımı

Component’ler, oyununuzda yer alan objelerin bel kemiğidirler. Onlar GameObject’leri fonksiyonel kılmaya yarar.

Daha önce de bahsettiğimiz gibi; bir GameObject, çeşitli Component’leri barındıran bir taşıyıcıdır. Başlangıçta otomatik olarak tüm GameObject’lerde Transform Component’i bulunur. Bunun sebebi de Transform’un, o objenin konumunu, yaptığı açıları ve boyutunu ifade etmesidir. Transform Component’i olmadan bir GameObject 3 boyutlu uzayda yer alamazdı. Şimdi boş bir GameObject oluşturun. Bunun için menüden GameObject -> Create Empty yolunu izleyebilirsiniz. Oluşturduğunuz GameObject’i seçin ve Inspector paneline bakın.
Inspector panelini bir GameObject’e hangi Component’lerin atandığını görmek için kullanabilirsiniz. Component’ler silindikçe ya da atandıkça bu işlem aynı zamanda Inspector panelinde de gözükür. Inspector panelini kullanarak Component’lerin herhangi bir özelliğini değiştirebilirsiniz. (Buna scriptler de dahildir.)

Yeni Component Eklemek (Atamak)

Bir GameObject’e yeni bir Component eklemek için Components menüsünü kullanırsınız. Az önce oluşturduğumuz GameObject’e bir Rigidbody Component’i (Katı cisim yapmaya yarayan, yerçekimi gibi fizik kurallarını bir objeye uygulamak için gerekli olan Component) ekleyerek bu işlemi öğrenelim. Objenizi seçin ve menüden Component -> Physics -> Rigidbody seçeneğini seçin. Bunu yaptığınızda Inspector panelinde Rigidbody’nin özelliklerinin belireceğini fark edeceksiniz. Eğer şimdi Play butonuyla oyununuzu test ederseniz küçük bir sürprizle karşılaşacaksınız. Bunu deneyin ve bir Component’in GameObject’i nasıl fonksiyonel kıldığını görün. (GameObject’inizin y eksenindeki koordinatı azalacaktır. Bunun sebebi Unity’nin fizik motorunun GameObject’i artık bir yerçekiminin etkisi altına almasıdır.)
Bu resimde Rigidbody Component’i eklenmiş GameObject’i görebilirsiniz. Tek bir GameObject’e dilediğiniz kadar Component ekleyerek değişik kombinasyonlar uygulayabilirsiniz. Bazı Component’ler başka Component’lerle kombine edilince en iyi çalışırlar. Örneğin, Rigidbody ile Collider Component’leri beraber çalışırlar. Rigidbody, NVIDIA PhysX fizik motoru vasıtasıyla objenin Transform Component’ine etki ederken Collider de Rigidbody’nin çeşitli objelerle etkileşime geçmesini sağlar. Başka bir kombinasyon örneği de partikül sistemidir. Bu sistem Particle Emitter, Particle Animator ve Particle Renderer Component’lerini kombine ederek hareketli partiküller oluşturur.

Herhangi bir Component hakkında çok daha detaylı bilgi almak için Unity’nin kendi kılavuzuna göz atabilirsiniz. Ayrıca Inspector’dayken bir Component’in isminin sağındaki soru işaretli simgeye tıklayarak da o Component hakkında yardım alabilirsiniz.

Component’leri Düzenlemek

Component’lerin en güzel özelliklerinden birisi de esneklik sunmalarıdır. Bir GameObject’e Component atadığınızda Inspector panelinde o Component’in çeşitli özellikleri (Properties) belirir ve bu değerleri gerek Inspector’dan, gerek oyun sırasında scriptler vasıtasıyla istediğiniz gibi değiştirebilirsiniz. Burada 2 çeşit özellik bulunmaktadır: Değerler (Value) ve Referanslar.

Alttaki resme bakın. Bu, Audio Source Component’i eklenmiş boş bir GameObject’tir. Resimde gördüğünüz değerler varsayılan değerlerdir.
Bu Component tek bir Referans özelliği ve yedi adet Değer özelliği içermektedir. Audio Clip (Ses Klibi) özelliği referanstır. Bu Audio Source Component’i çalıştığında, Audio Clip’te referans olarak gösterilen klibi çalacaktır. Eğer referans belirtilmemişse hata verecektir. Buraya bir referans atama işlemini Inspector’dan yapmalısınız. Bunu yapmak içinse Proje panelinden bir ses dosyasını referans kısmına sürüklemek ya da Object Selector’u (Obje Seçici) kullanmak yeterlidir.
Gördüğünüz gibi, şimdi bu Component’imize bir ses klibi (Audio Clip) referans olarak atanmış durumdadır. Component’ler daha farklı türlerde referanslar da içerebilirler, başka Component, GameObject ya da Asset’ler gibi.

Buradaki Audio Clip’in diğer tüm özellikleri birer Value’dir (Değer). Değerleri direk Inspector  üzerinden değiştirilebilir. Audio Clip’in Value özellikleri işaretlenebilir kutucuklardan, nümerik değerlerden, açılabilir kutucuklardan oluşuyor ancak bir değer ayrıca string (yazı), renk, eğri veya başka türde de olabilir. Bunlar hakkında daha detaylı bilgi Unity kılavuzunda mevcuttur.

Değerlerin Test Edilmesi

Play Mode’deyken (Oynatma Modu) bir GameObject’in herhangi bir değerini Inspector’dan dilediğinizce değiştirebilirsiniz. Mesela farklı yüksekliklerde zıplayabilmenin nasıl olacağını test edebilirsiniz. Eğer bir scriptte Ziplama Yuksekligi adında bir değişken oluşturursanız, Oynatma Modundayken bunun değerini değiştirebilirsiniz ve zıplama tuşuna basıp yaptığınız değişikliğin etkilerini test edebilirsiniz. Ardından Oynatma Modundan çıkmadan bu değeri tekrar değiştirebilir, farkı saliseler içerisinde oyununuzda test edebilirsiniz. Unutmayın, Oynatma Modundan çıktığınızda, Oynatma Modundayken yaptığınız değişiklikler resetlenerek eski değerlerine dönerler. Oynatma Modunda bir özelliğin değerini değiştirerek anlık testler yapabilir, çeşitli ayarlamalar ve kalibrasyonlar uygulayabilirsiniz. Bunu kendiniz de deneyin. Bu özelliği kullandıktan sonra etkileneceğinizi düşünüyorum.

Component’leri Silmek

Eğer bir Component’i silmek istiyorsanız, Component’in ismine sağ tıklayın ve Remove Component
seçeneğini seçin. Ya da alternatif olarak ? işaretinin sağındaki küçük dişli simgesine tıklayabilirsiniz. Bu Component’e ait tüm özellikler de onunla beraber gidecektir ve unutmayın; bu işlemi geri alamazsınız! Bu yüzden o Component’i silmek istediğinizden iyice emin olun.

3) Component - Script İlişkisi

Bir script oluşturduğunuzda ve bu scripti bir GameObject’e atadığınızda script, tıpkı Component’lerde olduğu gibi GameObject’in Inspector panelinde belirir. Bunun sebebi scriptlerin atandıkları zaman birer Component’e dönüşmeleridir, çünkü scriptler de birer özelleştirilebilir Component çeşididirler. Yani anlayacağınız; scriptler, kendi oluşturabileceğiniz Component’lerdirler. Scriptlerin içerisinde, Inspector’da gözükecek özellikleri girersiniz ve script içerisine ne yazdıysanız oyun sırasında bu kod aynen çalıştırılır.

Scriptler hakkında daha detaylı bilgi için Unity’nin kılavuzuna başvurabilirsiniz. Böylece bu bölümün de sonuna geldik. Hazırsanız sonraki bölüme geçebilirsiniz.

12 Mart 2014 Çarşamba

Menülere Devam Ediyoruz Arkadaşlar




Bu dersimizde Assets Menüsünü göreceğiz.Unity3D ‘de assets’ler texture,obje,kod,prefabrik obj. vb. gibi oyun motoru öğelerini kapsayan temel kavramdır.

Assets menüsü altındaki seçenekler şunlardır :


Create ( Oluştur ) : Yeni bir obje , component , kod vb.  öğeler eklememizi sağlar.
Show in explorer ( Sistemde göster ) : Proje dosyalarının bulunduğu ana klasörü windows’da açar.

Open ( Aç ) : Bir assets dosyasını açar.

Delete ( Sil ) : Bir assets dosyasını siler.

Import New Asset ( Yeni asset aktar ) : Programa yeni bir asset dosyası aktarırız.

Import  Package ( Paket aktar ) : Asset dosyaları bazen paket halinde bulunur.Unity3D nin 
hazır paket halinde asset dosyaları vardır.Bu ve bunun gibi paketleri programa aktarmak için bu seçenek kullanılır.

Export Package ( Paket çıkart ) : Programa dahil olan asset dosyalarını export’lar.

Select Dependencies : Öğeleri seçimden kaldırıyor.

Export compressed audio file : Oyundaki ses öğelerini sıkıştırarak çıkarıyor.

Refresh ( Yenile ) : Assets alanını yeniler.

Reimport ( Tekrar aktar ) : Daha önceden import edilen asset klasörüne yeni bir öğe eklediyseniz reimport seçeneği yeni öğeleri tekrar aktarır.

Reimport All ( Hepsini tekrar aktar ) : Tüm asset klasörlerini yeniden aktarır.

Sync Monodevelop Project : Unity3D nin kod editörü olan Monodevelop’u programa senkronize bir şekilde çalıştırır.

4 Mart 2014 Salı

Unity 3D Menüler

Bu haftaki yayınımızda Unity 3D menülerini ve arayüzünü
hızlı bir şekilde tanıtıp ileri ki konularda tasarım yapmaya başlayacağız arkadaşlar.

=================FİLE(DOSYA)==================



New Scene ( Yeni Sahne ) : Oyunumuzu tasarlarken yeni bir sahne oluşturmamıza yarar.Peki “Nedir bu sahne ?” diye sorarsanız ; Oyun için tasarlanmış her bölüme sahne diyebilir.

Open Scene ( Sahne Aç ) : Daha önceden oluşturduğumuz bir sahneyi açmak için kullanılan seçenektir.

Save Scene ( Sahneyi kaydet ) : Oluşturduğumuz sahneyi kaydetmek için kullanılan seçenektir

Save Scene as (Sahneyi Farklı kaydet ) : Oluşturduğumuz sahne daha önce kayıtlıysa ve biz farklı bir isimde
farklı bir yere kaydetmek istiyorsak bu seçenek kullanılır.

New Project ( Yeni Proje ) : Yeni bir Proje oluşturmak için kullanılır. Yeni bir proje oluşturduğumuzda program bulunduğunuz projeyi kapatır ve yeni bir proje oluşturmak için seçenekleri karşınıza getirir.
Open Project ( Proje Aç ) : Daha önceden oluşturduğumuz bir projeyi açmak için kullanırız.

Save Project ( Projeyi Kaydet ) : Projeyi kaydetmek için kullanırız.

Build Settings ( Yapılandırma Ayarları ) : Oyunumuzu tamamladığımızda  Build Settings seçeneği ile
oyunumuzun Platform ( MAC , Windows vs. ) , çözünürlük ve icon vb. ayarlarını yaptığımız seçenektir.

Build & Run ( Yapılandır ve Çalıştır ) : Oyunumuzu tamamladığımızda bu seçenek ile dışa
aktarabiliriz.Aktarım bittikden sonra oyun çalışır.

Exit ( Çıkış ) : Programdan Çıkmamızı Sağlar.


=================EDİT(DÜZEN)=================

Undo ( Geri al ) : Programlar yaptığımız her adımı ‘History’ denen bellekte tutar.Eğer biz yanlış bir adım uyguladıysak yada paşa gönlümüz bir önceki adıma geri dönmek istiyorsa bu seçenek kullanılır.

Undo move to view ( Önceki hareketi göster ) : Bu seçenek sahnenin bakış açısını değiştirdiğimizde Undo yazan yerde belirir.Bir önceki bakış açısına hareket eder.

Redo ( İleri al ) : Tahmin ettiğiniz gibi ‘Undo’ işleminin tersidir.

Cut ( Kes ) : Temel kesme işlemi.

Copy ( Kopyala) : Temel kopyalama işlemi.
Paste ( Yapıştır ) : Temel yapıştırma işlemi.

Duplicate ( Klonlama) : Bu seçenek nesne seçili iken o nesnenin aynısından bir tane daha oluşturur.

Delete ( Sil ) : Temel Silme işlemi.

Preferences ( Tercihler ) : Oyun motoruyla ilgili tercihlerin ( x,y,z axis’lerini temsil eden renkler , FPS default kontroller vb. ) ayarlandığı seçenektir.

Play ( Oynat ) : Projeyi oynat.

Pause ( Durdur ) : Projeyi durdur.

Step ( Adım ) : Bir sonraki Frame’e ilerletmek için bu seçenek kullanılır.

Load selection ( Seçimi Yükle ) : İleri ki derslerde değineceğim.

Save selection ( Seçimi Kaydet ) : İleri ki derslerde değineceğim.

Project Settings ( Proje Ayarları ) : Proje ile ilgili ayarların yapıldığı bölümdür. Menü ve Alan dersleri bittiğinde örnek uygulamalarla UnityScript'i öğrenmeye başladığımızda bu seçeneğin ayrıntılarını göstereceğim.

Render settings : Projemizin gökyüzü,ışıklandır vb. gibi ayarlarını yaptığımız bölüm.Ayrıntılara ileri ki derslerde gireceğiz.

Network Emülation ( Ağ emülasyonu ) : Multiplayer ayarlarının yapıldığı seçenek.

Graphics Emülation ( Grafik emülasyonu ) : Grafik ayarlarının yapıldığı seçenek.(DirectX ver. vb. )

Snap settings : X,Y,Z hareketleri ile ilgili ayarların yapıldığı seçenektir.


26 Şubat 2014 Çarşamba

Unity 3D


UNİTY 3D NEDİR?

Unity3D rusyada geliştirilen ve yayınlanan bir oyun motorudur.Aslında amacı oyun yapmak değildi daha farklı bir şey için kullanılacaktı,oyunları bilgisayarınıza yüklemeden Unity Web Player ile oyunları internet üzerinden oynayabilmekti.Bu çok iyi olacaktı , hem oyunlarda korsanın önüne geçilecek ve oyununu sadece kendi internet sitesinden dahi oynatabilecekti.Fakat Unity3D bununla yetinmeyerek dahada kendini geliştirdi.Unity3D 2012 aralık ayında 4.0 versiyonu ile resmi olarak Desktop, Android, IOS, Flash Player, PS3, Web Player ve XBOX platformlari icin oyun yapmaniIa imkan saglamaktadir.Unity3D 3 boyutlu oyun yapmanıza olanak sağlayan bir oyun motorudur fakat 2D oyun yapılmaz mı ? , tabi ki yapılabilir fakat doğal olarak motor 3D olduğundan 3 boyutlu oyun yapmanız tavsiye edilir.Unity3D oyun motoru Unity Engines tarafindan C/C++ ile gelistirilmistir. Unity 4.0 sürümü ile C#, JavaScript, Boo ve DirectX dilleri ile oyun geliştirmenize destek vermektedir.

DİĞER OYUN MOTORLARINDAN FARKI?

Diğer motorlardan farkı hem ucuz olması, hem kaynağının bol olması, hemde yaptığınız oyunu bir tıklamayla bütün platformlara çevirebiliyor olması en büyük avantajlarındandır.Android için yaptığınız bir oyunu , ios gibi platformlarada çevirmenizi sağlar bu sayede bir daha aynı oyun için diğer platformlarda uğraşmanız gerekmez.Bunun için çok fazla tercih edilen bir oyun motorudur.

FİYATLANDİRMA VE LİSANSLARI

Öncelikle Unityi çok ileri seviye kullanmayacaksanız motoru bedava olarak kullanabilirsiniz.Eğer Web Player veya Bilgisayar için kullanacaksanız ve Unity3D'nin çok uç özelliklerine ihtiyacınız yoksa dediğim gibi bedava kullanmanız mümkündür .Unity3D´yi bedava olarak kullanabilir oyun yapabilir ve hatta Unity Engines´e hiç bir ücret ödemeden  Free versiyon  ile yaptığınız oyunu piyasaya sürebilirsiniz. Bu özelliği ile en çok tercih edilmesinin başlıca sebeplerindendir.Unity3D kendi içerisinde iki çeşit olarak değişir , Free versiyon ve Pro versiyon olmak üzere iki çeşit haline gelir.Eğer Unity3D´nin Free sürümü üzerine Android, IOS, Adobe Flash Player platformlarını satın almak isterseniz bunların her biri ayrı ayrı olarak 400$ ´ dır.Eğer Unity3D´nin Pro sürümünü kullanacaksanız,öncelikle bunun üstüne platform satın alabilmeniz için 1500$ dolar vererek Unity Pro´ yu satın almalısınız.Tabi ki 1500 $ boşuna vermeyeceksiniz , Free sürümünden farklı olarak sizlere ek özelliklerde sunacaktır.Bunun üstüne platform satın almak isterseniz her biri için yine 1500$ gibi bir ücret vermek zorundasınız.


                                                       

UNİTY3D İLE YAPILAN OYUNLAR?

Unity3D ile birçok oyun tasarlanmıştır,ünlü oyunlardan Battlestar Galactica, Legends of Aethereus gibi birçok meşhur oyun Unity3D ile tasarlanmıştır.Mobil oyunlar içinde aynı şekilde bu geçerlidir , sayamadığım birçok oyun , Run 2, Dead Trigger 2, Bad Piggies,
Bladeslinger gibi oyunlarda Unity3D ile tasarlanmıştır.



NASIL İNDİRİLİR ?

Unity3D oyun motorunun en son versiyonunu Unity3D resmi sitesinden
Unity3D indirebilirsiniz.