26 Temmuz 2016 Salı

UNITY GETCOMPONENT KULLANIMI

Bir nesnenin componentlerine ulaşmak için kullanılır.Bu nesne dışarıdan bir nesne olabileceği gibi scriptin yazılmış olduğu nesne içinde kullanılabilir.Hatta bu komutun bazı varyasyonları ile kendi alt nesnelerinin componentlerine de ulaşabilirler.

public class UsingOtherComponents : MonoBehaviour
{
    public GameObject otherGameObject;
    
    
    private AnotherScript anotherScript;
    private YetAnotherScript yetAnotherScript;
    private BoxCollider boxCol;
    
    
    void Awake ()
    {
        anotherScript = GetComponent<AnotherScript>();
        yetAnotherScript = otherGameObject.GetComponent<YetAnotherScript>();
        boxCol = otherGameObject.GetComponent<BoxCollider>();
    }
    
    
    void Start ()
    {
        boxCol.size = new Vector3(3,3,3);
        Debug.Log("The player's score is " + anotherScript.playerScore);
        Debug.Log("The player has died " + yetAnotherScript.numberOfPlayerDeaths + " times");
    }
}

public class AnotherScript : MonoBehaviour
{
    public int playerScore = 9001;
}
public class YetAnotherScript : MonoBehaviour
{
    public int numberOfPlayerDeaths = 3;
}

UNITY ONMOUSEDOWN KOMUTU

void OnMouseDown ()
    {
        rigidbody.AddForce(-transform.forward * 500f);
        rigidbody.useGravity = true;
    }
Bu komut ile nesnenin üzerine mouse ile tıklanıldığında ne yapılacağını göstermiş olursunuz.Mouse ile tıklanıldığında sadece 1 kez çalışır.Basılı tutulması gibi durumlar için veya mouse üzerine gelince bırakınca gibi kodlar için IPointer interfaceleri tanımlanmalıdır.Bunlar ise eventSystem içindedir.Genelde canvas ve UI elemanlar için kullanırım.Lakin onMouseDown komutu oyun için de kullanılır. 

22 Temmuz 2016 Cuma

GETBUTTON VE GETKEY

Bu kavramlar kullanıcının klavye etkileşimini ifade eder.Şimdi daha akından bakalım

- GetButton = Belirlenen bir tuşa basılı kaldığı sürece true değer döner.

- GetButtonDown = Belirlenen bir tuşa ilk basıldığında 1 kez true değer döner.

- GetButtonUp = Belirlenen ve basılan tuş bırakıldıında 1 seferlik true değer döner

GetKey bundan farklı değildir sadece getButton da Key ile ulaşılan bir yerin ismini direkt olarak kullanırsınız. Örneğin "jump" derseniz space olduğunu anlar ama getkey de space e basılacağını söylemelisiniz.  .

GetKey Kullanımı

  void Update ()
    {
        bool down = Input.GetButtonDown("Jump");
        bool held = Input.GetButton("Jump");
        bool up = Input.GetButtonUp("Jump");
        
        if(down)
        {
            graphic.texture = downgfx;
        }
        else if(held)
        {
            graphic.texture = heldgfx;
        }
        else if(up)
        {
            graphic.texture = upgfx;
        }
        else
        {
            graphic.texture = standard;
        }
    
        guiText.text = " " + down + "\n " + held + "\n " + up;
    }

GetButton Kullanımı

 void Update ()
    {
        bool down = Input.GetKeyDown(KeyCode.Space);
        bool held = Input.GetKey(KeyCode.Space);
        bool up = Input.GetKeyUp(KeyCode.Space);
        
        if(down)
        {
            graphic.texture = downgfx;
        }
        else if(held)
        {
            graphic.texture = heldgfx;
        }
        else if(up)
        {
            graphic.texture = upgfx;
        }
        else
        {
            graphic.texture = standard; 
        }
        
        guiText.text = " " + down + "\n " + held + "\n " + up;
    }

UNITY DESTROY

Destroy oyun objelerini oyundan kaldırmaya yarar. Hatta sadece oyun objelerini değil obje componentlerinide kaldırmaya yarar.

if(Input.GetKey(KeyCode.Space))
        {
            Destroy(gameObject);
        }
Burada scriptin bağlı oldugu objeyi kaldırma işlemi gerçekleştiriyoruz.

if(Input.GetKey(KeyCode.Space))
        {
            Destroy(other);
        }
Burada ise dışarıdan gelen other isimli bir nesneyi space tuşuna basınca yoketmeyi sağlıyoruz.

if(Input.GetKey(KeyCode.Space))
        {
            Destroy(GetComponent<MeshRenderer>());
        }
Hatta objenin görünürlüğünü de silebiliyoruz.

21 Temmuz 2016 Perşembe

LookAt FONKSİYONU

Bu fonksiyon nesnenin belirlenen koordinatlara dönmesini sağlar. Örneğin oyundaki bir kameraya aşağıdaki kod verirsek

using UnityEngine;
using System.Collections;

public class CameraLookAt : MonoBehaviour
{
    public Transform target;
    
    void Update ()
    {
        transform.LookAt(target);
    }
}
Kameranın yeri değişmez lakin sürekli o cisme doğru bakar. Sadece kamera değil her objede bullanılabilir. Örneğin üzerine doğru gelen bir zombie için :) 

TRANSLATE VE ROTATE



 void Update ()
    {
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
        
        if(Input.GetKey(KeyCode.DownArrow))
            transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
        
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
        
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
    }
Bu kod ile Translate ve Rotate fonksiyonunu görmekteyiz. Translate bir nesnenin hareketini sağlar. Eski konumunun üzerine ekleme usülü ile çalışır. Rotate ise bir nesneyi belirletiğimiz yönde döndürmeye yarar aynı translate mantığıyla çalışır.

19 Haziran 2016 Pazar

ACTİVE KAVRAMI ACTİVESELF SETACTİVE KOMUTLARI VE HİERARCHY

Active komutu inspectordeki nesnenin en başındaki toggle ile aynı işlevi görür. Active komutu ile enabled rasındaki fark ise enabled bir değişkendir ve componentler için kullanılır fakat Active bir fonksiyondur nesneler için kullanılır. Eğer nesne için aşağıdaki gibi bir kod yazılırsa sonuç nesne oyun alanında yok gibi varsayılacaktır.


public class ActiveObjects : MonoBehaviour
{
    void Start ()
    {
        gameObject.SetActive(false);
    }
}
İşte bu şekilde nesneyi yok edip tekrar ortaya çıkarabiliriz.Korku oyunlarındaki jump scaneler genellikle bu şekilde yapılmaktadır.

Hierarchy kavramı ise bir nesnenin alt nesneleri için kullanılır yani şu şekilde açıklanabilir.


public class tik : MonoBehaviour
{
    public GameObject Objem;
    
    
    void Start ()
    {
        Debug.Log("Actif mi: " + Objem.activeSelf);
        Debug.Log("Hiyerarşi aktif mi" + Objem.activeInHierarchy);
    }
}
İşte bu kod ile aşağıdaki sonuçları alabiliriz.



Burada 2 cisimde aktif






8 Haziran 2016 Çarşamba

ENABLED KAVRAMI

İsminden de anlaşılabileceği gibi enabled componentin aktifliği ile alakalı bir bool değişkendir.
Enabled inspector penceresindeki componentin yanındaki kutucukla doğrudan bağlantılır.
Aşağıdaki kod parçasında space tuşuna her basıldığında üzerinde script olan bir nesneye bağlı ışığı açıp kapatıyor.




using UnityEngine;
using System.Collections;

public class EnableComponents : MonoBehaviour
{
    private Light myLight;
    
    
    void Start ()
    {
        myLight = GetComponent<Light>();
    }
    
    
    void Update ()
    {
        if(Input.GetKeyUp(KeyCode.Space))
        {
            myLight.enabled = !myLight.enabled;
        }
    }
}

2 Haziran 2016 Perşembe

UNITY LERP FONKSİYONU

Unity de Lerp() fonksiyonu doğrusal ara değer hesaplamayı sağlar.

1. Parametre Başlangıç
2. Parametre Bitiş
3. Parametre Yüzdesel Oran'ı temsil eder

Örnek olarak 

float result = Mathf.Lerp (3f, 5f, 0.5f); 

gibi bir kodda 3 ile 5 rakamları arasında ki rakamlar üzerinde 0.5 oranında (%50) yani tam ortasını bulması isteniyor.Burada result değeri 4 olarak karşımıza çıkacaktır.

float result = Mathf.Lerp (05, 0.2f); 

Bu kodda ise 0 ile 5 arasında 0.2 oranında (%20) bir bölme yapacaktır.Yani result değeri 1 olarak karşımıza çıkar.

Ayrıca bu işlemi Vector üzerinde de uygulayabiliriz.

Vector3 from = new Vector3 (1f, 2f, 3f);
Vector3 to = new Vector3 (5f, 6f, 7f);

// Here result = (4, 5, 6)
Vector3 result = Vector3.Lerp (from, to, 0.75f);

Burada ilk vector ile ikinci vector'ü x ler ayrı y ler ayrı z ler ayrı şekilde verilen oranla tek tek düzenliyor.Yani

from  x=1 , y=2 , z=3
to      x=5 , y=6 , z=7

From daki x ile to da ki x değerleri yüzde 75 oranında bölünmeye tabi tutulursa sonuç 4 olacaktır.

From daki y ile to da ki y değerleri yüzde 75 oranında bölünmeye tabi tutulursa sonuç 5 olacaktır.

From daki z ile to da ki z değerleri yüzde 75 oranında bölünmeye tabi tutulursa sonuç 6 olacaktır.

Bu işlemin kullanım amacı oldukça çoktur.Şimdilik örnek amaçlı kod yayınlayacağım.İlerleyen zamanlarda açıklama ekleyeceğim.

void Update ()
{
    light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f* Time.deltaTime);}





31 Mayıs 2016 Salı

UPDATE FONKSİYONU VE TÜREVLERİ

UPDATE

Update her frame de 1 kez çağırılan özel bir fonksiyondur. Update fonksiyonu içine yazacağınız şey bilgisayarınızın gücü oyununuzun grafiklerine bağlı olarak değişen frame sayısı kadar çağırılır.Bunun kötü yanı ise stabil olmamasıdır. Fizik olaylarında bu göze çarpan bir sorun haline gelebilir.O neden ile update fonksiyonu başka bölümlere ayrılmıştır

FİXED UPDATE

Fixed update her fizik olayında çağrılır.Frame den bağımsızdır. Stabil çağrılma doğrusu vardır.Genelde fizikle ilgili işlemlerde kullanılır.

LATE UPDATE

Late update de update gibidir.Her frame de çalışır.Farklı olarak en son çağırılan update fonksiyonudur.Genellikle bir objeyi takip eden kamera için kullanılır.

Şimdi 3 update fonksiyonunun çalışmalarını inceleyelim.


Öncelikle bu kod u çalıştıralım.


Sonuç bu şekilde olmaktadır.


Unity Start ve Awake Fonksiyonları

Awake ve Start fonksiyonları ömürleri boyunca sadece 1 kez çalışan fonksiyonlardır.Awake her koşulda starttan daha erken çağrılır.

AWAKE

Awake fonksiyonu oyun ilk çalıştırıldığında script aktif değilken bile devreye girer.Genellikle ilk atamalar yapılacaksa kullanılır.

START

Start fonksiyonu ise script aktif hale geldikten hemen sonra çalışır.

Unity Değişkenler

Unity 3 farklı dil ile programlanabilir.Biz bu blog da C# üzerinden herşeyi anlatacağız.

Değişkenler

C# dilinde ki bazı temel değişkenler şunlardır.

byte1 bayt0, ..., 255 (tam sayı)byte a=5;
sbyte1 bayt-128, ..., 127 (tam sayı)sbyte a=5;
short2 bayt-32768, ..., 32767 (tam sayı)short a=5;
ushort2 bayt0, ..., 65535 (tam sayı)ushort a=5;
int4 bayt-2147483648, ..., 2147483647 (tam sayı)int a=5;
uint4 bayt0, ..., 4294967295 (tam sayı)uint a=5;
long8 bayt-9223372036854775808, ..., 9223372036854775807 (tam sayı)long a=5;
ulong8 bayt0, ..., 18446744073709551615 (tam sayı)ulong a=5;
float4 bayt±1.5*10-45, ..., ±3.4*1038 (reel sayı)float a=5F; veya float a=5f;
double8 bayt±5.0*10-324, ..., ±1.7*10308 (reel sayı)double a=5; veya double a=5d; veya double a=5D;
decimal16 bayt±1.5*10-28, ..., ±7.9*1028 (reel sayı)decimal a=5M; veya decimal a=5m;



Unity Script Oluşturma




Yeni script oluşturmak için birkaç farklı yöntem vardır.Bunların ilki sahnedeki objenin inspector alanındaki yere attribute olarak eklemektir.


Nesneye tıkladıktan sonra buradaki Add Component e tıklıyoruz.


Buradan Mevcut bir script i veya yeni script i seçmek için Script alanlarından birine giriyoruz.Yeni oluşturacağımız için new script diyoruz.

Script ismini girip Create and Add diyor ve oluşturuyoruz.

İkinci yöntem ise direkt olarak uygulamanın klasör kısmından oluşturmak.Bunun için klasör kısmına sağ tıklıyor ve yeni bir c# script oluştur diyoruz.


Bu işlemden sonra bu scripti mouse ile tutup kullanılacağı objeye atıyoruz.



Hepsi bu kadar.

13 Ocak 2016 Çarşamba

Unity3D Parçacık Sistemi

UNITY 3D PARTICLE SYSTEM

Merhaba. Bu yazı Unity oyun motorunda parçacık sistemi konusunda sürekli yararlanabileceğiniz tanımlar içeren bir yazıdır.




Öncelikle en baştan tanımlara göz atalım.

Duration 


Parçacık üretme süresidir.Duration değeri saniye cinsinden alınır örnek fotoğrafta 5.00 demesi 5 saniye boyunca parçacık üretileceği anlamına gelir.5 saniye sonunda ise bu üretim bitecektir.

Looping


Loop tekrar etme anlamı taşır.Parçacık üretim süresi bittiğinde tekrar başlatmak için loop kutucuğu işaretli olmalıdır.Sürekliliği sağlar.

Prewarm


Normal şartlarda ilk kez çalışmaya başlayan parçacık sistemi hızlanan bir tempoda çalışır.Yeni başladığı bellidir.Fakat bu seçenek açıksa yeni değilde sürekli açıkmış gibi çalışır başlangıçtaki hızlanma temposuna hiç girmeden direkt olarak hızlı başlar.

Start Delay


Parçacık tetiklendiğinde delay kutusunda yazan değer kadar (saniye) bekler parçacık üretmez.Sonra normal şekilde üretime başlar.

Start Lifetime


Üretilen her bir parçacığın hayatta kalma süresidir.Parçacıklar burada yazan değer (saniye) süre sonra yok olacaktır.

Start Speed


Parçacık dağılma hızıdır.

Start Size


Parçacık genişliğidir.

Start Rotation


Parçacık dönme açısıdır.Yuvarlak parçacıklarda fazla belli olmaz.

Start Color


Parçacık rengidir.4 farklı türü vardır.Default,gradient,random,gradient-random bu dörtlüyü oluşturur.



Default 

 Normal olarak parçacığa renk verir.

Gradient 

Başlangıç ve Bitiş rengi verilir.Ara renkleri Unity ayarlar Duration a bağlı olarak parçacık rengi değişir.

Random 

Random ise iki farklı renk veririz ve her parçacık için iki renk arası rastgele renk seçer.

Gradient - Random 

Bu özellik ise Gradient ve Random birleşimidir.

Gravity Modifier


Parçacıklar dağılmaya başladıktan sonraki hareketlerinde yerçekimi etkisini ayarlar.Eksi değer verilirse yukarı artı değer verilirse aşağı yönde hareket eder.

Play On Awake


Oyun ilk açıldığında bu parçacık nesnesinin başlayıp başlamayacağını belirtir.Eğer seçili ise oyun başlayınca parçacık sistemi de başlar değilse kod ile tetiklenerek çalıştırılır.

Max Particles


Kaç adet parçacık üretileceği buradan ayarlanır.Maximum değere gelirse üretim duracaktır.

Emission




Rate eğer zamana bağlı ise (Time) 1 saniyede ki parçacık üretimini yönetir.(Adet) 
Bursts ise sürekli simetrik üretilen parçacıkların belli bir zaman içinde belli bir parçacığı bir anda üretimini sağlar.Bir patlama etkisi oluşturur.


Rate eğer distance e bağlıysa bu parçacık sistemi bulunduğu yerden bir birim yer değiştirmesi ile aktif olacak ve rate değeri kadar parçacık üretecektir.


Shape


Bu bölümde parçacık çıkış ve dağılış hareketleri ayarlanır.



Shape bölümü yayılış şeklidir.Fotoğrafta koni şeklinde yayıldığını göstermektedir. Ama bir çok farklı yayılışı vardır.Angle açı belirtir.Radius ta öyle.Random direction dersek şekle bakmaksızın dağılacaktır.


Son olarak Wildframe seçili iken parçacıklar kutu seklinde görülür.Sadece sahne ekranında böyle olacaktır.