Unity Yeni Başlayanlar İçin Notlar 6; İnput , Ses , Zaman , Save , Debug

      Unity Yeni Başlayanlar İçin Notlar 6; İnput , Ses , Zaman , Save , Debug

      OYUNCU İLE KLAVYE-MOUSE ETKİLEÅžİMİ (INPUT)


      Input.GetAxis( "Axis Adı" : String ): İçerisine "Horizontal" ya da "Vertical" yazılır. Örneğin "Vertical" yazılmışsa, yukarı ok tuşuna basıldığında değeri 1, geri ok tuşuna basıldığında -1, hiçbirine basılmadığında 0 olur. Ancak sol veya sağ ok tuşuna basarsan bir şey olmaz. Olması için içinde "Vertical" yerine "Horizontal" yazmalıdır. Hareket scriptlerinde kullanılabilecek çok pratik bir koddur.

      NOT: Input.GetAxis() komutunda yumuşatma işlemi uygulanmaktadır. Yani klavyede yukarı ok tuşuna basınca "Input.GetAxis( "Vertical" );" direkt 1 değerini döndürmez, onun yerine her bir frame'de azar azar artarak (0.1, 0.23 vb. şeklinde) kısa bir sürede 1 döndürülür. Yukarı ok tuşu bırakılınca da aynı şekilde hemen 0 döndürülmez, azar azar azalarak 0'a yaklaşılınır.

      Input.GetAxisRaw( "Axis Adı" : String :( Input.GetAxis()'ten tek farkı bu komutta yumuşatma işlemi uygulanmamasıdır. Yani mesela "Input.GetAxisRaw( "Vertical" );" komutu, yukarı ok tuşuna basıldığı anda 1 döndürür.

      Input.GetButton( "Önceden Belirtilmiş Tuşun Özel Adı" : String ): İlgili tuşa basılı tutulup tutulmadığını test eder. Eğer ‘Input.GetButtonDown’ kodu kullanılırsa sadece tuşa basıldığı ilk anda olaylar gerçekleşir. ‘Input.GetButtonUp’ kodu kullanılırsa da olaylar tuştan elimizi çekince gerçekleşir. Örnek bir tuş adı: ‘Fire1’, mousenin sol tuşu veya CTRL tuşu yerine geçer.

      Buraya girilebilecek tuş isimleri ve onların hangi butonlara ayarlandığı ‘Edit – Project Settings – Input’ yoluyla açılan Inspector penceresinde ‘Axes’ seçeneği altında görünür.

      Input.GetKey( tusKodu : KeyCode ): Bunun ‘Input.GetButton()’dan farkı, bu scriptte kullanabileceğimiz tuşların ‘Input’ kısmında önceden tanımlanmış olan tuşlarla sınırlı olmaması. Bu script ile klavyedeki tüm tuşlar için işlem yapılabilir. İşlem, ilgili tuşa basılı tutulduğu sürece gerçekleşir. Eğer ‘Input.GetKeyDown’ kullansaydık tuşa bastığımız anda, ‘Input.GetKeyUp’ kullansaydık tuştan elimizi çektiğimiz anda gerçekleşirdi.

      İçerisine girilebilecek ‘KeyCode.Escape’ argümanı klavyedeki ESC tuşunu ifade eder. Onun yerine herhangi bir tuş da kullanılabilir; "KeyCode.Backspace" "KeyCode.Keypad7" "KeyCode.UpArrow" "KeyCode.F1" "KeyCode.Home" "KeyCode.R" "KeyCode.T" "KeyCode.LeftControl" "KeyCode.Mouse1" vb. pek çok tuş gibi…

      Input.GetMouseButton( mouseTuşu : int :( Mousenin bir tuşuna basılı tutulup tutulmadığını kontrol eder. Eğer ‘Input.GetMouseButtonDown’ kodu kullanılırsa sadece ilgili tuşa basıldığında, ‘Input.GetMouseButtonUp’ kullanılırsa da sadece o tuştan el çekilince ilgili olaylar gerçekleşir. 3 adet tanımlı tuş bulunur. Eğer değeri ‘0’ girilirse sol mouse tuşu, ‘1’ girilirse sağ mouse tuşu, ‘2’ girilirse de orta mouse tuşu ele alınır.

      Input.anyKeyDown : boolean: Mevcut karede (frame) herhangi bir mouse ya da klavye tuşuna basılıp basılmadığını döndürür. Daha önceki bir kareden basılı tutulan bir tuş true döndürmez, tuşa mevcut frame'de basılması gereklidir.

      Input.anyKey : boolean: Herhangi bir mouse ya da klavye tuşuna basılıp basılmadığını döndürür. Daha önceki bir kareden basılı tutulan bir tuş da true döndürür, tuşa tam mevcut frame'de basılması gerekli değildir.



      SES – MÜZİK KOMUTLARI


      audio.PlayOneShot( sesDosyasi : AudioClip :( Bir ses dosyasını, tek bir kere çalmayı sağlar.

      audio.Play(): Eğer ki objenin ‘Audio Source’ componentine bir ses dosyası hâli hazırda atanmışa bu komut o ses dosyasını çalmaya yarar. Veya şöyle de kullanılabilir:


      GameObject.Find("Araba").GetComponent(AudioSource).Play();

      Bu komutla "Araba" objesinin Audio Source componentine atanmış olan sesi çalabilirsin.

      audio.Pause(): Scriptin yazıldığı objede çalınan ses dosyasını duraklatmaya yarar. Daha sonra ‘audio.Play()’ komutuyla çalmaya devam edilebilinir.

      audio.Stop(): Scriptin yazıldığı objede çalınan ses dosyasını durdurmaya yarar.

      AudioSource.PlayClipAtPoint( sesDosyasi : AudioClip, calinacagiKonum : Vector3 ): Ses dosyasını, uzayda herhangi bir konumda çaldırmaya yarar. Bu kodun güzel yanı, kodun uygulandığı objenin "Audio Source" Component’ine sahip olmak zorunda olmamasıdır. Çünkü bu kod gerçekleştirildiğinde sesi çaldıracak, geçici yeni bir obje, belirtilen konumlarda oluşturulur ve sesi çalıp bitirdikten sonra otomatikman kendisini yok eder.



      g) ZAMANLA (SÜRE)(HIZ) İLGİLİ KOMUTLAR


      Time.deltaTime : float : Bir step yerine bir saniyeyle işlem yapılmasını sağlar. Örneğin; ‘transform.Translate(Vector3.forward*5*Time.deltaTime)’ koduyla kodun uygulandığı objenin 1 saniyede 5 metre ileri gitmesi sağlanır.

      Time.time : float : Oyun başladıktan bu yana geçen toplam süreyi saniye cinsinden sayar. Değeri değiştirilemez, sadece okunabilir.

      yield WaitForSeconds( saniyeCinsindenBeklenecekSureMiktari : float ): Kodun geri kalanının yapılmasından önce belirtilen süre kadar beklenilmesini sağlar.

      Time.timeScale : float : Değeri 0 ile 1 arasında olmak zorundadır. Yaptığı şey zamanı yavaşlatmaktır. Yanislow-motion yapmanıza olanak tanır. Ayrıca eğer değeri 0 yapılırsa zaman tamamen durur, yani oyun "Pause" olur. Ardından değeri 1 yapılırsa zaman normale döner.



      SAVE – LOAD SİSTEMİ


      NOT: Buradaki PlayerPrefs komutlarıyla yapılan kayıtlar Windows'ta Registry Editor'de "HKCU\Software\[şirket ismi]\[ürün ismi]" konumuna, MAC OS X'te ise " ~/Library/Preferences" konumundaki "unity.[şirket ismi].[ürün ismi].plist" adlı bir dosyaya kaydedilmektedir. Eğer oyun WebPlayer üzerinden çalıştırılıyorsa o zaman Windows'ta "%APPDATA%\Unity\WebPlayerPrefs" konumunda, MAC OS X'te ise "~/Library/Preferences/Unity/WebPlayerPrefs" konumunda kayıtlar yapılır.

      PlayerPrefs.SetInt( "Anahtar İçin İsim" : String, deger : int :( Bir int değişkenin değerini depolamaya yarar. Buradaki "Anahtar İçin İsim", değişkenin ismiyle aynı olmak zorunda değildir. "Anahtar İçin İsim" ismi, kaydettiğimiz bu int değere sonradan ulaşmak için gereklidir.

      PlayerPrefs.GetInt( "Anahtar İçin İsim" : String :( Daha önce kaydedilmiş bir int değere ulaşmak için kullanılır. Eğer girilen "Anahtar İçin İsim" isminde bir anahtar yoksa varsayılan olarak 0 döndürülür.

      PlayerPrefs.SetFloat( "Anahtar İçin İsim" : String, deger : float :( Bir float değişkenin değerini depolamaya yarar.

      PlayerPrefs.GetFloat( "Anahtar İçin İsim" : String :( Daha önce kaydedilmiş bir float değere ulaşmak için kullanılır. Eğer girilen "Anahtar İçin İsim" isminde bir anahtar yoksa varsayılan olarak 0.0F döndürülür.

      PlayerPrefs.SetString( "Anahtar İçin İsim" : String, "Değer" : String :( Bir String değişkenin değerini depolamaya yarar.

      PlayerPrefs.GetString( "Anahtar İçin İsim" : String :( Daha önce kaydedilmiş bir String değere ulaşmak için kullanılır. Eğer girilen "Anahtar İçin İsim" isminde bir anahtar yoksa varsayılan olarak "" döndürülür.

      PlayerPrefs.HasKey( "Anahtar İsmi" : String :( Girilen "Anahtar İsmi"ne sahip bir anahtarın olup olmadığını,booleancinsinden döndürür.

      PlayerPrefs.DeleteKey( "Anahtar İsmi" : String :( Girilen "Anahtar İsmi"ne sahip anahtarı ve değerini silmeye yarar.

      PlayerPrefs.DeleteAll(): Åžimdiye kadar oluşturulmuş tüm anahtarları ve değerlerini silmeye yarar.



      DEBUG (KONSOL) KOMUTLARI


      Debug.Log( "Yazı" : String ): Debug konsoluna ilgili String yazıyı yazdırır. print("Yazı") komutu da aynı işi yapar.

      Debug.DrawRay( baslangicKonum : Vector3, dogrultu : Vector3, renk : Color :( Sadece oyunu tasarlarken "Scene" penceresinde gözüken, hayali bir çizgi çizer. Önce çizginin başlangıç noktası, sonra yönü ve uzunluğu, sonra da rengi belirlenir.

      Debug.Break(): Oyunu test ederken pause etmeye yarar. Oyuna devam etmek için elle ‘Play’ tuşuna basılmalı.