GÜNCELLEME – 17.06.2016: Bu yazıda bahsi geçen joystick scripti, performans düşmanı olan OnGUI sistemini kullanıyordu. Neyse ki artık bu script tarihin tozlu sayfalarına karışıyor; uGUI kullanan yeni versiyon için tıklayın: https://yasirkula.com/2016/06/17/unity-ui-dokunmatik-ekran-joystick-kullanimi-multi-touch-destekli/

Hepinize merhaba,

Bu yazıda sizlerle Unity 3D için hazırladığım joystick scriptini paylaşacağım. Mobil cihazlarda sanal Joystick kullanımı hakkında çok soru geldi bana ve bu yüzden bu konuda bir şeyler yapmak istedim. Bir müddet uğraşarak kendim bir script yazdım. Scriptin hem Android hem de iOS, Blackberry ve Windows Phone 8 cihazlarda çalışması lazım. Ben sadece Android’de ve Windows Phone 8’de test edebildim. Ama dikkat edin, bu script mobil cihazlar harici cihazlarda çalışmaz (yeni güncellemeyle birlikte Unity Editör’ünde de çalışıyor)!

NOT: Bu script birden çok joysticki desteklemektedir ve tüm joystickleri farklı parmaklarla, eş zamanlı olarak oynatabilirsiniz. Scripti ne kadar çok objeye component olarak atarsanız o kadar çok joystickiniz olur.

Dersi daha iyi anlamanız için bir örnek proje yaptım. İndirmek için tıklayın (hemen aşağıda projeden çekilmiş bir resim görebilirsiniz): https://www.dropbox.com/s/m0wn27ikl7qudd4/JoystickOrnek%20v2.rar?dl=0

resim

Kullanım

Şu linkteki unitypackage‘ı indirin: https://www.dropbox.com/s/l5mf5a24bwtx3av/Joystick.unitypackage?dl=0

Ardından kendi projenizi açın ve Assets-Import Package-Custom Package… yolunu izleyin. İndirdiğiniz unitypackage dosyasını seçin ve dosyaları projenize import edin.

Şimdi joysticki hangi obje(ler) için kullanmak istediğinize karar verin. Diyelim ki FPS oyun yapıyorsunuz ve joysticki karakteri hareket ettirmek için kullanacaksınız. Bu durumda Joystick.js scriptini Joystick klasöründen tutup sürükleyerek karakter objesine verin. Sonra karakteri seçin ve Inspector‘dan değişkenleri istediğiniz gibi değiştirin. Eğer dilerseniz scriptle gelen Joystick Texture‘yi Inspector’dan kendi texture’nizle değiştirebilirsiniz.

Şimdi karakterin hareket scriptinde karakteri ne zaman hareket ettirmek isterseniz bir Vector2 değişkenine GetComponent(Joystick).sonuc değişkenini kaydedin. Karakteri sağa sola hareket ettirirken bu değişkenin x değerini, ileri geri hareket ettirirken de y değerini kullanın.

Değişkenleri Tanıyalım

resim3

Joystick Texture: Bu değişkene ekranda kullanmak istediğiniz joystick’inizin resmini (texture) değer olarak veriyorsunuz. Varsayılan olarak script basit bir joystick texture’siyle beraber geliyor.

Joystick ID: Bu değişkeni sahnede birden çok Dinamik Konumlandır’ılan joystick varsa kullanın. Sahnedeki tüm dinamik joystick’lerin Joystick ID’lerinin farklı olduğundan emin olun! (Daha detaylı bilgi için Birden Çok Dinamik Joystick Olması Durumunda başlığına bakınız.)

Joystick Ebat: Burada joystick’in ekranda ne kadar yer kaplayacağını ve hareket edebileceği alanın ne kadar büyük olacağını belirliyorsunuz. Çeşitli ayarlar mevcut, neyin ne olduğunu Inspector panelindeki yeşil bilgilendirici yazıdan anlayabilirsiniz.

Hareket Ekseni: Joystiği sadece yatay eksende (Sadece X), sadece dikey eksende (Sadece Y) ya da her iki eksende de (Xve Y) oynatmayı seçebildiğiniz bir değişken. Mesela değerini Sadece X olarak verirseniz joysticki yukarı aşağı oynatamazsınız, sadece sağa sola oynatabilirsiniz.

Dinamik Konumlandır: Bu önemli bir değişken. Eğer bu seçeneği açarsanız joystick ancak ekranda bir yere tıklayınca belirir ve joystiğin merkezi ekranda tıkladığınız yer olarak ayarlanır.

Joystick Konumlandırma: Dinamik konumlandırılmayan bir joystickin ekranda nerede gösterileceğini belirlemeye yarar. Burada da çeşitli ayarlar var. Mevcut ayarın nasıl birşey olduğunu anlamak için yeşil bilgilendirici yazıyı okumanız yeterli.

sonuc: Bu public değişkenin başına @HideInInspector koydum, bu yüzden kendisini Inspector‘dan değiştiremezsiniz. Kendisini ancak Joystick.js scriptini açarsanız görebilirsiniz. Bu değişken joystickin döndürdüğü değeri depolar. Eğer joystiği tamamen yukarı kaldırırsanız değeri (0,1) olur, tamamen aşağı indirirseniz (0,-1) olur, tamamen sola kırarsanız (-1,0) olur ve tamamen sağa kırarsanız (1,0) olur. Diğer durumlarda bu Vector2‘nin x ve y değerleri -1 ile 1 arasında değişir. Anlayacağınız üzere x değeri joysticki yatay eksende oynatınca değişir ve sola kırınca negatif, sağa kırınca pozitif değer alır. y değeri de sadece joysticki dikey eksende oynatırken değişir ve yukarı oynatınca pozitif, aşağı oynatınca negatif değer alır.

Birden Çok Dinamik Joystick Olması Durumunda

Diyelim ki sahnenizde birden çok dinamik konumlandırılan joystick var. Bu durumda hangi joystickin ekranın neresine tıklayınca çıkacağını belirlemeniz gerekir ki iki dinamik joystick aynı yerde üst üste binmesin. Bunu yapmak için ise maalesef scriptte oynama yapmanız gerekecek.

Joystick.js scriptinde JoystickOlusturulsunMu(pozisyon:Vector2) isimli bir fonksiyon bulunmakta. Bu fonksiyon sadece dinamik oluşturulan joysticklerde çalışır ve eğer true döndürürse pozisyon konumunda joystick çizilir. Burada devreye bir de Joystick ID giriyor. Her dinamik joystick’in ID’sinin farklı olduğundan emin olmalısınız. Varsayılan olarak bu fonksiyonun içi şöyle doldurulmuştur:

function JoystickOlusturulsunMu( pozisyon : Vector2 )
{
	if( id == 0 )
	{
		if( pozisyon.x < Screen.width / 2 )
			return true;

		return false;
	}
	else if( id == 1 )
	{
		if( pozisyon.x > Screen.width / 2 )
			return true;

		return false;
	}

	return false;
}

Eğer bir dinamik joystickin Joystick ID’si 0 ise o joystick sadece ekranın sol yarısına tıklayınca (pozisyon.x < Screen.width / 2) oluşturulur. Benzer şekilde, Joystick ID’si 1 olan bir dinamik joystick de sadece ekranın sağ yarısına tıklayınca (pozisyon.x > Screen.width / 2) oluşturulur. Bu kodları dilediğinizce düzenleyebilirsiniz. Örneğin ekranda üç tane dinamik joystick varsa koda bir tane daha id koşulu ekleyin. Ya da diyelim ki ekranda sadece bir tane dinamik joystickiniz var (id’si 0 olan) ve bu joystickin ekranın neresine tıklarsanız tıklayın çıkmasını istiyorsunuz. O zaman fonksiyonu şöyle değiştirebilirsiniz:

function JoystickOlusturulsunMu( pozisyon : Vector2 )
{
	if( id == 0 )
	{
		return true;
	}

	return false;
}

Burada anlattıklarımı daha iyi anlamanız ve scripti daha iyi tanımanız için örnek projeyi kontrol etmenizi tavsiye ederim. Tekrar görüşmek dileğiyle!

 

Yorumlar
  1. yusufaydinnn diyor ki:

    10 üzerinden 10

  2. Hamdi Can diyor ki:

    teşekkürler ihtiyaçtı.

  3. sdfsdfsdfsdf diyor ki:

    küp çok hızlı gidiyor nasıl azaltabilirim

  4. jon diyor ki:

    Konu çok işime yaradi çok tesekkurler.
    Ama bir kac sorum olucak 🙂 kamerayi döndürmek icin sola kaydirinca saga dönuyor.bunu tam tersine nasil calistirabilirim?
    Ayrica küpu hareket ettirmeyi bıraktigimda direk durmasını istiyorum (yani joysticki birakinca suruklenip harekete Devam etmesini istemiyirum ) bunu nasil yapicam ?

    • yasirkula diyor ki:

      KameraHareket scriptindeki şu satırda yer alan – işaretini silin:

      transform.Rotate( 0, -kamerayiDondur.x * 120 * Time.deltaTime, 0 );

      KupHareket’in FixedUpdate’inin en altına şunu yazarsanız küp anında durur:

      if( gucUygula == Vector2.zero )
      rigidbody.velocity = Vector3.zero;

  5. Devran diyor ki:

    Sağda bulunan joystic’in kamera işlevi yerine,sağdaki joystic oynatıldığında küpün Y ekseninde yukarı ve aşağı kalkmasını sağlayabilir miyim ?

  6. umomanahmet diyor ki:

    Birde küpün takla atarak gitmesini engellemek için nereye ne yazmamız gerekiyor ? Dümdüz ilerlemesinin istiyorum.

  7. Emre diyor ki:

    Abi herhangi bir guitextin telefona göre boyutlanması için hangi kodu kullanmalıyım? Ve nasıl kullanmalıyım örnek verir misin

  8. probremliadam diyor ki:

    abi elinize sağlık çok güzel olmuş ders,ben oyunumun ekranına yön tuşları eklemek istiyorum sağ ve sol tuş android için sadece sağa ve sola hareket ettirecek nesneyi tuşlara tıklayınca nasıl yapabilirim acaba bilgisi olan varmı,yardımcı olursanız çok sevinirim..

  9. alpzerey diyor ki:

    Ufak bir sorun olacak bu joystick’in yanında buton çalışmıyor yani hem joystickle kontrol yapıp hem butona basılmıyor buna bi çözümünüz mevcutmu şimdiden teşekkürler

    • yasirkula diyor ki:

      Ekranda birden çok parmak olunca OnMouseDown() ya da GUI.Button çalışmaz. Test etmek için guiTexture.HitTest ya da Rect.Contains kullanmalısınız. İnternette bu iki komutla ilgili örnekler vardır muhakkak.

  10. emekkir diyor ki:

    Hocam 2D olan versiyonunu yapabilir misiniz? Yani joysticki yukarı kaldırdığımda havaya çıkmasını istiyorum.Ya da mesela sağa çekince ne olacağı sola çekince ne olacağı bölümünü söylerseniz ben editlerim kendime göre, Teşekkür ederim 🙂

    • yasirkula diyor ki:

      Şunun gibi birşey olacak:

      function FixedUpdate()
      {
      var joystick = GetComponent( Joystick );
      rigidbody2D.AddForce( new Vector2( joystick.sonuc.x, joystick.sonuc.y ) * 10 );
      }

  11. Uğur diyor ki:

    Ben import edemedim failed import package diyor ??

    • Uğur diyor ki:

      yeni bir proje açtım ona import ettim. ama diğer projeme neden import edemiyorum ? 😦

      • yasirkula diyor ki:

        Ben de bilmiyorum ama projenize giden yol (path) çok uzunsa ya da projeye giden yolda Türkçe karakter varsa belki sorun buradadır (yeni açtığınız projeye giden yolda da Türkçe karakter varsa o zaman sorun burada değildir).

  12. Muhammed diyor ki:

    çok önemli bi sorum olacak bende JoystickEditor’ de durum böyle

    http://hizliresim.com/7m9ELP

    Joystick.js’ ye dışarıdan erişemiyorum ne yapmalıyım

  13. recep diyor ki:

    merhaba kolay gelsin unity de bir objeye nasıl su efekti verebilirim örneğin bi su topu gibi düşünebiliriz kusura bakmayın pek buranın konusu değil ama nereye yazacağımı bilemedim şimdiden teşekkürler…

    • yasirkula diyor ki:

      Benim bilgim yok ama bilgisi olan birisi varsa bu yorumu cevaplarsa memnun oluruz.

      • recep diyor ki:

        aslında ben blender da istediğime yakın bi şeyler yapabiliyorum fakat bunu export ettiğimde unity de obje görünüyor fakat eklediğim materyal gelmiyor bunun sebebi nedir acaba anlayamadım yardım edebilirmisiniz

      • yasirkula diyor ki:

        İleride Blender kullanınca sorunun kaynağını bilirim belki ama şu anda Google’a başvurmalısınız. “blender to unity no textures” (tırnaksız) şeklinde arama yapabilirsiniz.

  14. bahadir demir diyor ki:

    Bu scripti top şeklindekı bi cisme uygulayamıorum benım karekterim yuvarlak buna nası bı joystick yazıcam bı turlu çözemedim

    • yasirkula diyor ki:

      Topa Is Kinematic’i kapalı Rigidbody eklediğinizden emin olun. Ardından şu kodu “rigidbody.AddForceAtPosition( kameraParentObjesi.forward * gucUygula.y * gucMiktari, gucUygulamaNoktasi );” şöyle değiştirin:

      rigidbody.AddForce( kameraParentObjesi.forward * gucUygula.y * gucMiktari );

      Belki böyle çalışır.

  15. Yusuf Pamukçu diyor ki:

    örnek projenizi açınca hata aldım
    karakteri ne zaman hareket ettirmek isterseniz bir Vector2 değişkenine GetComponent(Joystick).deger değişkenini kaydedin.
    kısmını yapamadım hocam nasıl yapabilirim?

  16. recep diyor ki:

    hocam öncelikle kolay gelsin benim sorum oyunda checkpoint nasıl yapabilirim mesela bir top olacak uçurumdan düştüğünde en yakın checkpoint ten başlamasını istiyorum nasıl yapabilirim şimdiden teşekkürler (Bu arada sorularımı alakasız yerlerde soruyorum kusura bakmayın)

    • yasirkula diyor ki:

      var sonWaypoint : Transform; adında bir değişken olur. Sahnedeki waypoint’ler birer Empty GameObject olurlar ve Is Trigger’ı işaretli Box Collider’a sahip olurlar. Top, bu waypoint’lerden biriyle temas edince “sonWaypoint = temas.transform;” gibi bir kod çalıştırılır. Top aşağı düştüğünde ise “transform.position = sonWaypoint.position;” yapılır.

  17. recep diyor ki:

    hocam ben kod yazmayı fazla bilmiyorum o yüzden şöyle bir tutorial buldum—http://www.youtube.com/watch?v=QqC_96Toeiw&list=UUreFsWtLc_WmfY3C-R_PIwQ— bu da işime çok yarıyor aynı yapıyorum fakat benim topum respawn ın içinden geçiyor fakat bi şey olmuyo bunun çözümünü verebilirseniz çok işime yarayacak (He bide sizin joystickornek projenizdeki kodları kullanabilirmiyim dediğim gibi kod işini pek bilmiyorum)

    • yasirkula diyor ki:

      Benim kodlarımı kullanabilirsiniz.

      Verdiğiniz videoyu tam incelemedim ama kod, Player’ın tag’ının “Player” olmasını gerektiriyor. Tag’ı kontrol edin. En olmadı başka bir checkpoint videosu izleyin.

  18. recep diyor ki:

    hocam Allah razı olsun hem izniniz hemde yardımınız için eğer oyunu yapabilirsem yapımcılar bölümüne sizinde adınızı yazacağıma emin olabilirsiniz

  19. Matthieu diyor ki:

    hocam bu hareket scriptini c#’a çevirmeye çalışıyorum ama private Joystick joystick; kodunu kabul etmiyor The type or namespace name `Joystick’ could not be found. Are you missing a using directive or an assembly reference? hatasını veriyor. diğerlerinde sıkıntı yok acaba Joystick sınıfı c#’ta çalışmadığı içinmi oluyor.

    • yasirkula diyor ki:

      C#’tan Javascript’e ya da Javascript’ten C#’a erişmeye çalışırken malesef böyle bir sorun oluşabiliyor. Joystick scriptini de C#’a çevirerek sorunu kesin olarak çözebilirsiniz ya da Project panelinde “Plugins” adında bir klasör oluşturup Joystick scriptini buraya taşımayı deneyebilirsiniz (çalışır mı bilmem).

  20. emir diyor ki:

    bu kutuyu zıplatma butonu nasıl eklenir?

  21. muhammed diyor ki:

    hocam ben button denedim olmayinca burayi buldum cok iyiymis herseyi ayarladim Joystick falan
    ama bu kod küpe göre ayarli bunu nasil 2d characterime oturtucam ;

    scriptleri karakterime attim =)
    tsk

    • yasirkula diyor ki:

      Ben de bilmiyorum. Joystick yazmakla karakter hareket scripti yazmak birbirinden tamamen bağımsız şeyler. Ben sadece joystick kısmını hallettim, bunu hareket scriptinde kullanmak sizin bileceğiniz iş.

  22. muhammed diyor ki:

    neyse tesekkürler bu touch olmucak galiba …. iki tane gui button yaptim:
    using UnityEngine;
    using System.Collections;

    public class ExampleClass : MonoBehaviour {
    public Texture btnTexture;
    void OnGUI() {
    if (!btnTexture) {
    Debug.LogError(“Please assign a texture on the inspector”);
    return;
    }
    if (GUI.Button(new Rect(20, 300, 100, 100), btnTexture))
    Debug.Log(“Clicked the button with an image”);

    if (GUI.Button(new Rect(475, 300, 100, 100), btnTexture))
    Debug.Log(“Clicked the button with an image”);

    }
    }

    acaba bunlara sag sol yürüme koyabilirmiyiz ?
    =(

    • yasirkula diyor ki:

      SolaYuru(); veya SagaYuru(); gibi hazır fonksiyon olsaydı söylerdim ama yok. Yürüme basit birşey değil ama basitmişçesine sürekli bunu soruyorsunuz. Karakter hareket ederken aynı anda bir de animasyon oynuyor.

      Karakterin kullandığı component’lere göre farklı farklı yürüme kodları yazılabilir. Bu konuda yardımcı olmayacağım, İngilizce tutorial araştırmanızı öneririm.

  23. Alpertunga Yüce diyor ki:

    Hocam teşekkürler fakat oyunu teste başladığımda aniden duruyor ve 4 tane hata veriyor yardımcı olursanız sevinirim.. http://i.hizliresim.com/X2rEk6.jpg

    • yasirkula diyor ki:

      Sahnede bir kamera olduğundan, kameranın tag’ının MainCamera olduğundan, KupHareket ve KameraHareket scriptlerinin atandığı objelerde Joystick scriptinin de olduğundan emin olun.

      • ATunga diyor ki:

        Tamam hocam saolasın direk prefab olarak kullandım sorun çıkmadı bu sefer…

  24. TaRmAnYa diyor ki:

    Merhaba Yasir hocam. Çok harika bir konu teşekkürler. Ünityde usta olduğunuzu hemen belli ediyorsunuz. Yalnız bir sorum olacak. Ben fps karakterini hareket ettiremiyorum. Bana bir kod ile yardımcı olsan? Karakterin normal hareket etmesini istiyorum. Takla atmadan. Birde bu kamerayı halletim ama yamuk yumuk hareket ediyor. Sağa yapıyorum sola, yukarı yapıyorum aşağı gidiyor. Lütfen biraz yardım. Canım çıktı.

  25. TaRmAnYa diyor ki:

    Kamera artık çevirilen yöne dönüyor. Ama Joystick i bir yuvarlak çizermiş gibi döndürünce adam yere yatmış yerden bakıyor gibi görünüyor. Çok garip Hareket ekseni x ve y, sadece x olunca düzeliyor. Ama her tarafa dönmüyor yde de öyle Birde kameranın tam dönmesini istemiyorum. 180 Derece dönsün adam arkasını dönemesin aynı şey y ekseni içinde geçerli. Çok oldu ama adam dönünce silah da dönsün adam arkasını dönünce kontroller değişiyor. Baya hata var.

  26. Halilcan Sap diyor ki:

    Merhaba arkadaşım bu joystick i nasıl entegre edebilirim acaba kendi oyunuma?Yeniyim özür dilerim basit bir soru ama yapamadım bir türlü.İyi çalışmalar.

    • yasirkula diyor ki:

      Oyundan oyuna değişir. Joystick’i yazmak ile onu entegre etmek iki ayrı şey, entegre aşamasında kendi başınızasınız.

      • Halilcan Sap diyor ki:

        Misal bir TPS düşünüyorum diyelim tek amacım bu joystick i karakterime yön vermekte kullanmak?

      • yasirkula diyor ki:

        Hareket koduna göre değişir. Bu konuyu dediğim gibi kendiniz halletmelisiniz. Yapmanız gereken karaktere Joystick vermek ve hareket scriptinde Joystick’in “sonuc” değişkeninden faydalanmak. Başarılar!

  27. Halim diyor ki:

    Bende bu uygulamayı yaptığımda telefonu yan çevirdiğimde ileri geri tuşu görünmüyor. Örnek kod yatay ekran açıldığında benim uygulama dikey açılıyor. Nasıl düzeltebilirim?

  28. Özcan diyor ki:

    Hocam örnek olarak verdiğiniz senaryoyu template olarak kullanabilirmiyiz acaba ?

    • yasirkula diyor ki:

      Örnek projedeki kodlardan istediğiniz gibi faydalanabilirsiniz.

      • Özcan diyor ki:

        Çok çok teşekkür ederim hocam, yalnız, üstteki arkadaşta sormuş, bu kübü bir küreye çevirdim, fakat kamera delirdi 😀 Takip ediyor fakat kamerada dönüyor 😀

        Yani bu kamera olayının bir çözümü var mı hocam.

  29. Özcan diyor ki:

    Hocam bir önceki kamera sorununu hallettim, fakat şimdi de ayrı bir sorum var

    Zıplama kontrolünü yapabilrmiyiz acaba ? zıplama butonu gibi ?

  30. Özcan diyor ki:

    Hocam şöyle, sağa sola ileri geri gidiyor kürem, fakat ben bu küreyi zıplatmak istiyorum.(Buton ile)
    Uzun süredir araştırdım fakat yapamadım, yardım ederseniz çok sevinirim hocam.

  31. çaylak diyor ki:

    herşeyi tam yaptım şu hata geliyo (nullreferanceexp:object reference…kamerahareket.update()(at assets/joystick/kamerahareket.js:22) hatasını veriyoo tıkladımda kamera hareket dosyasında :: kamerayiDondur = joystick.sonuc; satırına yöneltiyoo sorun nedir ??

  32. çaylak diyor ki:

    http://i.hizliresim.com/Z1Z8vo.png hatalar bunlar örnek projeyle benim projem arasında gidip gelmekten kör oldum 😀 şimdiden tekkürlerr tümm derslerinizii hatimm ettim hocam sizin yaptığınızı bu ülkede az sayıda kişi yapıyoo karşılığını mutlaka alırsınız .

    • yasirkula diyor ki:

      Hata veren scriptin ilk 20-30 satırının resmini çekin ya da pastebin.com’a kopyalayıp buraya linkini atın. O zaman hatanın kaynağını daha rahat bulabilirim.

  33. çaylak diyor ki:

    sonunda çözdümm hatada ne biliyomusun objeye atadığımm cameranınn tag main camera seçili değilmişş :DD

  34. Alper diyor ki:

    Hocam tps oyununa nasıl uyarlayacağız sitenizdeki zombi oyunu 319 sayfalık;

    Yardımcı olursanız sevinirm…

  35. Emre diyor ki:

    Abi konu dışı bişey sorucam. Herhangi bir nesneye veya yazıya tıkladığımda arkada çalan ses’i nasıl durdurabilirim? Teşekkürler

    • yasirkula diyor ki:

      Bir GUI Texture’a veya nesneye tıklayınca onun OnMouseDown fonksiyonu çalışır. Bir sesi durdurmak için ise o ses objesine ulaşıp audio.Pause() veya audio.Stop() fonksiyonlarını kullanabilirsiniz.

  36. seredar diyor ki:

    Hocam ben sizin siteyi takip ederek bir android oyun yaptım ama google play e oyun koymak paralıymış ben oyunumu size versem google play e kendi hesabınızdan koyar mısınız?

  37. metin diyor ki:

    teşşekkürler çok yardımcı oldunuz ama ben playerimi hareket ettiremiyorum o değerleri nereye girecem

  38. Ali diyor ki:

    Hocam androide build ettim bu indirdiğim projeyi ama ekranı yatırınca hareket butonu yok oluyor sadece kamera butonu kalıyor. nasıl düzeltebilirim

    • yasirkula diyor ki:

      Joysticki dinamik boyutlu ekranlar için hazırlamadım (yani telefonu yan yatırınca oyun ekranının dönmesi durumunu kapalı baz alarak). Düzeltmek için Start fonksiyonundaki bazı kodları Update’e taşımanız gerekebilir. Hangileri? Emin değilim.

  39. emin diyor ki:

    merhaba benim bir sorum olacak benim yukardaki linkteki gibi objelerin var.yatay siyah renkli dikdötgende collider mevcut yuvarlak nesnede de mevcut.ben o dikdörtgen platformun üstüne rasgele kare objeler eklemek istiyorum bu nesnelerden aşağıya karakter inebilsin istiyorum fakat dikdörtgen nesne buna engel oluyor buna asıl bir çözüm üretebilriim acaba unityde objeler arası kesişen bölgeleri kesmek çıkartmak mümkünmüdür yardımcı olursanız çok memnun olurum iyi çalışmalar

    • yasirkula diyor ki:

      Collider’larda elle delik açmak mümkün değil. Eğer aralarında boşluk olan, yanyana iki dikdörtgen collider istiyorsanız iki farklı Box Collider kullanmalısınız. Boşluk olayını tek Box Collider ile yapamazsınız.

  40. emin diyor ki:

    bu dikdörtgenden yüzlerce var aralarına boşluk oluşturmam gerekiyor bunların eğer 2 dikdörtgen kullansam işin içinden çıkamam gibi geliyor collideri parçalamak mümkün değil yani öylemi ?

  41. emin diyor ki:

    peki bu colliderlerin arasındaki boşluğu 2 cm desek bu 2cm yi her oluştrulan kopyada farklı koordinatlarda oluştursak (sadece x ekseninde) böyle bir durum söz konusu olur mu ?

    • yasirkula diyor ki:

      Collider’ı atadığınız obje hareket edince collider’da onunla hareket eder. Yani objeyi x koordinatında hareket ettirerek collider’ın da x koordinatını ellersiniz. Onun dışında collider’ın Position ve Size değerleriyle oynayarak da konumunu değiştirebilirsiniz.

  42. Murat Mert diyor ki:

    spyhere ye kontrol nasıl ekicem bu joy sticki ekledikten sonra

    • Murat Mert diyor ki:

      hazır projedeki scripti kup harakket scriptini denedim ama hata verdi 😦

      • yasirkula diyor ki:

        rigidbody.AddForce olabilir, transform.Translate olabilir, rigidbody.velocity olabilir… Seçenek çok. Unity 5 ile gelen örnek projede küreli bir scene var onu da inceleyebilirsiniz. Ama illa ki “kendi kodunuzu” yazmanız gerekecek…

  43. Selçuk diyor ki:

    Merhaba,öncelikle paylaştığınız bilgiler gerçekten çok faydalı.Benim bir sorum olacak:Bir karakterim var sağa doğru sürekli koşuyor 2 boyutlu ekrana basıldığında sadece zıplamasını istiyorum.Bunu sağlamak için ne yapmam gerek?

  44. yunusemre diyor ki:

    Abi ballance oyununda joysticki nasil kullanirim denedim calismadi

  45. yunusemre diyor ki:

    Deniyorum boş olarak haraket ediyo

  46. ahmetoner diyor ki:

    ben android bir oyun yapıyorum.menü tasarımıyla ilgili bir yazı hazırlayabilirmisiniz..oyunu durdurma,devam ettirme.

  47. AlperÜnsal diyor ki:

    Sizi tebrik ederim çok yararlı bilgiler paylaşıyorsunuz…

  48. Çağdaş Yiğit diyor ki:

    Selamlar, C# versiyonunu yazdım ve paylaşmak istiyorum. Linkler: cagdasyigit.com/software/unity/joystick/JoystickCS.cs ve cagdasyigit.com/software/unity/joystick/JoystickEditorCS.cs

  49. Dortmund diyor ki:

    Yardımcı olabilirseniz çok memnun olurum hocam.
    http://i.hizliresim.com/mPV241.png
    Sizin hareket kodlarınızın alınmış hali.Ne zaman bir rigidbody.AddForce komutu kullanmaya çalışsam genel olarak bu şekilde hata alıyorum.

    Şimdiden teşekkür ederim.

    • yasirkula diyor ki:

      rigidbody yazan her yeri GetComponent(Rigidbody) ile değiştirebilirsiniz.

      • Dortmund diyor ki:

        Öncelikle cevabınız için teşekkür ederim.GetComponent(Rigidbody) şeklinde yazınca o hataları giderdim.Şuanda sadece iki tane hata kaldı.Noktalı virgüller konulmuş her satırın sonuna ama yinede hata veriyor.Bu arada scriptte hiç bir oynama yapmadım.Direk olarak sizin örnek dosyasınızı açtım.Bir sorum daha var neden direk rigidbody şeklinde algılamıyor?Benden mi kaynaklı?
        http://i.hizliresim.com/YB190A.png

      • yasirkula diyor ki:

        Artık transform hariç diğer component’lere sadece GetComponent ile erişilebiliyor, böyle bir optimizasyon yapmayı uygun görmüşler.

        Hatanın olduğu satırı kopyala yapıştır yaparsanız sorunu bulabilirim.

  50. Dortmund diyor ki:

    Ekran görüntüsü;
    http://i.hizliresim.com/ogLW1k.png

  51. Yardım diyor ki:

    Hocam joystick ile obje kontrolünü saglarken başka bir butona basınca joystick kontrolünde aksama meydana geliyor yani joystick sol kenar ancak ben ekranın sag tarafına dokundugumda joystick o tarafa dogru hareket ediyor bunu düzeltemezmiyiz şimdiden teşekkür ederim.

  52. Help diyor ki:

    Hocam V2 rar dosyası indirilmiyor bir yardımcı olursanız 🙂

  53. ssarp diyor ki:

    Hocam Ben Android Oyunu Yapmak İstiyorum Android İçin Direksiyon Kodu Gaz Ve Fren Kodunu Verirmisiniz

  54. Berkay diyor ki:

    Ben küpü hareket ettiren joystick ile kamerayı hareket ettiren joystick i yer degistirmek istiyorum .Bunu nasıl yapabilirim .(kameranın solda,kupunki sagda)

  55. yusuf diyor ki:

    Selam Yasin,
    Oyunuma joystick ekledim gayet iyi çalışıyo kontroller falan tamam fakat birkaç farklı telefonda denedim ve josyticklerin yeri telefondan telefona değişiyor kiminde yarısı gözüküyo kiminde çok küçük kiminde çok büyük kiminde en aşağı kaymış. Joysticki sabitleyemiyor muyuz? Çok teşekkürler, iyi çalışmalar.

  56. Batuhan Akkaya diyor ki:

    hocam tam görüntü varda şuan kullanıyorum hareket etmiyor obje siz GetComponent(Joystick).deger ekleyin fln demişsiniz ben tam olarak nasıl nere eklenir bilemedim acil yardımcı olurmusunuz bide karakter herzaman öne nasıl baktırırım (gm deki image_angle=dir) gibi..

    • Batuhan Akkaya diyor ki:

      hocam bi iki kodunuzu ekledim oldu hareket ediyor bi sorun daha oluştu benim canavar hareket ederken küp gibi yuvarlanıyor 😀 😀 ridgibady freeze rotation işaretleyince hiç hareket etmiyor ozaman düz bir şekilde gitmesini nasıl sağlarız.

  57. cihan bey diyor ki:

    Burda kamerayı hareket ettirmek için joysticki kaydirdigimda o tarafa dogru surekli donmeye devam ediyor.peki bunun ne kadar suruklersek okadar donmesini ve durmasını nasil saglayabiliriz? Aynı silah oyunlardaki gibi.
    TEŞEKKURLER…

  58. Rafi diyor ki:

    Facebook diğer kutunuza bakabilir misiniz 🙂

  59. faik diyor ki:

    Arkadaşlar küpü takla attırmadan nasıl düz bir şekilde hareket ettirebilirim ??

  60. Burak diyor ki:

    Merhaba ben c# ile objemi hareket ettiriyorum o yüzden GetComponent yapamıyorum yardımcı olurmusunuz ?

  61. burhan diyor ki:

    Hocam ben bu iki joystick’ i teke indirgemek istiyorum yani ileri geri sağ sol yaptığımızda kamerayıda aynı şekilde hareket ettirmek istiyorum. Bi kaç yol denedim bu proje üzerinden fakat pek başarılı olamadım yardımcı olursanız çok sevinirim.

    • yasirkula diyor ki:

      KameraHareket scriptindeki joystick değişkenini public yapıp Start’taki GetComponent’li satırı silerseniz ve Inspector’dan Joystick’e değer olarak küpü hareket ettiren joystick’i verirseniz istediğiniz gibi olur diye ümit ediyorum.

  62. Enes diyor ki:

    Neyaptıysam bi objeyi hareket ettiremedim .
    Hiçbi hata yok joystick hareketlerindede sorun yok.
    Tek sıkıntı ne yaptıysam obje yada karakterler hareket etmiyo. nerde yanlış yapıyorum yardımcı olurmusunuz?

  63. Enes diyor ki:

    KARAKTERE UYGULADIĞIMDA ŞÖYLE BİR SORUN VAR MESELA KARAKTER X KORDİNATINA DÖNÜK DURUYO JOY STİCK İ İLERİ İTİNCE KARŞIYA DEVAM ETMESİ GEREKİRKEN SOLA DÖNÜP Z VEKTÖRÜNDE İLERLİYO. NASIL KARŞIYA GİTMESİNİ SAĞLIYABİLİRİM?

  64. Furkan diyor ki:

    merhaba hocam bayadır aradığım ama bulamadığım bir şey var cevap verirseniz çok sevinirim.
    şimdi androide oyun geliştiriyorum. ok tuşları var. mesela yukarı oka basınca ileri gitmesini istiyorum. ayrıca basılı tuttukça gitmesini istiyorum. nasıl yapabilirim?
    lütfen cevap verin. teşekkürler.

  65. emirhan diyor ki:

    hocam bir sorum olacak bende soyle bi hata var ” the important type “Joystick” is defined multiple times ” lutfen cevaplarsan sevinirim

  66. levent diyor ki:

    hocam bu kodu c# çevirebilirmisiniz?

  67. Barış diyor ki:

    Oyunun içinden Gucmiktarini değiştirebilir miyim? Örn: bir yerle temas ettiğimde Gucmiktari 50 olucak.

    • yasirkula diyor ki:

      gucMiktari değişkeni KupHareket scriptinde, bu script ise Kup objesinde. Bunlara sırayla erişmeniz lazım: GameObject.Find(“Kup”).GetComponent(KupHareket).gucMiktari=50;

      Daha performanslı bir yolu ise KupHareket scriptini “public var kupHareketScript : KupHareket;” şeklinde public bir değişkene Inspector’dan değer olarak verip direkt “kupHareketScript.gucMiktari=50;” yapmak.

  68. Barış diyor ki:

    Topun sürekli kendi kendine ileri gitmesini nasıl sağlayabilirim?

  69. Kursat YILMAZ diyor ki:

    merhaba hocam. şimdi ben androide bi oyun geliştiriyorum ama şu şekil sıkıntım var. oyun hem fps hemde araç kullanabiliyorsun. fps dokunmatik kontrol butonları ve araba sürerken gaz , fren ve sağ-sol butonları hepsini hallettim. yanlız bu butonlar iki canvas içinde. fps canvas – car canvas. ama iki kontrol butonları aynı anda ekranda. ben player ile ilerlerken sadece fps kontrol butonları gözüksün. arabaya binince onlar kaybolsun gaz fren vs gözüksün. inince tekrar fps kontrolleri gözüksün istiyorum. acaba bunu yapmanın bir yolu var mıdır?

    • Kursat YILMAZ diyor ki:

      hocam olayı şu şekil çözdüm fps canvası render modunu playerin kamerasına verdim. car canvası rander modunu araç kamerasına verdim. bu şekilde dediğim gibi oldu ama araç tuşlarında fren tuşu kayboluyor. iki canvasıda açtığımda screen space- overlay yaptığımda fren tuşu geliyor. ama sadece araç kamerasına verince kayboluyor. dünden beri kafayı yedirtti bana

      • yasirkula diyor ki:

        Kullanmadığınız canvas objesini gameObject.SetActive(false) ise kapatıp kullandığınız canvas’ı SetActive(true) yapsanız çözülebilir.

  70. onur diyor ki:

    abi 2d oyunda nasıl kulanıcaz zıplasın sağa sola yürüsün

    • onur diyor ki:

      kod olarak yazarsan sevinirim 😀 ama nereye yapıştıracağımıda söyle abi 😀

    • yasirkula diyor ki:

      Öncelikle Input.GetAxis(“Horizontal”) kodunu kullanarak karakteri PC’de sağa sola yürütün. Ardından mobile geçiş yapmak kolay: Input.GetAxis(“Horizontal”) kodunu GetComponent(Joystick).sonuc.x gibi birşeyle değiştireceksiniz. Zıplamak için ise joystick kullanmak yerine bir UI buton kullanmanızı öneririm. Bu butona tıklayınca karakter zıplasın. Eğer dilerseniz UI dersime göz atabilirsiniz: https://yasirkula.com/2015/01/21/unity-ui-arayuz-sistemi/

      • onur diyor ki:

        eyw abi denerim şimdi

      • onur diyor ki:

        abi ben buttonlarla sağ sol hariketi vermeyi düşündüm ama yürüme animasyonu olmuyo 😦 nasıl yapabilirim

      • yasirkula diyor ki:

        Animator kullanın. İki boolean parametreniz olsun: “Sol” ve “Sag”. Eğer “Sol” parametresi true ise sola hareket animasyonu, “Sag” parametresi true ise sağa hareket animasyonu, iki parametre de false ise idle (olduğu yerde durma) animasyonu oynasın. Animator’daki bir parametrenin değerini GetComponent(Animator).SetBool(“Sol”,true); şeklinde değiştirebilirsiniz.

      • onur diyor ki:

        belki yapamayıp bu yorumu okuyan birisi vardır 😀 bu video işine yarıya bilir

  71. ahmet diyor ki:

    Karakterimi nasıl zıplatırım peki

    • yasirkula diyor ki:

      Rigidbody kullanıyorsanız velocity.y’yi pozitif bir değer yapabilirsiniz. Rigidbody kullanmıyorsanız basit bir zıplama animasyonu oluşturup bu animasyonu Animator penceresinde “Zipla” isimli “Trigger” türünde bir parametreye bağlayabilir ve kodlarınızda GetComponent(Animator).SetTrigger(“Zipla”) şeklinde bu animasyonu tetikleyebilirsiniz.

  72. ahmet diyor ki:

    Hocam merhabalar.Bir sorum olacaktı.Ben unity de sahnedeki herhangi bir objenin 5 saniyede bir ses çalmasını istiyorum.
    Nasıl yapabilirim acaba.Şimdiden Teşekürler

    • yasirkula diyor ki:

      Şunun gibi birşey yapabilirsiniz:

      function Start()
      {
      InvokeRepeating(“SesCal”,5.0,5.0);
      }

      function SesCal()
      {
      GetComponent(AudioSource).Play();
      }

  73. ahmet diyor ki:

    hocam teşekürler ellerinize sağlık

  74. salim diyor ki:

    Ben projemi 2d olarak yapıyorum bu yaptığınız joystick i 2d ye entegre edebilir miyim. Teşşekürler paylaşım için güzel çalışma.

  75. muhammet diyor ki:

    Unity ile hazır gelen Cross Platform joystick prefabının kullanımını da göstebilir misiniz. Bir türlü çalıştıramadım ve bence aynı sorunu çok fazla kişi yaşamıştır. Şimdiden teşekkürler.

  76. faik vural diyor ki:

    Kardeşim şunu nolur c# olarak yaz

  77. sarisinboy diyor ki:

    Hocam unity i nasıl türkçe yaptınız

    • yasirkula diyor ki:

      Joystick scriptini yazarken ayrıca bir de Inspector’unu kişiselleştirmek için bir editör scripti yazdım. Bu yüzden joystick’in Inspector’unda Türkçe açıklamalar var. Yoksa Unity’i Türkçe yapmadım yani 😀

  78. furkanyildirimsite diyor ki:

    Giriş yaparak bu yorumu Unity 3D Android Dokunmatik Ekran Joystick Kullanımı bloguna göndereceksiniz:
    selamun aleyküm abi ben şu ”Şimdi karakterin hareket scriptinde karakteri ne zaman hareket ettirmek isterseniz bir Vector2 değişkenine GetComponent(Joystick).sonuc değişkenini kaydedin. Karakteri sağa sola hareket ettirirken bu değişkenin x değerini, ileri geri hareket ettirirken de y değerini kullanın.” dediğini tam anlayamadım benim kendi hareket scriptim:

    using UnityEngine;
    using System.Collections;

    public class TopKontrol : MonoBehaviour {
    public Rigidbody rb;
    public float hiz=3f;

    // Use this for initialization
    void Start () {
    rb=GetComponent();

    }

    // Update is called once per frame
    void Update () {
    float duseyHareket= Input.GetAxis(“Horizontal”);
    float dikeyHareket = Input.GetAxis (“Vertical”);

    Vector3 hareket = new Vector3 (duseyHareket*hiz,0,dikeyHareket* hiz);

    rb.AddForce(hareket);

    }
    }

    burda nereye yazacağım yani sorum şu joystick hareket edince topumunda hareket etmesini istiyorum.Yardımcı olursan sevinirim

    • yasirkula diyor ki:
      using UnityEngine;
      using System.Collections;
      
      public class TopKontrol : MonoBehaviour 
      {
      	private Rigidbody rb;
      	
      	public Joystick joystick;
      	public float hiz = 3f;
      
      	// Use this for initialization
      	void Start() 
      	{
      		rb = GetComponent<Rigidbody>();
      	}
      
      	// Update is called once per frame
      	void Update () 
      	{
      		float duseyHareket = joystick.sonuc.x;
      		float dikeyHareket = joystick.sonuc.y;
      
      		Vector3 hareket = new Vector3( duseyHareket * hiz, 0, dikeyHareket * hiz );
      
      		rb.AddForce( hareket );
      	}
      }
      

      Buradaki Joystick değişkenine değerini Inspector’dan sürükle-bırak ile verebilirsiniz.

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