unity

Unity3d ile C# Scripts Kullanarak Obje Hareket Ettirme

Unity3d şu an yaygın olarak kullanılan oyun motorlarından sadece bir tanesi. Unity ile windows,mac,linux, android, ios.. aklınıza ne geliyorsa destekleyen oyunlar yapabiliyoruz. Şimdi yapacağımız örnekte sadece bir Cube objesini yön tuşları ya da w,a,s,d tuşları ile hareket ettirmeyi öğreneceğiz.

İlk önce Boş bir unity3d projesi oluşturalım. Boş’dan kasıt hiç bir paket eklemeyelim projemize.

Karşımıza böyle bir ekran gelecek.

unityekran

(Not standart olarak bu şekilde düzenlenmiş olarak gelmeyebilir. Fakat aynı pencereler yer alacaktır ekranınızda.)

Şimdi yukarıdan GameObject -> Create Other -> Cube diyelim. Yukarıdaki menüde göreceksiniz GameObject sekmesini.

Unity2

Resimde görüldüğü gibi Cube seçiliyken Transform altında yer alan Position’dan orjin değerini veriyoruz küpümüze.
Küpü oluşturmuş olduk. Şimdi asıl amacımıza geçelim ;
Küp bizim karakterimiz olacak. Biz de onu hareket ettireceğiz şimdi.

Unity3

Resimde görüldüğü gibi Project sekmemizde yer alan Assets klasörüne sağ tıklayıp Create > Folder diyoruz . Klasörümüze Scripts adını verelim ki projemiz karışık bir hal almasın.
Şimdi de yeni oluşturduğumuz Scripts klasörüne sağ tıklayıp Create > C# Scripts diyoruz. C# Script adına da Hareketler diyelim.

 Hareketler.cs dosyamıza çift tıkladığımızda Unity3d’nin içinde yer alan MonoDevelop programı çalışacaktır. Bu Visual Studio gibi derleme programıdır. İsterseniz bu ayarları değiştirebilirsiniz. Başka bir uygulama ile de Scriptlerinizi açabilirsiniz.

Unity4

Update ve Start fonksiyonu işlevlerinden çok kısa içerisinde bahsettim. Biraz kod yazıp kendimize gelelim.

Unity5

transform : nesnemizin hareket değerlerini tutan özelliktir. Bunu private bir değişkene atadık.Bize kolaylık olsun,akılda kalsın diye.
position :pozisyonu;

hareket.position = new Vector3(0,0,0);

burada Cube’e start pozisyonu verdik. Eğer hareket değişkenimize transformu vermeseydik;

transform.position = new Vector3(0,0,0);

bu şekilde de yapabilirdik.

Input.GetAxis(): methodu ile hangi yönde değişim göstereceğini belirledik. Yani biz hangi tuşa basıyorsak o eksende hareket etmesini sağladık.
Vector3 : Vector3 sınıfı 3 bileşenli vektör tanımlamaya yarar.
Vector3.right ise sağ tarafın vektörünü verir.
Hiz :değişkenimiz tanımladığımız objemizin hızı.
Time.deltaTime : eş zamanlı diyelim. Frame ile eş zamanlı hızda olması için çarptık.

hareket.Translate methodumuz bir vector3 sınıfnın vektörünü istiyordu bizde vector3.right ve vector3.up vektörlerini skalerler ile çarpıp istediği vektöre ulaştık.
Hızı public tanımladım oyun içinden ayarlama yapabileyim diye.

Unity‘e dönelim. Hareketler.cs dosyamızı tutup Cube objemizin üstüne atalım.

Unity6

Daha sonra Cube objemize tıklayalım ve inspector ekranında Hareketler(Script) gözüküyor mu bakalım.İşlemi doğru yapmışmıyız kontrolü için.

Unity7

Gördüğünüz gibi public tanimladım demiştim Hiz değişkenimizi . Buradan oynama yapabiliriz Hiz yavaş gelirse. İşlemimiz tamam.
Çalıştıralım oyunumuzu.  (Ben 16:9 formatında bir ekranda gibi çalıştırıyorum.)

Sıkıntı yok. Sağ sol ve yukarı aşağı işlemleri çalışıyor. Hatta çapraz da gidebiliyoruz. Fakat Camera açısından çıkıyoruz. Bunuengelliyelim şimdi de;
16:9 oynadığımızda oyunu x değerimiz -10 , 10 değerleri arasında  gidip geliyor. Bunu rahatlıkla görebiliyoruz. O zaman biz şunu demeliyiz oyunumuza :
Eğer benim objemin x’i -10’dan küçük bir değer alıyorsa onu x 10 olacak şekilde yönlendir.
Eğer benim objemin x’i 10’dan büyük bir değer alıyorsa onu x -10 olacak şekilde yönlendir.
Açıkca görüldüğü gibi bize iki tane if gerekli bu durumu sağlamamız için. Hemen onları yazalım.

         if(hareket.position.x>10)
		{
			hareket.position =new Vector3(-10,hareket.position.y,hareket.position.z);
		}
		else if (hareket.position.x<-10)
		{
			hareket.position=new Vector3(10,hareket.position.y,hareket.position.z);
		}

Aynı durumu y değerimiz için de yapalım böylece sürekli camera açısında olsun objemiz.
 y değerimiz de -7.5,7.5 arasında değişiyor. Hemen onu da ayarlıyalım

                if(hareket.position.y>7.5f)
		{
		hareket.position=new Vector3(hareket.position.x,-7.5f,hareket.position.z);
		}
		else if(hareket.position.y<-7.5f)
		{
		hareket.position=new Vector3(hareket.position.x,7.5f,hareket.position.z);
		}

  Böylece hareketin ekranda kalmasını sağladık. Ve nesnemizi w,a,s,d ve ok tuşları ile kontrol edebildik. 
Bu makale buraya kadar umarım yararlı olmuştur.

Oyunu buraya yükledim.. İndirebilir ve deneyebilirsiniz. Anlattığıma ek olarak bir çıkış butonu ve ışık ekledim. 

Post Author: Yiğit Can TÜRE

Unity3d ile C# Scripts Kullanarak Obje Hareket Ettirme” için 3 yorum

  • Burak

    (01 Mart 2014 - 22:58)

    Birader çok sağolasın ellerine , zihnine sağlık

  • Sebahattin

    (22 Eylül 2016 - 23:32)

    Abi süpersin. Çok kısa ve öz.

  • melis Akın

    (29 Ekim 2016 - 12:25)

    ellerinize sağlık

Yorum yazma sırası sizde!