UNITY İle Android’e Uygulama Geliştirmek – 1 – Dokunmatik Ekran Entegrasyonu

Posted: 17 Temmuz 2013 by yasirkula in Oyun Tasarımı, UNITY 3D
Etiketler:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Yine ve yeniden merhaba,

Bu UNITY dersinde Android için uygulama geliştirmenin temellerini öğreneceğiz. Dersin bu ilk parçasında dokunmatik ekranın nimetlerinden faydalanmayı görecek, ikinci derste ise telefonun hareket sensörünü kullanmayı öğreneceğiz (2. derse gitmek için tıklayın: https://yasirkula.com/2013/07/22/unity-ile-androide-uygulama-gelistirmek-2-telefon-sensorunu-kullanmak/ ). Bu derse başlamadan önce UNITY için Android SDK kurulumunu yapmış olmanız gerekiyor. Eğer yapmadıysanız şu dersimize göz atabilirsiniz: https://yasirkula.com/2013/07/17/unity-android-sdk-kurulumu-resimli-anlatim/

Hazırsanız touchscreen’e dalışı yapalım…

Şimdi yapacağımız örnek uygulamadan bahsetmek istiyorum. Bu uygulamada ekranda bir küp olacak ve bu küp bizim dokunmatik ekranda tıkladığımız konuma ışınlanacak. Ayrıca bu küpün boyutlarını ekranda elimizi sağa-sola ya da yukarı-aşağı kaydırarak değiştirebileceğiz. Bu uygulamayı yaparken öğreneceklerinizi kolaylıkla kendi uygulamalarınıza da uygulayabileceğinizi umuyorum.

Öncelikle UNITY’i açın ve yeni bir proje oluşturun. Main Camera‘yı (0, 0, -10) konumuna yerleştirin ve ardından yeni bir Cube GameObject oluşturup bu objenin Transform component‘indeki değerleri resetleyin. Şimdi yeni bir Javascript oluşturup bu scripti küp objesine atayın. Son olarak sahnede bir Directional Light oluşturun ki küp objesinin hareketlerini rahatlıkla gözlemleyebilelim.

Aşama 1 : PC

Uygulamamızı Android’e yazmadan önce PC platformu için yazıp sonra Android’e convert etmeyi uygun gördüm. Bu yüzden öncelikle projeyi bilgisayar üzerinden test edecek, sonra birkaç ufak değişiklikle Android’e çevireceğiz.

İlk önce küpün ekranda mouse ile tıkladığımız yere ışınlanmasını sağlayalım. Bunun için Update() fonksiyonunu kullanmamız uygun olur. Scripti açın ve Update() fonksiyonuna şu kısacık kodu yazın:

if( Input.GetMouseButtonDown( 0 ) )
{
  transform.position = Camera.main.ScreenToWorldPoint( Vector3( Input.mousePosition.x, Input.mousePosition.y, 10 ) );
}

Bu kod sayesinde eğer herhangi bir anda farenin sol tuşuna basılırsa farenin ekrandaki konumu Main Camera’nın bakış açısına göre 3 boyutlu uzaydaki bir koordinata çevriliyor ve obje bu koordinata ışınlanıyor. Şimdi biraz daha detaylı açıklayayım:

Camera.main” ibaresi sahnedeki “MainCameratag‘ına sahip kameraya ulaşmak için kullanılır. Camera class’ının içerisinde “ScreenToWorldPoint” adında bir komut (method) bulunmaktadır. Bu komutun parantezinin içine bir Vector3 değer girilir. Girilen bu Vector3’ün x ve y değerleri ekrandaki bir pixelin konumuna işaret etmelidir, bizim durumumuzda bu mouse’nin ekrandaki konumunun x ve y koordinatlarına denk geliyor. Vector3’ün z değeri ise 3 boyutlu uzayda çevrilecek noktanın kameradan kaç metre uzak olması gerektiğini belirtiyor, bunun değeri ise bizim örneğimizde 10. Yani Main Camera’nın z koordinatının -10’da olduğunu ele alırsak küp objemizin z değeri bundan 10 birim fazla olacak, yani 0 olacak. “ScreenToWorldPoint” method’u içine girilen bu Vector3’ü alır ve bize 3 boyutlu uzayda bir nokta döndürür. Bu nokta döndürülürken hangi kameranın referans alınacağını ise en başta belirtmiştik zaten “Camera.main” ibaresiyle.

Şimdi de küpün boyutunun biz mouse’yi sürükledikçe değişmesini ayarlayalım. Bunun için scriptin içindeki tüm kodu şöyle değiştirin:

var mouseEskiKonum : Vector3;

function Update ()
{
  if( Input.GetMouseButtonDown( 0 ) )
  {
    transform.position = Camera.main.ScreenToWorldPoint( Vector3( Input.mousePosition.x, Input.mousePosition.y, 10 ) );
    mouseEskiKonum = Input.mousePosition;
  }
  if( Input.GetMouseButton( 0 ) )
  {
    transform.localScale += ( Input.mousePosition - mouseEskiKonum ) / 100;
    mouseEskiKonum = Input.mousePosition;
  }
}

Burada görüldüğü üzere öncelikle mouseEskiKonum adında bir Vector3 değişken oluşturduk ve ekranda bir noktaya tıklandığında bu değişkene mouse’nin koordinatını atadık. Ardından “Input.GetMouseButton( 0 )” komutuyla, mouse’nin sol tuşunun basılı olduğu her frame’de objenin boyutunun (transform.localScale) mouse’nin mevcut konumuyla eski konumu arasındaki farkın 1/100’ü kadar değişmesini sağladık. Neden 1/100? Çünkü ekran koordinatları pixellerle alakalı ve mouse’yi birazcık bile oynatsak ekranda epey pixel katedebiliriz. Ancak 3 boyutlu dünyada (World koordinatlarında) metrelerle işlem yapıyoruz ve 1 metrelik bir değişiklik bile küpün boyutunda ciddi değişikliklere yol açar. Bu yüzden her 100 pixellik oynamada küpün 1 metre büyümesini sağladık. Son olarak da “mouseEskiKonum” değişkeninin değerini mouse’nin güncel konumuna ayarladık.

Ve böylece ufak uygulamamızı PC için yazmış olduk. Şimdi sıra Android’e uyarlamaya geldi!

Aşama 2 : Android

Uygulamayı Android’e çevirmeden önce touchscreen ile alakalı olan önemli komutları açıklamak istiyorum.

Android’e uygulama geliştirirken dokunmatik ekranla işlem yapmak için en aşina olmanız gereken komut “Input.touches” değişkeni. Bu değişken ne yapar? Dokunmatik ekrana dokunmakta olan tüm parmakları içerisinde depolar. Peki bu parmaklar ne türde depolanır? Vector3 mü? Transform mu? Hayır! Bu parmaklar çok daha gelişmiş bir tür olan “Touch” türünde depolanır. Yani anlayacağınız “Input.touches” komutu dokunmatik ekranla temas halinde olan tüm parmakları birer “Touch” türünde depolamakta olan bir değişkendir.

Peki bu “Touch” türünde depolanmakta olan parmak ile neler yapılabilir? “Touch” dediğim şey bir Struct olup içerisinde çeşitli özellikler barındırır. Mesela bunlardan biri “position“dır ve bu değişken parmağın dokunmatik ekrandaki konumunu bir Vector2 olarak tutar. Bunun haricinde “deltaPosition” değişkeni de oldukça önemli olup parmağın ekranda son frame’den itibaren yatayda ve dikeyde kaç pixel hareket ettiğini yine bir Vector2 olarak döndürür. O halde “deltaPosition.x” dediğimiz zaman parmağın yatay eksende kaç pixel hareket ettiğini, “deltaPosition.y” dediğimiz zaman da parmağın dikey eksende kaç pixel hareket ettiğini bulmuş oluruz. Touch’un depoladığı bir başka önemli değişken ise “phase” değişkenidir. Bu değişken TouchPhase türündedir ve parmağın durumunu depolar. Daha açık konuşmak gerekirse parmağın ekrana yeni mi dokunduğunu (TouchPhase.Began), yoksa ekranda basılı halde hareket etmekte olan bir parmak olduğunu mu (TouchPhase.Moved), ekranda basılı halde duran ama hareket etmeyen bir parmak olduğunu mu (TouchPhase.Stationary) ya da ekrandan yeni kaldırılan bir parmak olduğunu mu (TouchPhase.Ended) depolar. Ekrana aynı anda beşten fazla parmağın dokunması gibi nadir olaylarda ise değeri TouchPhase.Canceled olur. “Touch” değişkeni bir başka önemli değişken daha depolar: fingerId. Bu değişken bir int‘tir ve ekrandaki o parmağa has bir tamsayı değeridir. Bu değişkenle ne yapılabilir? Örneğin oyununuzda sadece ekrandaki bir parmağı kaâle almak istiyor, ekrana sonradan dokunan parmakların hiçbir etki etmemesini istiyorsunuz. O zaman bir değişkene o parmağın fingerId‘sini atayabilir ve ardından bir parmakla iş yaparken önce o parmağın fingerId‘sinin depoladığınız değişkene eşit olup olmadığına bakabilirsiniz.

Evet, dokunmatik ekranla ilgili önemli olan komutları böylece öğrenmiş olduk. Ne kadar az idi, değil mi! İşte bu yüzden UNITY ile Android’e uygulama geliştirmek aslında hiç de zor değil. Şimdi hazırsanız yarıda bırakmış olduğumuz örnek uygulamamızı Android’e transfer edelim.

Önce küpümüzü ekranda dokunduğumuz konuma ışınlandırmayı yapacağız. Bunun için bize gerekli olan şey ne? Ekrana dokunan bir parmağın (Touch) konumu. Peki bu Touch türündeki parmağa hangi değişken vasıtasıyla ulaşıyorduk? Evet, Input.touches değişkeni. O halde Input.touches değişkeninde yer alan tüm Touch‘ların “phase” değişkenine bakmalı ve eğer parmak ekrana yeni dokunmuşsa (TouchPhase.Began) küpü parmağın ekrandaki konumuna (position) ışınlamalıyız. O halde hemen küp objesine atadığınız scripti açın ve Update() fonksiyonuna şu kodu ekleyin:

for( var parmak : Touch in Input.touches )
{
  if( parmak.phase == TouchPhase.Began )
  {
    transform.position = Camera.main.ScreenToWorldPoint( Vector3( parmak.position.x, parmak.position.y, 10 ) );
  }
}

Buradaki “for( var parmak : Touch in Input.touches )” kullanımıyla ilk kez karşılaşmış olabilirsiniz. Sakın kafanız karışmasın. “for” ifadesinin böyle kullanımı aslında aşağıdaki kullanımıyla tıpatıp aynıdır, sadece yazması daha kolaydır:

for( var i = 0; i < Input.touches.Length; i++ )
{
  var parmak : Touch = Input.touches[i];
  blablabla...
}

Sanıyorum yukarıdaki kodu açıklamaya gerek yok, çünkü neyi niçin yaptığımızı zaten açıkladım. Burada PC için olan kodu Android’e çevirmenin ne kadar kolay olduğuna dikkatinize çekmek istiyorum. Sadece birkaç satırla uygulamamıza Android desteği sunduk. Uygulamanın ikinci aşamasını Android’e aktarmak da bir bu kadar kolay. Tek yapmamız gereken for döngüsünün içini şu hale getirmek:

for( var parmak : Touch in Input.touches )
{
  if( parmak.phase == TouchPhase.Began )
  {
    transform.position = Camera.main.ScreenToWorldPoint( Vector3( parmak.position.x, parmak.position.y, 10 ) );
  }
  else if( parmak.phase == TouchPhase.Moved )
  {
    transform.localScale += Vector3( parmak.deltaPosition.x, parmak.deltaPosition.y, 0 ) / 100;
  }
}

Gördüğünüz gibi içeriye bir “else if” ekledik ve eğer parmak ekranda hareket ettirilmişse (TouchPhase.Moved) küp objesinin boyutlarını değiştirdik. Bu esnada parmakEskiKonum gibi gereksiz bir değişkene de ihtiyacımız olmadı, çünkü hatırlayacağınız gibi “Touch” türü içerisinde zaten bir deltaPosition barındırıyor! Yine hatırlayacağınız üzere bu deltaPosition bir Vector3 değil ama bir Vector2. Ancak transform.localScale değişkeni bir Vector3 ve bu yüzden transform.localScale‘e bir Vector2 ekleyemezdik. Bunu çözmek için yeni bir Vector3 oluşturduk ve buna x değeri olarak parmak.deltaPosition.x verirken y değeri olarak da parmak.deltaPosition.y verdik ve z değerini ise 0 olarak bıraktık.

Evet, bitti! Buraya kadar gelmişseniz bir Android developer olma yolunda çok büyük bir basamak atladığınızı söyleyebilirim. Şimdi dilerseniz uygulamayı Android’e Build yapıp telefonunuzda test edebilirsiniz. Peki şimdi ne yapmalı? Öğrendiklerinizi pekiştirmek için niçin kendi başınıza basit bir Android oyunu yapmıyorsunuz? Heyecan verici!

Umarım faydalı olmuştur, dersin ikinci kısmında görüşmek üzere!

NOT: if( GUI.Button( blabla ) ) şeklinde oluşturduğunuz tüm GUI elemanları aynı zamanda otomatik olarak dokunmatik ekran desteğine de sahip. Yani onlar için ekstra kod yazmanız gerekmiyor.

Yorumlar
  1. furkan diyor ki:

    sagol süleyman kardeşim

    • Mehmet Çınar diyor ki:

      S.a yasirbey size bir sorum olacaktı.
      C# olarak elimde yazılmış bir virtualjoystick scripti var.
      Benim yapmak istediğim şey bu joystickden gelen verilere göre
      Player scriptinden karaktere hareket vermek. ama nasıl yapacagımı çözemedim.

      • yasirkula diyor ki:

        Player scriptlerinde yer alan Input.GetAxis(“Horizontal”) ve GetAxis(“Vertical”)’lı kısımları joystick’in output’unun (Vector2 ise) x ve y değerleri ile değiştireceksiniz.

      • Mehmet Çınar diyor ki:

        Tesekkur ederim bi deneyeyim eger yapamassilam kodlari buraya aktarsam yardimci olursunuz degil mi yasir bey. Gorsel egitim seti cekmeyi dusunuyorsaniz ilk musteriniz benim.

      • yasirkula diyor ki:

        İlginiz için teşekkürler. Kodun sadece alakalı kısmını atarsanız güzel olur ama kendi başınıza yapabileceğinizi düşünüyorum.

  2. murat diyor ki:

    Ekrana oluşturulan birçok küpten sadece belli birine dokunup onu taşımayı nasıl yapabiliriz. Yardımcı olur musunuz.

    • yasirkula diyor ki:

      Üzerine tıkladığımız küpü bir değişkene atayıp taşıma işlemlerini o küpe uygulayabiliriz. Asıl soru, küpün üzerine tıkladığımızı nasıl anlarız? PC’de OnMouseDown ile çok kolay ama Android’de henüz OnMouseDown desteği yok. İşte bunun için Android’de OnMouseDown’ın nasıl çalıştırılabileceğiyle ilgili bir ders anlatacağım yakında. O zamana kadar şu İngilizce kaynağa göz atabilirsiniz: http://wiki.unity3d.com/index.php?title=OnMouseDown

      • murat diyor ki:

        Hızlı cevabınız için teşekkürler bu konuyu biraz incelemiştim fakat nedense sadece seçtiğim değil tüm ekrandaki kutuları taşıdığı için beceremedim ekrana dokununca tüm kutular oraya geliyor.

      • yasirkula diyor ki:

        Tıkladığınız kutuyu bir değişkene atayın Transform cinsinden ve ekranda parmağınızı sürüklerken sadece bu Transform değişkeninin position değerini ilgili koordinata taşıyın.

  3. Berk Yaşar diyor ki:

    Merhabalar,burayı inceledim fakat burada küpü ışınlama türü olaylar var galiba yada yanlış kavradım.Ben buradan nasıl bir ilişki çıkartarak ateş etme scriptimdeki kodları GUİButton’a tıklayınca aktif hale getirmeyi başarabilirim?

    • yasirkula diyor ki:

      Merhaba,

      Eğer GUI.Button veya GUILayout.Button kullanıyorsanız o zaman ekstra kod yazmanıza gerek yok. Ekrandaki butona parmakla dokununca if( GUI.Button( … ) )’ın içindeki kod otomatik olarak çalışıyor. Eğer butonunuz Collider’ı olan bir 3D obje ise ya da GUITexture ise o zaman şu yazıdaki kodu kameranıza atın ve buton objenizin yapacağı şeyleri OnMouseDown fonksiyonuna yazın: https://yasirkula.com/2013/07/28/unity-onmousedown-fonksiyonunu-androide-uyarlamak/

      Gördüğünüz gibi butonlar için bu derste anlattığım komutları kullanmanız gerekmiyor. Ancak parmak sürükleyerek kameranın yönünü değiştirmek gibi şeylerle uğraşacaksanız da sadece ve sadece tek bir değişkenle uğraşacaksınız: Input.touches . Ben burada bir küpü oynattığımız basit bir uygulama üzerinden gittim ama bu işlemleri gerçekleştirmek için kullandığım yöntem üzerinde oynama yaparak kendi sorununuza uygun bir algoritma üretebilirsiniz.

  4. Berk Yaşar diyor ki:

    Yalnız şöyle bit sıkıntı var.Kodun bulunduğu cisim hangi bölgedeyse kurşun ordan çıkıyor.Yani Butona tıkladığım kısımdan kurşun çıkmaya başlayacak.Onun için kodda şu cisimde(gameobject) bulunan şu script ti ,butona tıklayınca true yap gibi bir şey olması lazım.Benim gui kodum :

    var btnTexture : Texture;
    function OnGUI() {
    if (!btnTexture) {
    Debug.LogError("Please assign a texture on the inspector");
    return;
    }
    if (GUI.Button(Rect(90,50,50,50),btnTexture))
    Debug.Log("Clicked the button with an image");

    }

    • yasirkula diyor ki:

      Butona basınca çalışmasını istediğiniz scripte “Ates” diyelim ve bu scriptin bulunduğu objeye de “Asker” diyelim. 2 yol var şimdi:

      1) GUI kodunuzda “public var atesScripti : Ates;” adında bir değişken oluşturabilir ve Inspector’dan buna değer olarak “Asker” GameObject’ini sürükleyebilirsiniz. (Bu yöntemi tavsiye ederim)

      2) Butona tıklayınca Debug.Log(“Clicked the button with an image”) komutundan sonra “var atesScripti : Ates = GameObject.Find( “Asker” ).GetComponent( “Ates” );” komutunu ekleyin.

      Bu işlemlerden birini yaptıktan sonra GUI kodunuzdaki “if(GUI.Button(Rect(90,50,50,50),btnTexture))”in içinde en altta yeni bir satır oluşturup şu komutu ekleyin: “atesScripti.SendMessage( “AtesEt” );”. Son olarak “Ates” scriptinizin içinde “AtesEt()” adında yeni bir fonksiyon oluşturun ve tüm ateş etme kodunuzu buraya yazın. Artık ekrandaki GUI butonuna tıkladığınızda bu “Ates” scriptinin “AtesEt()” fonksiyonu çalıştırılacak.

  5. Berk Yaşar diyor ki:

    Hep kodda hata buluyor.Ateş kodumu şöyle yaptım:

    AtesEt(
    var Bullet : Rigidbody;
    var BulletSpeed = 20;
    var rate : float = 0.5;
    var muzzleFlash : GameObject;
    var sound : AudioClip;
    var reloadtime : float = 4; // this reload time is too long!
    var magcount : int = 10;
    var magbulletcount : int = 21;
    var bulletcount : int = 0;
    private var rate_time : float;
    private var reloadTimer: float = 0.0; // internal reload timer
    
    function Start () {
    bulletcount = magbulletcount;
    
    }
    function Update()
    {
    if (reloadTimer > 0){ // if reloadTimer active…
    
    Reload();
    }
    else
    if(Input.GetButton(“Fire1″)&& bulletcount > 0 && Time.time > rate_time)
    {
    Shot();
    
    }
    }
    
    function MuzzleFlashOn()
    {
    muzzleFlash.active = true;
    yield WaitForSeconds(0.02);
    muzzleFlash.active = false;
    }
    function OnGUI () {
    
    GUI.Label (Rect (1235, 825, 100, 250),”" + bulletcount);
    GUI.Label (Rect (1252, 825, 100, 250),”/” + magcount);
    
    }
    function Shot(){
    rate_time = Time.time + rate;
    var mermi=Instantiate(Bullet,this.transform.position,this.transform.rotation);
    mermi.velocity=transform.TransformDirection(Vector3.forward*BulletSpeed);
    
    AudioSource.PlayClipAtPoint(sound, transform.position, 1);
    bulletcount –;
    
    if (bulletcount 0){
    // if run out of ammo but still have clips…
    reloadTimer = reloadtime; // activate reloadTimer
    // you can play reload sound or animation here
    }
    
    MuzzleFlashOn();
    
    }
    function Reload(){
    
    reloadTimer -= Time.deltaTime;
    if (reloadTimer <= 0){
    bulletcount = magbulletcount;
    magcount–;
    }
    
    }
    )
    

    Gui kodum:

    public var atesScripti : Ates;
    var btnTexture : Texture;
    	function OnGUI() {
    		if (!btnTexture) {
    			Debug.LogError("Please assign a texture on the inspector");
    			return;
    		}
    		if (GUI.Button(Rect(90,50,50,50),btnTexture))
    			Debug.Log("Clicked the button with an image");
    		atesScripti.SendMessage( “AtesEt” );
    	}
    

    Böyle oldu fakat Unity hep uyarı verdi kodda hata olduğuna dair.Nerde hata var anlamadım.Birde "Fire1" komutu bir sorun yaratabilir belki.

    • yasirkula diyor ki:

      Tüm ateş kodunu AtesEt()’e atmak kısmı yanlış anlaşılmış. Kodun doğru şekli şöyle olacaktır:

      var Bullet : Rigidbody;
      var BulletSpeed = 20;
      var rate : float = 0.5;
      var muzzleFlash : GameObject;
      var sound : AudioClip;
      var reloadtime : float = 4; // this reload time is too long!
      var magcount : int = 10;
      var magbulletcount : int = 21;
      var bulletcount : int = 0;
      private var rate_time : float;
      private var reloadTimer: float = 0.0; // internal reload timer
      
      function Start ()
      {
      	bulletcount = magbulletcount;
      }
      
      function Update()
      {
      	if (reloadTimer > 0){ // if reloadTimer active…
      		Reload();
      	}
      }
      
      function MuzzleFlashOn()
      {
      	muzzleFlash.active = true;
      	yield WaitForSeconds(0.02);
      	muzzleFlash.active = false;
      }
      
      function OnGUI () {
      	GUI.Label (Rect (1235, 825, 100, 250),"" + bulletcount);
      	GUI.Label (Rect (1252, 825, 100, 250),"/" + magcount);
      }
      
      function Shot() {
      	rate_time = Time.time + rate;
      	var mermi=Instantiate(Bullet,this.transform.position,this.transform.rotation);
      	mermi.velocity=transform.TransformDirection(Vector3.forward*BulletSpeed);
      
      	AudioSource.PlayClipAtPoint(sound, transform.position, 1);
      	bulletcount--;
      
      	if (bulletcount == 0) {
      		// if run out of ammo but still have clips…
      		reloadTimer = reloadtime; // activate reloadTimer
      		// you can play reload sound or animation here
      	}
      
      	MuzzleFlashOn();
      }
      
      function Reload() {
      	reloadTimer -= Time.deltaTime;
      	if (reloadTimer <= 0){
      		bulletcount = magbulletcount;
      		magcount--;
      	}
      }
      
      function AtesEt()
      {
      	if( bulletcount > 0 && Time.time > rate_time)
      	{
      		Shot();
      	}
      }
      
    • yasirkula diyor ki:

      Ayrıca eğer GUI butonuna basılı tuttuğunuz sürece ateş edilmesini istiyorsanız “GUI.Button(Rect(90,50,50,50),btnTexture)” kodunu “GUI.RepeatButton(Rect(90,50,50,50),btnTexture)” ile değiştirin.

  6. Berk Yaşar diyor ki:

    GUIButton kodum:

    “public var atesScripti : Ates;
    var btnTexture : Texture;
    function OnGUI() {
    if (!btnTexture) {
    Debug.LogError(“Please assign a texture on the inspector”);
    return;
    }
    if GUI.RepeatButton(Rect(90,50,50,50),btnTexture)
    Debug.Log(“Clicked the button with an image”);
    atesScripti.SendMessage( “AtesEt” );
    }”

    Verilen hata: “http://img202.imageshack.us/img202/2580/fiim.jpg” bu resimde belirtilmiştir.İncelerseniz sevinirim.

    • yasirkula diyor ki:

      “if( GUI.RepeatButton(Rect(90,50,50,50),btnTexture) )” yerine neden “if GUI.RepeatButton(Rect(90,50,50,50),btnTexture)” yazdınız? Hata burada. Ve “AtesEt” kelimesinin sağındaki ve solundaki tırnak işaretlerini silip klavyeyle tekrar oluşturun.

  7. Berk Yaşar diyor ki:

    Yine hatalar var .Hatalar :”http://imageshack.us/a/img841/2545/zimc.jpg” bu urldeki resimde belirttim.Kodumuda bu resimde :”http://imageshack.us/a/img801/3297/ch1c.jpg” eğer bu işi halledersek çok mutlu olacam.İnşallah

  8. berk1966 diyor ki:

    Ama öyle yapmama rağmen “unkown identifier : ‘AtesEt’ ” hatası aldım.

  9. Berk Yaşar diyor ki:

    “Expecting }, found ” ” hatası verdi

  10. Enes diyor ki:

    Merhaba.. ben unity de yeni sayılırım hep yazmaya çizmeye çalıştım ama bu programı build etmeye kalktım ilk defa 🙂 ve Build failure! Unable to locate Android SDK diye hata verdi nasıl düzeltebilirim.. Teşekkürler..

  11. Enes diyor ki:

    Android SDK yı önceden kurduğum için kolay oldu ve hızlı cevabın için teşekkürler 🙂

  12. Berk Yaşar diyor ki:

    Normal mouse kontrolünü nasıl joystick kontrolüne çevirebilirim?

  13. Berk Yaşar diyor ki:

    Sensörlerle aranız iyi galiba.Telefonda oyunu nasıl yatay kullanabilirim?

  14. Berk Yasar diyor ki:

    Bu scripti neye atamamiz lazim?Simdiden veriginiz cevaplar icin tesekkurler.

    • yasirkula diyor ki:

      Oyunun ilk sahnesinde yer alan herhangi bir obje olur. Ya da şöyle yapın script felan gerekmesin: Edit – Project Settings – Player – Per-Platform Settings – Settings for Android – Resolution and Presentation – Default Orientation -> Landscape Left

  15. melihtarik diyor ki:

    Maalesef oyunumun ismi çalışmayı durdurdu hatası alıyorum bunun sebebi ne olabilir .apk build ediyorum ve olduğu gibi android cihazıma atıyorum 2 android cihazda denedim aynı hatayı aldım ?

    • melihtarik diyor ki:

      unity’de otomatik emilatör seçtim oyunu otomatik emilatör atıyor ordada çalışmayı durdurdu hatası alıyorum bunun sorunu ne anlamadım.

      • yasirkula diyor ki:

        Oyunu Unity Editor’de çalıştırırken konsolda çeşitli Error’lar çıkıyorsa onları düzeltin. Error vermiyorsa o zaman bir bilgim yok.

  16. Murat Şimşek diyor ki:

    Şöyle bir hata alıyorum

    • yasirkula diyor ki:

      Build&Run yapıyorsunuz. Bu seçeneği seçince Unity oyunu belirlediğiniz konuma Build eder ve ardından bilgisayarınıza bağlı Android cihazınıza oyunu otomatik olarak yükleyip çalıştırır. Bu seçeneğin istendiği gibi çalışması -hata vermemesi- için dikkat etmeniz gereken hususlar:

      1- Android cihazınızın Developer Options ayarlarında USB Debugging (ve sanırım Allow mock locations) seçili olmalı
      2- Cihazın sürücüleri bilgisayarınıza kurulu olmalı
      3- Cihaz USB kablo ile bilgisayara bağlı olmalı

      Build&Run seçeneği hâlâ hata verirse sadece Build edin. Ardından .apk dosyasını telefonunuza USB kablo ile atıp dosya yöneticisinden bu .apk dosyasına tıklayarak oyunu cihazınıza elle kurun ve öyle test edin.

  17. Murat diyor ki:

    Yasir Bey Merhaba
    Yaptığım android oyununda ekrana dokunma scripti oluşturdum bunu main cameraya atadım raycast yapıp bulduğum objenin OnMouseDown olayını SendMessages ile yolluyorum bu şekilde sorunsuz çalışan uygulamam google play’a attıktan sonra çalışmamaya başladı kabloyla direk atıyorum çalışıyor ama google play ile yükleyince çalışmıyor. neden olabilir

  18. umut diyor ki:

    hocam ben androide yazdığım oyunda telefon ekranını yan çevirdiğimde ekranında dönmesi için ne yapmam lazım

    • yasirkula diyor ki:

      Player Settings-Resolution and Presentation-Default Orientation seçeneğinin değerini değiştirmeniz lazım (Auto gibi bir seçenek olması lazım.).

  19. Furkan diyor ki:

    hocam ben bi araba atıyorum bunun oyunu başlattığında otomatik ilerlemesini istiyorum oyuncu sadece sağa sola hareket etcek.

  20. Furkan diyor ki:

    Yanlız ben bunu otomatik bi türlü ilerletemedim ve birde attığım ne olursa olsun sahneden düşüyor collider atıyorum genede düşüyor anlamadım

    • yasirkula diyor ki:

      Update fonksiyonunda transform.Translate kullanarak otomatik ilerletebilirsiniz. Ayrıca objeyi yere düşmeyene kadar y ekseninde yavaş yavaş yukarı kaldırmayı denemenizi tavsiye ederim.

  21. Emre diyor ki:

    Abi ben birşey sormak istiyorum konuyla alakasız. Şimdi ben android için temple run tarzı bir oyun yapıyorum. Deneme amaçlı 3rd person controllerde deniyorum. Bu modelin oyun başladığı an otomatik olarak koşmasını nasıl sağlayabilirim?

  22. Emre diyor ki:

    Çok teşekkürler abi

  23. Emre diyor ki:

    Bu kodu küp için değil de 3rd person controllere uygulasak çalışır mı?

  24. GUI diyor ki:

    haritada bi yere tıklayınca cameradan tıkladığımız yere doğru top fırltmasını istiyorum nasıl yapabilirim?(android)

    • yasirkula diyor ki:
      for( var t : Touch in Input.touches )
      {
      	if( t.phase == TouchPhase.Began )
      	{
      		var top : Rigidbody = Instantiate( topPrefab, Camera.main.transform.position, Quaternion.identity ) as Rigidbody;
      		top.velocity = Camera.main.ScreenPointToRay( t.position ).direction;
      	}
      }
      

      topPrefab’ında Rigidbody olmak zorunda.

      • GUI diyor ki:

        Bunu update fonksiyonunun içinemi atıcam ve (topprefab) yerine ne yazıcam?

      • yasirkula diyor ki:

        Update(). topPrefab GameObject türünde public bir değişken olacak. Değerine Inspector’dan top objenizi vereceksiniz.

      • GUI diyor ki:

        tmm onu yaptım ama bu scripti nereye atıcam cube atmayız heralde.

      • GUI diyor ki:

        dediğnizi yaptım ve kodu update fonksiyonunun en altına attim ama ınspector paneline bişey gelmedi.kod şöyle:
        var mouseEskiKonum : Vector3;

        function Update ()
        {
        if( Input.GetMouseButtonDown( 0 ) )
        {
        transform.position = Camera.main.ScreenToWorldPoint( Vector3( Input.mousePosition.x, Input.mousePosition.y, 10 ) );
        mouseEskiKonum = Input.mousePosition;
        }
        if( Input.GetMouseButton( 0 ) )
        {
        transform.localScale += ( Input.mousePosition – mouseEskiKonum ) / 100;
        mouseEskiKonum = Input.mousePosition;
        }
        for( var t : Touch in Input.touches )
        {
        if( t.phase == TouchPhase.Began )
        {
        var top : Rigidbody = Instantiate( topPrefab, Camera.main.transform.position, Quaternion.identity ) as Rigidbody;
        top.velocity = Camera.main.ScreenPointToRay( t.position ).direction;
        }
        }
        }

      • yasirkula diyor ki:

        Dedim ama size topPrefab bir değişken olacak diye… Kodun en başına public var topPrefab : GameObject; yazacaksınız.

  25. mehmeterozkan diyor ki:

    Merhaba hocam paylaşım on numara Elinize sağlık.
    Bir sorum var hocam ben android oyun gelitşriiyorum . ekranda random sphere yagıyo yukardan asagı . benım ıstedıgım ekranda o topa dokundugu an topun yok olması fakat input.mouseposition denedim her yolu denedım olmadı yardım edermısınız..

    #pragma strict

    public var zaman: float=0;
    function Start () {
    }

    function Update () {

    zaman=zaman+1;
    if(zaman % 100==0){

    var cube = GameObject.CreatePrimitive(PrimitiveType.Sphere);
    cube.transform.localScale.x=0.1;
    cube.transform.localScale.y=0.1;
    cube.transform.localScale.z=0.1;

    cube.AddComponent(Rigidbody);
    cube.rigidbody.drag=11;
    cube.transform.position = Vector3 (Random.Range(-3.5,3.4), Random.Range(2,7), -2);

    if( ? )
    {
    skor.score +=1;

    }

    }
    }

  26. mehmeterozkan diyor ki:

    küçük bir örnek verirmisiniz anlamadım

    • yasirkula diyor ki:

      function OnMouseDown() {
      skor.score++;
      Destroy( gameObject );
      }

      Üstteki scriptin adı KureyeTikla.js ise kendi scriptinizde cube.AddComponent( KureTikla ); yapacaksınız. Böylece KureyeTikla.js scripti küreye atanacak ve artık küreye tıklayınca küre yok olacak.

  27. mehmeterozkan diyor ki:

    Tamam oldu hocam .. Script içindeki Start() ve Update () silince oldu Teşşekür ederim Bir de oyunun yatay oynmasını ıstıyorum hocam o nasıl olacak suan benım dık sekılde oynuyor.

  28. Erdinç diyor ki:

    yalnız sanırım “Touch” yapısını açıklarken bir hata var o yapı “Struct” türünde değil enumeration yani “enum” yapısında yanlış yazmışsınız.

  29. recep diyor ki:

    kardeşim şöyle bir hata alıyorum — Error building Player: Win32Exception: ApplicationName=’C:/Android/android-sdk\tools\zipalign.exe’, CommandLine=’4 “C:\Users\asd\Documents\New Unity Project 1\Temp/StagingArea/Package_unaligned.apk” “C:\Users\asd\Documents\New Unity Project 1\Temp/StagingArea/Package.apk”‘, CurrentDirectory=’Temp/StagingArea’ — sebebi ve çözümü nedir yardım edermisin

  30. recep diyor ki:

    kardeşim öncelikle hızlı cevabın için teşekkür ederim bu arada çözümü vereyim bizimde faydamız olsun build-tools içindeki zipalign.exe yi tools un içine kopyalıyoruz…iyi günler

  31. ibrahim diyor ki:

    flappy birdteki gibi karakterin zıplamasını nasıl yapıyoruz

    • yasirkula diyor ki:

      rigidbody.AddForce olabilir, transform.Translate olabilir, bir zıplama animasyonunu animation.Play ile oynatmak olabilir… Seçenek çok.

      • ibrahim diyor ki:

        ben yeni başladım bu yüzden pek birşey bilmiyorum şu anlık daha ana menüyü ve geçişleri yaptım animasyon yapımı nasıl oluyor bunla ilgili bir video yada bir yazı yazacakmısınız

      • yasirkula diyor ki:

        Hayır animasyon konusu ilgimi çekmiyor.

  32. gökhan diyor ki:

    (Input.GetAxis(“Vertical”) bu komutu androidde nasıl çalıştırabilirim (ekranda bir guı objesine dokununca çalışmasını istiyorum)

  33. enes diyor ki:

    Merhaba yasir abi benim bi sorum var şimdi ben bi fps yaptım tamamladım herşeyi bunun fire1, w, a, s, d veya left shift gibi tuşları var her şey tamam ama birtek bu sorunum kaldı sağda solda pek bi bilgi bulamadım çoğu ingilizce bendeki ingilizcede lise düzeyi çıkamıyorum içinden bu tuşları nasıl dokunmatik butona çeviricem yarrdımcı olun lütfen bmyle bi konunuz varsa link atarmısınız

  34. enes diyor ki:

    abi aslında merak edilen ve değinilmeyen bi konu. klavye tuşlarını dokunmatik butona çevirmeyle alakalı bi konu açsanız baya faydalı siteye yakışır bişey olur

  35. halis diyor ki:

    abi klavyede yapma olayı biraz daha rahat oluyor en azından dokunmatik ekranda bir cismi butonlarla nasıl sağa sola hareket ettireceğiz koda dökseniz çok sağolun şimdiden.

    • yasirkula diyor ki:

      Ekranın sağ yarısına dokununca sağa doğru, sol yarısına tıklayınca sola doğru hareket edebilirsiniz. Kod şuna benzer:

      for( var t : Touch in Input.touches )
      {
      if( t.position < Screen.width * 0.5f ) // ekranın sol yarısına tıklıyoruz
      {
      //sola hareket etme kodu
      }
      else // ekranın sağ yarısına tıklıyoruz
      {
      //sağa hareket etme kodu
      }
      }

  36. halis diyor ki:

    Hocam kusura bakmayın bir sorum daha olacak ben unity de android için apk çıkardığımda (uygulamaadı.apk.lnk) diye çıkarıyor ve bunu android cihaza atıp çalıştırmaya başladığımda ***bu eylemi gerçekleştirecek uygulama bulunmadı diyor***** sorun nedir yardımcı olabilirmisiniz Teşekürler.

    • yasirkula diyor ki:

      Bu sorunu yaşayan birini daha önce duymadım ve çözümü bilmiyorum. Ama dosyanın uzantısını .lnk’den .apk’ya çevirmeyi deneyebilirsiniz.

      • halis diyor ki:

        Eclipse ortamında Androide herhangi bir uygulama yaptığında bilgisayara samsung kies kurup her yaptığının apk sını çıkarmadan önce android cihazı usb kablosu ile bağlayıp play dediktan sonra cihazda Çalışıyormu veya nasıl bir görüntü var bakabiliyorsun. Unity de bu işlemi nasıl yapabiliriz acaba(lnk uzantısı işe yaramadı olmuyor)

      • yasirkula diyor ki:

        Unity Remote diye bir Android uygulaması var, o işinize yarayabilir. Nasıl çalıştığını bilmiyorum.

  37. muhammed diyor ki:

    Selamun aleyküm cok degerli bir oyun yapmaktayim size iki tane sorum olacakti cevaplarsaniz sevinirim =)
    1.ben 2d characterimi unity asset store dan aldim bedava 😀 acaba bu karakteri kullanarak Google Play store’a yayinlarsam sucmu islerim yoksa normalmi tesekkürler.

    ve bu touch(dokunmatik) cok ugrastim ingilizce almanca türkce aradim vs. hic yapamadim
    karakterim platform üzerinde oldugu icin sadece x ekseninde yürümesi gerek siz isinlanma yapmissiniz rica etsem birde saga sola tus koyarak onlara basarak karakteri yürütmeyi anlatabilirmisiniz lütfen tesekkür ediyorum.

    siteniz cok güzel =)

    • yasirkula diyor ki:

      1- Belki olabilir. Asset Store’da modelin lisans bilgilerini bulmaya çalışın.
      2- rigidbody.AddForce ile hareket edebilirsiniz sanırım. Bu konuyu anlatamam, ben de pek bilmiyorum.

      • muhammed diyor ki:

        Hizli Cevap Verdiginiz icin tesekkür ederim öncelikle.
        ben bir script kullaniyorum (unity tutorials) da buldum cok güzel hersey cok iyi calisiyor animasyon da yaptim hiz arttiginda yürümeye basliyor fakat bu scriptte a ve d veya tuslariyla yürüyor bunun hic mi dokunmatik yapamayiz ? 😦
        örnegin gui texture 2 tane yaparak sag sol yerlestirsem ve bu scriptin icine bikac kod yazmakla falan filan olurmu ;(

        public class PlayerController : MonoBehaviour {

        blablabla…
        void Update () {
        blablabla…
        float moveSideways = Input.GetAxis (“Horizontal”);
        Vector3 movement = new Vector3 (moveSideways, 0.0f, 0.0f);
        rigidbody.AddForce (movement * sideSpeed * Time.deltaTime);
        transform.position += Vector3.forward * speed * Time.deltaTime;
        }
        blablabla…
        }

        tesekkür ederim sabirsizlikla cevabinizi bekliyorum

      • yasirkula diyor ki:

        Sol GUITexture’yi “public GUITexture solTexture;” değişkenine, sağ GUITexture’yi de sagTexture değişkenine değer olarak atayın. Sonrasında “float moveSideways = Input.GetAxis (“Horizontal”);” satırını şununla değiştirin:

        float moveSideways = 0f;

        foreach( Touch t in Input.touches )
        {
        if( solTexture.HitTest( t.position ) )
        moveSideways = -1f;
        else if( sagTexture.HitTest( t.position ) )
        moveSideways = 1f;
        }

  38. muhammed diyor ki:

    Olmuyor Olmuyor Olmuyor!!!!!!!!!!!!1
    ben touch yapamicam galiba birakacam bu oyun isini 😦 okadar yaptim bi touch yapamiyorum yha ekledim dediklerinizi hatayi da giderdim deger olarak da atadim basiyorum maus la üstüne haraket bile etmiyor… off

    • yasirkula diyor ki:

      Mouse ile çalışmaz. Dokunmatik ekranda çalışır sadece.

      Eğer hemen pes edecekseniz gerçekten bırakın oyun işini. Eğer oyun yaparken takıldığınız noktaları araştırmıyor, oyun yapım sürecinden bir zevk almıyorsanız boşuna kasmayın derim.

  39. muhammed diyor ki:

    haaa tamam kusura bakma yasir abi 😀 yok ben pes etmem cünki 1 yildir htc one m8 hayali kuruyom 😀 onu almam icin bu oyunu yapiyorum ads ten para kazanirim insallah 😛

  40. murat diyor ki:

    abi ben bi fps yapıyorum şuan ama kamera rotasyonunu yapamıyorum ekranın herangibi yerinden sürükleyince kamera döncek(dead triger gibi) belli açıları olacak ama yapamadım elinizde kamera rotasyonuyla alakalı script varmı

  41. Emir diyor ki:

    Ben koşu oyunu yapıyorum scriptsde zıplamak için atanan tuş space androidde bunun karşılığı ne oluyor?

    • yasirkula diyor ki:

      Karşılığı yok. Ancak kodu düzenleyerek karakterin ekrana tıklandığı zaman zıplamasını ayarlayabilirsiniz.

      • Emir diyor ki:

        sağolun

      • Emir diyor ki:

        if ((Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.Space)) && m_playerJump <= -1.0f && m_playerSlide <=0.0f)
        {
        AudioSource.PlayClipAtPoint(m_jumpAudio, m_player.transform.position);
        m_playerJump = 1.0f;
        m_playerYvel = 0.0f;
        m_player.animation.Play("jump");
        }

        peki bu komutu nasıl düzenleyip androide uyarlıyabilirim?

      • yasirkula diyor ki:

        Ekrana tıklayınca zıplaması için if’i şöyle değiştirmelisiniz: if( Input.GetMouseButtonDown(0) && m_playerJump <= -1.0f && m_playerSlide <=0.0f )

  42. günay diyor ki:

    SELAMUN ALEYKUM

    hocam verdiğiniz linki açtım bütün yazıları okudum ama halen anlayamadım.biraz acemiyim.

    if( Input.GetMouseButtonDown(0) && !engeleCarptim && Input.mousePosition.x < Screen.width /2 )

    sizin söylediğiniz kodu kullanarak sadece sol tarafta çalıştırabildim ama bana aynı anda tıklayınca çalışması lazım.Mesela ekranı ikiye bölüyorum.1.player sol tarafa 2.player sağ tarafa bunun içince touch kullanmam gerek herhalde.

    if( Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began && !engeleCarptim )

    touch için nasıl sol/sağ tarafa alacağım

  43. günay diyor ki:

    evet hocam teşekkürler oldu ama şimdide multitouch desteklemiyor

  44. günay diyor ki:

    Input.touches yaptıgım zaman multitouchmu oluyor

    • yasirkula diyor ki:

      Input.touches bir array’dir ve ekrandaki tüm parmakları barındırır. Bu parmaklar üzerinde tek tek işlem yapabilirsiniz, böylece multi-touch olmuş olur.

  45. günay diyor ki:

    hocam facebookda kabul etseniz olurmu

  46. günay diyor ki:

    hocam yönlendirdiğiniz sayfaya baktım baştan aşağı okudum.aşagıdaki kod dogrumu acaba.multitouch için

    #if UNITY_ANDROID
    for( var parmak : Touch in Input.touches )
    {
    if( Input.touchCount == 1 && parmak.phase == TouchPhase.Began && !engeleCarptim && Input.GetTouch(0).position.x < Screen.width / 2 )
    {
    gravity = true;
    Camera.main.GetComponent(Engeller).enabled = true;
    dikeyHiz = ziplamaGucu;
    audio.PlayOneShot( kanatSes );
    }
    #endif

    • yasirkula diyor ki:

      Rica ediyorum yazdığınız kodu bir okuyun. (Input.touchCount == 1) demek o if’in sadece ekranda bir tane parmak varken çalışması demektir. Multi-touch ise birden çok parmağı idare etmek anlamına gelmekte. Nasıl multi-touch desteklesin ki :/

  47. günay diyor ki:

    if( Input.touchCount > 0 && Input.GetTouch(Input.touchCount-1).phase == TouchPhase.Began && !engeleCarptim && Input.GetTouch(Input.touchCount-1).position.x > Screen.width / 2 ) bu dogru değilmi

  48. günay diyor ki:

    hocam şimdi çalıştı neden hayır dediniz acaba.kodda sıkıntı mı var

  49. günay diyor ki:

    hocam abimle denedik olmamış.tam olarak nasıl yapmam lazım

    #if UNITY_ANDROID
    for( var parmak : Touch in Input.touches )
    {
    if( Input.touchCount > 0 && parmak.phase == TouchPhase.Began && !engeleCarptim && Input.GetTouch(0).position.x < Screen.width / 2 )
    {
    gravity = true;
    Camera.main.GetComponent(Engeller).enabled = true;
    dikeyHiz = ziplamaGucu;
    audio.PlayOneShot( kanatSes );
    }
    #endif

    • yasirkula diyor ki:

      Soldaki karakter için kod:

      for( var parmak : Touch in Input.touches )
      {
      if( parmak.phase == TouchPhase.Began && !engeleCarptim && parmak.position.x < Screen.width / 2 )
      {
      gravity = true;
      Camera.main.GetComponent(Engeller).enabled = true;
      dikeyHiz = ziplamaGucu;
      audio.PlayOneShot( kanatSes );
      }
      }

      Sağdaki karakterin kodunu kendiniz yazarsınız.

  50. günay diyor ki:

    sağdakinide > işareti yaparakmı kaydedeceğim.

  51. Emre diyor ki:

    abi ben şöyle birşey yapmak istiyorum. telefonda nereye dokunursam küp oraya doğru kaysın yani ışınlanmasın yavaş yavaş gitsin oraya sağa veya sola. Bunu nasıl yapabilirim

    • yasirkula diyor ki:

      Dokunduğunuz noktanın koordinatını öğrenmek için Raycast fonksiyonuna parametre olarak girilen RaycastHit değişkeninin point değerini okuyun.

      Artık hedef noktayı bildiğinize göre ona doğru hareket etmeyi de siz halledebilirsiniz.

  52. nuri diyor ki:

    hocam android oyunda butonmu daha iyi olur yoksa bu dokunmatik işlevi mi?

    • nuri diyor ki:

      buton UI bu arada..

      bide meselea örnek verirsek ekrana dokunuldugunda topun kaybolmasını istediğimizde

      for( var parmak : Touch in Input.touches )
      {
      if( parmak.phase == TouchPhase.Began)
      {

      Destroy ( top );

      }
      }

      bunu yapmak yeterli olurmu bu kadar mı yani?

    • yasirkula diyor ki:

      İlk sorunuzun cevabı oyundan oyuna değişir, buna siz karar verin. İkinci sorunuzda verdiğiniz kod ise doğrudur.

  53. kadir diyor ki:

    Çok faydalı bi yazı olmuş eline sağlık . Peki biz küpün sağa bastığımızda sağa sola basatığımızda sola gitmesini nasıl sağlayabiliriz? (ışınlanmadan)

  54. nuri diyor ki:

    hocam bu fingerID hakkında basit bi örnek kod yazabilirmisiniz.teşekkürler.

    • yasirkula diyor ki:

      Ekrana birden çok parmak dokunsa da sadece ilk parmağın konumunu dikkate almak istiyoruz diyelim:

      var fID : int = -1;
      
      function Update()
      {
      	for( var t : Touch in Input.touches )
      	{
      		if( t.phase == TouchPhase.Began && fID == -1 )
      			fID = t.fingerID;
      		else if( ( t.phase == TouchPhase.Ended || t.phase == TouchPhase.Canceled ) && fID == t.fingerID )
      			fID = -1;
      		if( t.fingerID == fID )
      		{
      			// ekrana ilk dokunan parmaktayız, burada onun üzerinde işlem yapabiliriz.
      		}
      	}
      }
      
      • nuri diyor ki:

        “t.fingerID” “t.fingerId” şeklinde olacak sanırım öbür türlü hata veriyor diğer arkadaşlar için.

        sağolun hocam çözdüm sonunda yardımınız sayesinde.

  55. nuri diyor ki:

    bide karakteri herhangi birşeyin poziyonuna doğru nasıl fırlatabiliriz?
    addForce yada başkabirşeyle

    • yasirkula diyor ki:

      Diğer GameObject obje2, bizim GameObject obje1 olsun. İki obje arasındaki yön vektörünü obje2.transform.position – obje1.transform.position işlemiyle buluyoruz.

  56. nuri diyor ki:

    hocam cevaplarınız için teşekkür ederim.
    birşey daha sormak istiyorum.
    bir obje var mesela mouse ya basıldığında obje2nin pozisyonuna yavaşça nasıl ışınlayabiliriz yani yavaş yavaş obje2 nin pozisyonuna nasıl getirebilirim

    • yasirkula diyor ki:

      public var kaymaMiktari : float = 0.1f;
      function Update()
      {
      if(Input.GetMouseButtonDown(0))
      transform.Translate( ( obje2.transform.position - transform.position ) * kaymaMiktari );
      }

      Burada Translate fonksiyonu her çalıştığında obje1 ile obje2 arasındaki mesafenin 1/10’u kadarı obje1 tarafından katedilir (kodun obje1’de olduğunu varsayarsak).

      • nuri diyor ki:

        tmmdır hocam çok sağolun sayenizde oldu.

      • nuri diyor ki:

        aynı şekilde rotate nasıl oluyor

        transform.Rotate( (obje2.transform.rotation – transform.rotation) ) * kaymaMiktarı );

        şeklinde yapınca hata veriyor

      • yasirkula diyor ki:

        rotation yerine eulerAngles yazabilirsiniz. Ancak çalışıp çalışmayacağını bilmiyorum.

  57. çaylak diyor ki:

    class Dokun ..
    void Update(){ if (Input.touchCount == 1) {
    transform.Translate(Input.touches[0].deltaPosition.x*0.04f,Input.touches[0].deltaPosition.y*0.04f,0);}}

    hocam misal jenga oyunu yapıyoruz dokunduğumuz taşı çekicez ilk oyuna girdiğimde sıkıntı yok kübü istediğim eksen doğrultusunda çekiyor fakat camera acısını değiştirdiğimde yine kübün local eksenine göre hareket ediyor . bu hareketi kameranın acısı ne olursa olsun çektiğimiz eksen doğrultusunda gelmesini nasıl sağlarız.kontrolüde şu scriple sağlıyorum
    public Dokun dkn;
    void Start(){dkn = gameObject.GetComponent();}
    void OnMouseDrag(){dkn.enabled = true;}
    void OnMouseUp(){dkn.enabled = false;}}

  58. çaylak diyor ki:

    public float vec=0f;

    void Update(){if (Input.touchCount == 1) {
    vec= Input.touches[0].deltaPosition.x*0.04f;
    transform.Translate( Vector3.right *vec ,Camera.main.transform);}
    sonunda buldum transform.translatenin bu parametreleri kamera netarafa dönerse dönsün touch pozisyonunu hareketini paralel şekilde sağa sola hareket etmesini sağlıyor kullanışlı bi özellik.

  59. wilson diyor ki:

    Assets/k�p.js(8,5): BCE0005: Unknown identifier: ‘parmak’. böyle bir hata alıyorum yardımcı olur musunuz?

  60. wilson diyor ki:

    Tamam çok teşekkürler düzelttim.

  61. yunusemre diyor ki:

    Abi bir soru dah sormak istyorem omcollisionenter komutu coildera değincemi yoksa objeyemi değince calisir bu komutla yapay zeka yapmk istiyorumda

    Void OnCollisionEnter(Collision col)
    {
    if(col.gameobject.tag == “duv”)

    {
    animation.play (koşma anmimasyonu)
    asker.transform.translate , biz.transform.translate
    }
    }
    Gibi abi bu konuda yrdim edersen sevinirim

    • yunusemre diyor ki:

      Hatalarımı düzeltirsen sevinirkm bu arada bix colider trigger olacak

    • yasirkula diyor ki:

      OnCollisionEnter fonksiyonu, “Is Trigger”ı kapalı collider’a çarpınca çalışır. OnTriggerEnter ise “Is Trigger”ı açık collider’a çarpınca çalışır.

      void OnTriggerEnter( Collider col )
      {
      if(col.gameObject.tag==”duv”)
      {
      animation.Play(“KosmaAnim”);
      askeri translate;
      bizi translate;
      }
      }

  62. yunusemre diyor ki:

    Abi peki update fonksiyonuna yazdigimiz bir işlemi 5saniyede bir nasıl yapariz
    colider icine girince canı 5 saniyede bir azalsın istiyorum

    • yasirkula diyor ki:

      Bir float olur ve bunun değeri Update’te Time.deltaTime kadar artar. Değişkenin değeri 5’ten büyük eşit olduğu vakit karakter hasar alır. Collider’ın içinde olup olmadığımızı anlamak için bir boolean’ın değeri OnTriggerEnter’da true, OnTriggerExit’ta false yapılabilir.

      • yunusemre diyor ki:

        Abi bu işlemi nasıl bi kodla yaparım

      • yasirkula diyor ki:

        void OnTriggerEnter
        boolean=true

        void OnTriggerExit
        boolean = false

        void Update
        float += Time.deltaTime
        if( float >= 5 && boolean == true )
        {
        canı azalt
        float = 0
        }

  63. yunusemre diyor ki:

    Abi canı azalt kısmını nasıl yapıcaz onu anlamyamadım

  64. Gamer diyor ki:

    ABi time.deltatime ı void update yazarsam sürekli süre artıyor fakat ben sadece colidera girince artamsını istiyorum ontriggerentere yazarsam colidera girip çıkınca canım 5 eksiyor

    if( mlk >= 5 && saldırı == true )
    {
    Can -= 5;
    }
    bu kısmıda ontriggera attım çünkü update deyken sürekli canım 5 eksiliyor abi bu sorunu nasıl çözerim şuan ki kodum

    using UnityEngine;
    using System.Collections;

    public class atak : MonoBehaviour {
    public bool saldırı ;
    public float Can = 100;
    public float mlk = 0;
    public GameObject karakter;

    // Use this for initialization
    void Start () {
    saldırı = false;
    }

    // Update is called once per frame
    void Update () {
    mlk += Time.deltaTime;

    if (Can = 5 && saldırı == true )
    {
    Can -= 5;
    }
    }
    void OnTriggerExit ()
    {
    saldırı = false;
    }
    }

    • Gamer diyor ki:

      canın sürekli azalması sorununun çözdüm

      mlk += Time.deltaTime;

      if (Can = 5 && saldırı == true )
      {
      Can -= 5;
      mlk = 0;
      }

      kodu böyle değiştirdim fakat sayacın colidera girince çalışmasını istiyorum bu sorunu nasıl çözebilirim

  65. nuri diyor ki:

    hocam kolay gelsin
    “level1” , “level2” , “level3”
    adında 3 level var
    ana menü ekranında başlata basıldığında bu 3 levelden rastgele birisini nasıl başlatabilirliz
    random kodunu burda nasıl kullanıyoruz

    • yasirkula diyor ki:

      if( Random.Range(0, 2) == 0 ) // 0 ya da 1 döndürür
      level1 aç
      else if( Random.Range(0, 2) == 0 ) // 0 ya da 1 döndürür
      level2 aç
      else
      level3 aç

  66. Developer diyor ki:

    andriod için c# script kodum var ama 2D uygulama açınca çalışıyor 3D uygulama açınca çalışmıyor nedeni ne olabilir? Teşekkürler..

    • yasirkula diyor ki:

      Aldığınız hataya bağlı.

      • Developer diyor ki:

        Hata almıyorum. Daha açmam gerekirse, 3D bi oyun yapmam gerek ve androidde ekrana düz çizgi çizdirmem gerek. Elimdeki kod 2D bi proje açıp denediğimde çalışmasına rağmen 3D projede çalışmıyor. Nedenini anlayamadım. Yardımcı olursanız çok sevinirim uzun süredir uğraşıyorum ama çözemedim. Kod şu hocam:

        using UnityEngine;
        using System.Collections;

        public class cizik : MonoBehaviour
        {

        private LineRenderer line;

        private Vector3 mousePos;

        public Material material;

        void Update ()
        {

        foreach (var parmak in Input.touches) {
        if (parmak.phase == TouchPhase.Began) {

        if (line == null) {

        createLine ();
        }

        mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);

        mousePos.z = -10;

        line.SetPosition (0, mousePos);
        line.SetPosition (1, mousePos);
        }

        else if (parmak.phase == TouchPhase.Ended && line) {
        mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
        mousePos.z = -10;
        line.SetPosition (1, mousePos);

        }

        else if (parmak.phase == TouchPhase.Moved && line) {
        mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
        mousePos.z = -10;

        line.SetPosition (1, mousePos);
        }
        }
        }

        private void createLine()
        {

        line = new GameObject(“Line”).AddComponent();
        line.material = material;
        line.SetVertexCount(2);
        line.SetWidth(0.06f,0.06f);
        line.useWorldSpace = true;

        }
        }

  67. Developer diyor ki:

    Sebebini kendi kendime çözdüm. Kamerayı perpective yerine orthographic yapınca düzeldi. Yine de saçma geldl bana.

  68. Yunus kara diyor ki:

    Abi birşey sorabilirmiyim bir animasyonun bir durumda sürekli oynamasını ve de bir kez oynayıp bitmesini nasıl sağlarız

    • yasirkula diyor ki:

      Animasyon asset’ini seçince animasyonun türüne göre (Legacy veya Mecanim) Inspector’da şu iki değerden biri belirecek:

      Loop Time: değeri true olursa animasyon kendisini tekrar eder, false olursa animasyon bir kere oynayıp durur.
      Wrap Mode: değeri Loop olursa animasyon kendisini tekrar eder, Once olursa animasyon bir kere oynayıp durur.

  69. Yunus kara diyor ki:

    Abi network bilgin varmı http://createathingunity.blogspot.co.uk/ bu sitede bir kod buldum am guı button larla calısıyor ve hic birsey anlayamadim yardim edermisin lutfen kfayi yedim

  70. Yunus kara diyor ki:

    Abi bir soru daha sorucam bir işlem olduğunda ekranda bkruı text beliresini nasıl sağlarım mesela adamın kafasına box colider koyup headshout scipriti yazdım vurunca adam ölüyor ölünce uı text belisin ve 2-3 saniye sonra kaybolsun istiyorum

    • yasirkula diyor ki:

      UI’ın içindeki bir scriptte Start fonksiyonu içerisinde Destroy(gameObject, 2.0f); komutu yer alır. Ardından headshot olduğunda Instantiate ile bu UI objesi oluşturulur. Bunun için UI’ı prefab yapmanız lazım.

  71. Yunus kara diyor ki:

    Abi yine ben 😀 abi bir silah scipritim var mermiyi her instaniate ettiğinde uı textteki sayı nin azalmasini nasil sağlarim

    • yasirkula diyor ki:

      Ateş etme fonksiyonu her çalıştığında
      1) UI Text’in değerine String olarak erişmek için: GetComponent(UnityEngine.UI.Text).text
      2) Bu String’i int’e çevirmek için: google “unity string to int”
      3) Ardından int değeri 1 azaltmak için: değişken = değişken – 1
      4) UI Text’e yeni değerini vermek için: GetComponent(UnityEngine.UI.Text).text = “” + değişken

      • Yunus kara diyor ki:

        Abi bayada karışık biraz açıklanrmısın getcomponent diyoruz ama hangi gameobject e yapıcaz bide bir sorum daha olacak abi animation.Play yazınca hata oluşuyor kod çalışmıyor

      • yasirkula diyor ki:

        UI Text objesinde yazabilirsin GetComponent’i. animation için objede Animation component’i olmak zorunda ve bu component’te kullanacağın animasyonlar da listelenmiş olmak zorunda.

  72. Yunus kara diyor ki:

    Abi animation.play kodunu algılamayo unity eskiden oluyordu ama şimdi olmuyor

  73. Sefa DOĞAN diyor ki:

    İyi günler eğitimleriniz çok faydalı ama bir şey daha sormak istiyorum ben sahneme Canvas koydum maksat onun üzerinde Uİ butonlar koyarken ölçülü olsun fakat canvas kare oluşuyor eskiden dikdörtgen oluşurdu ve oyun açılınca o boyutta olurda imdi değişti boyutları ve android tabanlı oyun yapıyorum en uygun boyutlar nedir ve nasıl ayarlarım

    • yasirkula diyor ki:

      2D canvas hep ekran ile aynı boyuttadır. 2D canvas’larda “UI Scale Mode”u “Scale With Screen Size” yaparsanız ekranın boyutu değiştikçe arayüz de aşağı yukarı aynı şekilde kalacaktır.

  74. mehmet eren ballı diyor ki:

    smartface app studio’da javascriptle program yazmayı istiyorum.amacım telefonda boş ekrana tıklayınca alert yoluyla uyarı verdirmek.butona tıkladığında bunu yap metodunun ekrana dokunma versiyonu yani.ilk olarak deneme için bunu yapmak istiyorum.yardımcı olursanız sevinirim.

    • yasirkula diyor ki:

      Ekrana tıklayınca bunu algılamak Unity’de çok kolay ama Smartface App Studio’yu hiç kullanmadığım için onda nasıl yapılır bilmiyorum.

  75. ekrem diyor ki:

    hocam iyi günler ben unity de bir oyun yaptım ama apk cıktısı alırken su hatayla karşılaşıyorum ve cözemedim hata Array index is out of range

    • yasirkula diyor ki:

      Bu hata array’in kapasitesinden büyük bir index’teki elemana erişmeye çalışırken olur (örneğin 2 elemanlı array’in 3. elemanını erişmeye çalışınca). Build alırken olması gerçekten garip geldi.

  76. maliyazici diyor ki:

    Öncelikler Selamun Aleykum
    Ben unıty nin kendi 2D characterini kullanarak bir oyun yaptım.
    Bu oyunu android için yaptım bu bir koşu oyunu surekli adam koşuyor.
    Ama zıplamayı ayarlayamadım android için 2d character e ne scripti yazıp eklemem lazım yardım edermisin ?

    • yasirkula diyor ki:

      rigidbody.AddForce veya CharacterController.Move kullanabilirsiniz. Belki basit bir animasyon kullanmak bile yeterli olabilir. Unity’nin 2D karakterini kullanmadığım için kesin birşey diyemiyorum.

      • maliyazici diyor ki:


        bak bu benim uzerinde duzenleme yaptıgım unıty nin character controller ı benım buna tam olarak ne eklemem lazımki bu oyun androidde ekrana tıklandıgında zıplasın tam ne eklemem lazım ya tam kodu söyleyemezmisin yardım edersen çok sevinirim bu sorun çözuldugu an google play e koyıcam oyunu.

      • yasirkula diyor ki:

        m_Jump = Input.GetMouseButtonDown(0); deneyebilirsin.

      • maliyazici diyor ki:

        m_Jump = Input.GetMouseButtonDown(0); bu kod pc de işe yaradı androidde yaramadı

  77. maliyazici diyor ki:

    http://i.hizliresim.com/0kYy7Y.jpg buda controller ın resmi ne eklersem android de tıklayarak zıplar

  78. oguz diyor ki:

    hocam 2d bir Android basketbol oyunu tasarladım pota ve toptan oluşan ancak sadece tek bir şey kaldı yayınlamam için başlangıçta top durgun halde ve ben parmağımla topu tutup potaya fırlatmak istiyorum(mesela yavaş sürüklersem yavaş gitsin yönü biz seçelim vs) bir kod örneği olur fikir olur yardım ederseniz çok sevinirim iyi çalışmalar

  79. Burak GÜNDÜZ diyor ki:

    S.a. Hocam çok güzel bir şekilde açıklıyorsunuz emeğinize sağlık. Benim android touch entegrasyonu anlatımınızla ilgili bir sorum olacak. Anlattığınız touch kütüphanesiyle ekranın belli noktasına tıklamayı aldık, hareket ettiğini algıladık hatta yukarı-aşağı ayırt ederek. Peki parmağı kaldırmadan, basılı tutarak önce yukarı sonra aşağı hareket ettirdik ve her hareketin ayrı, yani aşağı kaç birim gitti, yukarı kaç birim gitti şeklinde alabilir miyiz? Teşekkürler.

    • yasirkula diyor ki:

      Zor bir soru olmuş. İlla ki dediğiniz gibi birşey yapılır ancak algoritmasını tam tahmin edemiyorum. Parmak ekranda olduğu sürece genelde çok ufak da olsa hareket eder, yani parmağı ekranda ne kadar sabit tutmaya çalışsanız da genelde orada 1-2 pixellik oynamalar olur. Bir parmak hareketinin kasıtlı olarak yukarı veya aşağı olup olmadığını anlamak için belli zaman aralıklarında son iki parmak position’larının farkının y değerine bakmalısınız. Bu değer 0’dan çok büyükse parmak o zaman aralığında yukarı çıkmıştır, yoksa aşağı inmiştir.

  80. mahmut diyor ki:

    Daha kolay kod yazmayi istiyorum onun icinde program gerekli bana en kolay kod yazma programi bulamazmisiniz bu işi anladiginiz için size sordum lutfen

    • yasirkula diyor ki:

      Visual Studio’yu beğenenler var. Ben Notepad++ kullanıyorum çünkü çok hızlı açılıyor, ancak VS kadar detaylı bir kod editörü değil.

  81. ahmet diyor ki:

    Merhabalar kusura bakmayın bir sorum olacaktı: Ben bir tane karekter hazırladım ve bunun animasyon hareketleri(yürüme,koşma,dönme ) bunları yaptım ve bunu bilgisayarda çalıştırdığımda animasyonlar çalışıyor.(Adım atma,koşma gibi) ben bunu telefonda oluşturduğum butonlar sayesinde yapmak istiyorum ama tam olarak nasıl olacağını anlamadım. Yardımcı olma imkanınız varmı. Teşekürler.

    bilgisayarda bu kadarla animasyonlar hareketler herşey tamam çalışıyor.

    ******
    #pragma strict

    internal var animator:Animator;
    var v:float;
    var h:float;
    var sprint :float;//koşma

    function Start () {

    animator=GetComponent(Animator);

    }
    function Update () {

    v=Input.GetAxis(“Vertical”);
    h=Input.GetAxis(“Horizontal”);
    Sprinting();
    }
    function FixedUpdate()
    {
    animator.SetFloat(“walk”,v);
    animator.SetFloat(“Turn”,h);
    animator.SetFloat(“Sprint”,sprint);

    }
    function Sprinting()
    {
    if(Input.GetButton(“Fire1”))
    {

    sprint=0.2;
    }
    else{
    sprint=0.0;
    }

    }
    ******

    • yasirkula diyor ki:

      Bu scripte şu kod eklenecek:

      function MoveUp() { v = 1.0; }
      function MoveDown() { v = -1.0; }
      function MoveLeft() { h = -1.0; }
      function MoveRight() { h = 1.0; }

  82. ahmet diyor ki:

    şu kodlarla ekranda var olan bir tane nesneyi sadece normal ilerleme hareketleri yaptırabiliyorum. ben bilgisayarda çalışan yukardaki sistemi bu butonlarla karektere nasıl uygulayabilirim

    #pragma strict

    var walkSpeed:float = 9;

    private var Controller:CharacterController;

    private var motion:Vector3;//motion=hareket

    function Start() {

    Controller = GetComponent(CharacterController);

    }

    function Update() {

    if(Input.GetKeyDown(KeyCode.Escape)) {
    Application.Quit();
    }

    }

    function MoveLeft() {

    motion = transform.TransformDirection(Vector3.left) * walkSpeed * Time.deltaTime;

    Controller.Move(motion);

    }

    function MoveRight() {

    motion = transform.TransformDirection(Vector3.left) * walkSpeed * Time.deltaTime*-1;

    Controller.Move(motion);

    }

    function MoveUp() {

    motion = transform.TransformDirection(Vector3.forward) * walkSpeed * Time.deltaTime;

    Controller.Move(motion);

    }

    function MoveDown() {

    motion = transform.TransformDirection(Vector3.forward) * walkSpeed * Time.deltaTime*-1;

    Controller.Move(motion);

    }

    function MoveRotation(angle:Vector3) {

    transform.rotation = Quaternion.Euler(0, angle.y * ButtonController.cameraRoateSpeed, 0);

    }

  83. ahmet diyor ki:

    bunlarda buton çizimleri ve kamera hareketleri ….

    #pragma strict


    function Update() {
    TouchNone();
    if(Input.touches.Length > 0) {
    for(var i:int=0; i<Input.touchCount; i++) {
    var touch:Vector2 = Vector2(Input.GetTouch(i).position.x,(Screen.height-Input.GetTouch(i).position.y));
    TouchButtonCheck(touch);
    TouchRotate(touch, i);
    }
    }
    }

  84. ahmet diyor ki:

    Ben bunu daha önce sordum mantığını anlatınız uygulamaya çalıştım ama yapamadım.Biraz daha kapsamlı bir şekilde açıklamaya zamanınız varsa yardımcı olursanız çok iyi olur.Şmdiden teşekürler

  85. ahmet diyor ki:

    Hoacam aynısını yaptım şimdi sadece sprint koşma animasyonu yukarı buttonla çalışıyor diğer 3 tane buton etkisiz neden acaba.(Sizi sürekli rahatsız ettiğmizden dolayı kusura bakmayın.Tüm yardımlarınız için saolun.)

  86. ahmet diyor ki:

    Pardon yanlış saöyledim 1 tane butona basıldığında koşma animasyonu çalışıyor tamam ama diğer 3 tane buton animasyonları çalıştırmadan sağa ,sola ve geriye sadece normal ilerleme var animasyon aktif olmuyor

  87. ahmet diyor ki:

    Dediğiniz gibi sprinting(); satırını sildiğimde bu defa bir tane button yürüme animasyonunu çalıştırıyor karekter böyle ilerliyor ve koşma yok bu defa diğer 3 tane button sağa sola ve geriye doğru animasyon olmadan hareket özelliği sağlıyor

  88. ahmet diyor ki:

    #pragma strict

    internal var animator:Animator;
    var v:float;
    var h:float;
    var sprint :float;

    function Start () {

    animator=GetComponent(Animator);

    }
    function Update () {

    //v=Input.GetAxis(“Vertical”);
    //h=Input.GetAxis(“Horizontal”);
    //Sprinting();
    }
    function FixedUpdate()
    {
    //animator.SetFloat(“walk”,v);
    //animator.SetFloat(“Turn”,h);
    //animator.SetFloat(“Sprint”,sprint);

    }
    function Sprinting()
    {
    if(Input.GetButton(“Fire1”))
    {

    sprint=0.2;
    }
    else{
    sprint=0.0;
    }

    }
    function MoveUp() { v = 1.0; animator.SetFloat(“walk”,v);}
    function MoveDown() { v = -1.0; animator.SetFloat(“walk”,v);}
    function MoveLeft() { h = -1.0;animator.SetFloat(“Turn”,h); }
    function MoveRight() { h = 1.0; animator.SetFloat(“Turn”,h);}

    Kodda şöyle birşey denediğimde up butonuna tıklandığında dönme animasyonu çalışıyor hep.Ama Up butonu basılı tutulduğunda ise ileri doğru yürüme işlemi gerçekleşiyor.Bıraktığında tekrar dönme işlemine geçiyor down butonuna tıklandığında animasyonlar duruyor.Sorun ne Bakma imkanınız varmı.Teşekürler.

    • yasirkula diyor ki:

      Butonlardan eli çekince h ve v’nin sıfırlanması lazım. O yüzden de Update ve FixedUpdate’in comment’li olmaması lazım. Bu durumda da karakterin animasyonu oynamıyor diyorsunuz, bunun sebebini ben de hâlâ çözemedim.

  89. Mehmet Çınar diyor ki:

    S.a yasirbey size bir sorum olacaktı.
    C# olarak elimde yazılmış bir virtualjoystick scripti var.
    Benim yapmak istediğim şey bu joystickden gelen verilere göre
    Player scriptinden karaktere hareket vermek. ama nasıl yapacagımı çözemedim.

  90. Emre diyor ki:

    Merhaba Public Scprit kod ;
    diye bir tanımlama yapıyorum fakat Scprit i oyun kütüphanesinde bulamıyor
    yeni güncelleme felanmı geldi rigidbody.Addforce gibi bazı şeyler değişmiş

    • djemrelak diyor ki:

      using UnityEngine;
      using System.Collections;
      kütüphane olduğunu düşündüğüm bu ikisini kullanıyorum ayrıca c# kullanıyorum

      • djemrelak diyor ki:

        AYRICA 2.Sorum
        Eğerki sadece parmağın oynattığımız ölçüde ilerlemesini isteseydik;
        Update’in içine sadece bunu yazsak olmazmıydı yani neden for döngüsünü kullandık optimizasyon içinmiydi yoksa bilmediğim bir sebepmi var ben sadece oynatmak için bunu kullansam bir problem olurmu vaktiniz varsa kısa bir açıklama yapabilirmisiniz şimdiden teşekkürler.Ayrıca oyun yapımcıları optimizasyon konusunda sıkıntı çekiyor bazı kişiler unity scprit arşivinizi görmüyor ordaki yöntemleride ayrıbir konu olarak açarsanız takipçileriniz için yararlı olacaktır 🙂

        if( parmak.phase == TouchPhase.Moved )
        {
        transform.localScale += new Vector3( parmak.deltaPosition.x, parmak.deltaPosition.y, 0 ) / 100;
        }

      • yasirkula diyor ki:

        Ekranda birden çok parmak olunca her bir parmağın üzerinden ayrı ayrı geçmek için for loop’u kullanıyoruz. Dilerseniz sadece ekrandaki ilk parmağın (Input.GetTouch(0)) üzerinden de geçebilirsiniz; ancak if(Input.touchCount>0) koşulunun true döndürdüğünden emin olun.

    • yasirkula diyor ki:

      “public DegiskenTuru degiskenIsmi;” şeklinde değişken tanımlanıyor. Eğer DegiskenTuru Javascript ise bu hatayı alabiliyor olabilirsiniz. Sorunu çözmek için DegiskenTuru scriptini Plugins klasörüne taşımayı deneyebilirsiniz.

      Unity’nin son sürümlerinde artık Transform hariç diğer component’lere şu şekilde erişiliyor:

      GetComponent<Rigidbody>()
  91. Mehmet Samsunlu diyor ki:

    Üstadım, merhaba. Ben karakteri dokunmatik ekranda dokununca karakteri 2 cm kadar zıplatıyorum. Fakat karakter bazen 4-5 cm. zıplıyor. Benim istediğim karakter her zaman aynı ölçüde zıplasın. Nasıl bir kod yazmam gerek. Ayrıca karakteri havada 2 kere zıplatmak istiyorum. Lütfen yardımlarınızı bekliyorum. Saygılar.

    • yasirkula diyor ki:

      Eğer Rigidbody kullanıyorsanız ekrana dokununca velocity.y’yi değiştirmeniz yeterli; AddForce kullanırsanız karakterin y eksenindeki mevcut hızına göre zıplamanın şiddeti değişebilir. Rigidbody kullanmıyorsanız kodunuzda Time.deltaTime kullanmanız lazım.

  92. Kadir Turan diyor ki:

    Hocam ağızınıza sağlık çok güzel anlatmışsınız. Fakat bi sorum olacaktı benim. Ben Scriptleri mi C# dilinde yazıyorum ve çok daha yeniyim.
    ” transform.position = Camera.main.ScreenToWorldPoint(Vector3(parmak.position.x, parmak.position.y, 10)); ”
    bu yazımda hata veriyo bende. bu kısmın c# için yazılışı tam olarak nasıldır acaba gösterirseniz sevinirim. şimdiden çok sağolun.

  93. Onur diyor ki:

    Gerçekten yazı için çok teşekkürler benimde bir sorum var hocam. Ben şimdi ekranda dokunduğumuz yerin x ve y sinin kaç olduğunu text olarak öğrenmek istiyorum bunu nasıl yapabilirim yardımcı olabilir misniz?

    • Onur diyor ki:

      Aslında bana şöyle bi kod lazım:

      Eğer parmak.Position.x telefonun width’inin yarısından küçükse sola git eğer telefonun width’inin yarısından fazlaysa sağa git.

      Her telefonun çözünürlüğü aynı olmadığı için oraya 1920’nin yarısı diye giremiyorum. Bana oyunun çalıştırıldığı telefonun width’ini öğrenmemi sağlayacak bi kod lazım yardımcı olursanız sevinirim. Yukarıdaki soruyu boşverebilirsiniz.

  94. assassinfurkan diyor ki:

    Ben karekteri hareket ettirirken charactercontroller kullaniyorum acaba bu kodu nasil android uyarliyabilirim

    Vector3 yon = new Vector3(Input.GetAxis(“horizontal”),0,Input.GetAxis(“Vertical”));

  95. Mucahit diyor ki:

    Selamun aleykum sorum olucakti benim oyunumda karakterimi A ve D tuslari ile saga ve sola belli bi oranda haraket ettirip space tusu ile ziplama S tusu ile egilme yaptiriyodum bunlari androide uyarlamam icin bu komutlari silmem mi gerekir silmem gerekirse ne yazabilirim simdiden tesekkurler

    • yasirkula diyor ki:

      Önce oyunun dokunmatik ekranda nasıl oynanması gerektiğine karar vermeniz lazım. Ekranda parmak mı sürüklenecek? Sensör mü kullanılacak? Ekrandaki butonlara mı tıklanacak? gibi..

      • Mucahit diyor ki:

        Parmakla hareket etmesini istiyorum parmagi ekranda sola cekip biraktiginda 3 birim sola gitmesi mesela

      • yasirkula diyor ki:

        O zaman sağa ve sola gitme kodunu bir fonksiyona taşıyın. Öyle ki biz bu fonksiyonu çağırdığımızda karakter sağa gitsin veya sola gitsin. Ne yöne gideceğini veya ne kadar gideceğini bir parametre ile belirleyebilirsiniz. Ardından dokunmatik ekran için parmağın sola kaymasını algılayan bir kod yazın ve bu kodun içerisinde sağ-sol hareket fonksiyonunu çağırın.

  96. Mucahit diyor ki:

    Nasil bir kod olabilir bir tanesi icin bi ornek verebilir misin

  97. Mucahit diyor ki:

    Mesela ben saga gitmesi icin
    Public float donushiz;

    Void Update (){

    If (input.getkey(keycode.d))
    {
    Getcomponent ().addforce (vector3.right*donushiz)
    }
    }
    Bu kodu silmem gerekir mi androide uyarlayip parmakla hareket ettirmek icin

    • yasirkula diyor ki:

      Şunun gibi:

      void Update() {
      if( Input.GetKey( KeyCode.D ) ) {
      YanaGit( donusHiz );
      }
      else if( Input.GetKey( KeyCode.A ) ) {
      YanaGit( -donusHiz );
      }
      }

      public void YanaGit( float miktar ) {
      GetComponent().AddForce( Vector3.right * miktar );
      }

      Artık YanaGit fonksiyonunu PC’den de çağırabilirsiniz mobilden de.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s