Unity Gelişmiş Input Sistemi (Mobil Destekli)

Yayınlandı: 19 Temmuz 2017 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

GÜNCELLEME (20.03.2018): Asset Store linki eklendi.

Hepinize yeniden merhabalar,

Son zamanlarda Input.GetAxis, Input.GetButton veya Input.GetKey kullanan kodların Android cihazlarda nasıl çalıştırılabileceği ile ilgili çeşitli sorular alıyordum. Ben de bu konuda basit bir çözüm üretmeye çalıştım ve ortaya SimpleInput adını verdiğim sistem çıktı.

SimpleInput sistemi ile UI butonlarına dokunarak, dokunmatik ekranda parmağınızı sürükleyerek, joystick kullanarak, direksiyon çevirerek, belirlediğiniz klavye tuşlarına dokunarak vb. Input fonksiyonlarını simüle edebiliyorsunuz.

Asset Store: https://assetstore.unity.com/packages/tools/input-management/simple-input-system-113033

Alternatif Link: https://github.com/yasirkula/UnitySimpleInput/releases

Detaylar için yazının devamını okuyabilirsiniz…

Sistemin işleyişi çok basit: öncelikle üstteki unitypackage‘ı projenize import ediyorsunuz. Ardından kodlarınızdaki multi-platform olmasını istediğiniz Input fonksiyonlarını aşağıdaki gibi SimpleInput versiyonu ile değiştiriyorsunuz:

  • Input.GetAxis -> SimpleInput.GetAxis
  • Input.GetAxisRaw -> SimpleInput.GetAxisRaw
  • Input.GetButtonDown -> SimpleInput.GetButtonDown
  • Input.GetButton -> SimpleInput.GetButton
  • Input.GetButtonUp -> SimpleInput.GetButtonUp
  • Input.GetMouseButtonDown -> SimpleInput.GetMouseButtonDown
  • Input.GetMouseButton -> SimpleInput.GetMouseButton
  • Input.GetMouseButtonUp -> SimpleInput.GetMouseButtonUp
  • Input.GetKeyDown -> SimpleInput.GetKeyDown
  • Input.GetKey -> SimpleInput.GetKey
  • Input.GetKeyUp -> SimpleInput.GetKeyUp

SimpleInput’ta karşılığı olmayan tek Input fonksiyonu Input.GetKey(string) fonksiyonu. Kodlarınızda bu fonksiyonu kullanıyorsanız o zaman fonksiyonun aldığı string parametreyi, KeyCode türündeki karşılığı ile değiştirmeniz lazım.

Artık geriye, bu input’lara değerlerini verecek olan component’leri/objeleri oyuna eklemek kalıyor. Mesela SimpleInput.GetAxis(“Horizontal”) ve SimpleInput.GetAxis(“Vertical”) fonksiyonlarına değerlerini vermesi için oyuna bir joystick veya d-pad ekleyebilirsiniz.

Paketle birlikte gelen Prefabs klasörünün içerisinde bazı hazır input objeleri bulunmakta: joystick, direksiyon (SteeringWheel), d-pad, yatay yön tuşları (ArrowsHorizontal), dikey yön tuşları (ArrowsVertical) ve 4 yöne yön tuşları (ArrowsAllDirections). Bu objeleri rahatça kişiselleştirebilmeniz için de Sprites klasöründe bir takım hazır görseller bulunmakta. Tabi eğer dilerseniz kendi görsellerinizi de kullanabilirsiniz. Paketle gelen hazır görsellerin hepsinin lisansı CC0 Creative Commons, yani istediğiniz sprite’ları herhangi bir credit vermeden istediğiniz gibi kullanabilirsiniz.

Diyelim ki oyuna joystick eklemek istiyorsunuz. Bu durumda yapmanız gereken şey, Prefabs klasöründeki Joystick prefab’ını sahnenizdeki canvas‘ın içerisine sürükleyip (canvas yoksa oluşturun) ardından joystick’i istediğiniz gibi konumlandırmak. Bundan sonra tek yapmanız gereken, joystick hareket ettikçe hangi axis’lerin değerlerinin değişeceğini belirlemek:

X Axis“e atanmış axis, joystick’i yatayda hareket ettirdikçe değer alırken “Y Axis“e atanmış axis ise joystick’i dikeyde hareket ettirdikçe değerini alır. “Movement Axes” değişkeni joystick’in hangi eksenlerde hareket edebileceğini belirtirken “Movement Area Radius” değişkeni ise joystick’in hareket alanı yarıçapını belirler. “Is Dynamic Joystick” seçeneği seçilirse joystick normalde ekranda gözükmez ancak sadece ekrana bir parmak dokununca, parmağın olduğu noktada belirir; yani konumu dinamik olur. “Dynamic Joystick Movement Area” ise, joystick eğer ki dinamik ise bu joystick’in nerelerde oluşabileceğini belirler. Bu alanın dışına dokunulursa orada joystick oluşmaz. Eğer değeri verilmezse joystick ekranın herhangi bir yerine dokununca oluşabilir.

2 boyutlu bir oyun yapıyorsunuz ve karakterinizin ekrandaki sol ve sağ ok tuşlarına dokundukça hareket etmesini istiyorsunuz diyelim. Bu durumda Prefabs klasöründeki ArrowsHorizontal prefab’ını canvas’ınıza sürükleyebilirsiniz. Bu objenin içerisinde Left (sol) ve Right (sağ) adında iki obje, bu objelerde de “Axis Input UI” isminde bir component bulunmakta. Bu component’i bir UI elemanına atarsanız, o UI elemanına basılı tutulduğu sürece “Axis” değişkeninde belirlenen axis input’unun değeri “Value” olur:

Eğer anlattıklarım birazcık kafanızı karıştırdıysa Example klasöründeki örnek sahneyi açıp oradaki sistemi inceleyebilirsiniz:

Bu örnekte hareket edebilen ve zıplayabilen 2 player var ve ilk player hareket etmek için Horizontal ve Vertical axis’lerini kullanırken ikinci player ise Horizontal2 ve Vertical2 axis’lerini kullanıyor. Zıplamak için ise Jump ve Jump2 button’larını kullanıyorlar. Yani SimpleInput ile, normalde Unity’de var olmayan axis’leri ve button’ları da kullanabiliyorsunuz.

Üstte bahsettiğim component’ler de dahil olmak üzere, plugin ile beraber gelen tüm component’lerden kısaca bahsedecek olursam:

SimpleInput.GetAxis İçin Component’ler

  • AxisInputKeyboard: klavyedeki bir tuşa basılı tuttuğunuz sürece axis’in değerini değiştirir
  • AxisInputMouse: “Mouse X” ve “Mouse Y” input’larını başka axis’lere taşımaya yarar
  • AxisInputUI: bir UI elemanına (mesela Button, Image, Text vs.) basılı tuttuğunuz sürece axis’in değerini değiştirir
  • Dpad: genellikle joystick’lerin solunda gördüğümüz d-pad’leri simüle eder. D-pad’lerde input ya tamamen vardır (-1 veya 1 değerini alır) ya da hiç yoktur (0 değerini alır). Yani 0.5 gibi bir ara değer döndürülmez
  • Joystick: alışageldiğimiz joystick input’u
  • SteeringWheel: ekrandaki bir direksiyonu simüle eder. Direksiyonu sola veya sağa çevirdikçe axis’in değeri değişir
  • Touchpad: atandığı RectTransform‘un üzerinde parmak sürüklenirse, bu sürükleme miktarı kadar axis’in değerini değiştirir; yani ekranda parmağı sürükledikçe axis’e değer verir. Eğer tüm ekranda parmağı sürükleyebilmek istiyorsanız Canvas objesinin kendisine bu component’i verebilirsiniz. Component’teki “Allow Touch Input” değişkeni, touchpad’in dokunmatik ekran desteklemesini sağlarken  “Allowed Mouse Buttons” ise, hangi mouse butonlarının touchpad’de işe yarayacağını belirler.

SimpleInput.GetButton İçin Component’ler

  • ButtonInputKeyboard: klavyedeki bir tuşa basılı tuttuğunuz sürece button’un değerini değiştirir
  • ButtonInputUI: bir UI elemanına basılı tuttuğunuz sürece button’un değerini değiştirir

SimpleInput.GetMouseButton İçin Component’ler

  • MouseButtonInputKeyboard: klavyedeki bir tuşa basılı tuttuğunuz sürece mouse button’un değerini değiştirir
  • MouseButtonInputUI: bir UI elemanına basılı tuttuğunuz sürece mouse button’un değerini değiştirir

SimpleInput.GetKey İçin Component’ler

  • KeyInputKeyboard: klavyedeki bir tuşa basılı tuttuğunuz sürece key’in değerini değiştirir
  • KeyInputUI: bir UI elemanına basılı tuttuğunuz sürece key’in değerini değiştirir

Bu component’ler arasından ButtonInputKeyboard gibilerini oyununuzdaki herhangi bir objeye component olarak verebilirken KeyInputUI gibilerini ise sadece UI objelerine component olarak verebilirsiniz. Joystick, SteeringWheel veya Dpad için ise Prefabs’taki hazır prefab’ları kullanmanızı öneririm.

Eğer ki SimpleInput ile bir klavye tuşuna tıklayınca değil de bir mouse tuşuna tıklayınca bir axis’i simüle etmek gibi bir niyetiniz olursa da o zaman sahnedeki bir objeye AxisInputKeyboard component’i verebilir ve “Key” olarak sol mouse tuşu için Mouse0, sağ mouse tuşu için Mouse1 ve orta mouse tuşu için de Mouse2 değerini verebilirsiniz.

Umarım faydalı olur. Daha sonra görüşmek dileğiyle!

yorum
  1. Can dedi ki:

    Yasir bey merhabalar. Size ufak bir sorum olacak.
    Park simülasyonu oyunumda cinemachine kamera sistemi mevcut. Ben freecamera eklediğim zaman ekrandaki Ui objelerle beraber kamerada dönüyor. Yani örneğin direksiyonu çevirince kamerada kafa sallıyor gibi oluyor. Birçok yöntemi denedim fakat çözemedim. Şöyleki cinemachine freecamera bir gameobject olarak çalışıyor. Canvasa buton gibi görünmez bir panel atadığım zaman ekranın belli bölgesinde kişi free kamera ile açıyı değiştiremez mi ? Birçok şey var fakat hiçbiri istediğim sonucu veremiyor. Oyuncu Ui’lar dışında ekranda bir yere bastığında kamerayı yönlendirsin fakat direksiyon veya gaz gibi objelere dokunduğunda free kamera dönmesin. Bunu nasıl yapabilirim? Şimdiden teşekkürler.

    • yasirkula dedi ki:

      Cinemachine kullanmadığımdan kesin konuşamıyorum ama FreeCamera input’u nereden alıyorsa, orada input’a değer verilmeden önce EventSystem.current.IsPointerOverGameObject fonksiyonunun çağrılması lazım. Bu fonksiyon true döndürdüğü zaman imleç bir UI objesinin üzerindedir, bu durumda input’un değeri sıfırlanmalı.

  2. Hakan dedi ki:

    Ekrana dokunulan yerde canvasın içinde joystickin pozisyonunu esnek hale getirebilirmiyiz

  3. SİDAR POLAT dedi ki:

    Tekrardan merhaba Yasir Bey .
    2 ye 1lik bir dikdörtgen küpüm var ve zemine bağlı da bir tuş var .
    2 ye 1 lik dikdörtgen küpümün sadece alt ve üst kısımları tuşa basınca aktif etmesini istiyorum yan şekilde bastığımda tuş aktif edilmesin ,nasıl yapabilirim. Collider trigger kısmına ne yazmam lazım.

    • yasirkula dedi ki:

      Bence bunu yapmanın en basit yolu, dikdörtgenler prizmanızın alt ve üst kısımlarına “DikdortgenYuzey” tag’ına sahip Box Collider’lar verip, butonun OnCollisionEnter’ında collision.collider.CompareTag(“DikdortgenYuzey”) sorgusu ile, bu tag’e sahip bir yüzeye temas edip etmediğinizi kontrol etmek. Daha karmaşık bir çözüm için şu linke göz atabilirsiniz: http://answers.unity.com/answers/1140230/view.html

  4. SİDAR POLAT dedi ki:

    Merhabalar
    Bir oyun yapımının sonuna geldim ama bir sorunu var.
    Sorun şu ki ;
    Butona basılı tuttukça cismin sadece 1 kere tek hareket etmesini istiyorum .
    Şu anda butona basılı tuttuğumda sürekli değeri 1f olarak devam ediyor ve bütün işi bozuyor. Butona sadece 1 kere tek basılması için ne yapabilirim.
    Aşağıya sağ tuşunun kodunu attım yardımcı olabilir misin?

    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;

    namespace SimpleInputNamespace
    {
    public class AxisInputUI : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
    {
    public SimpleInput.AxisInput axis = new SimpleInput.AxisInput();
    public float value = 1f;

    private void Awake()
    {
    Graphic graphic = GetComponent();
    if( graphic != null )
    graphic.raycastTarget = true;
    }

    private void OnEnable()
    {
    axis.StartTracking();
    }

    private void OnDisable()
    {
    axis.StopTracking();
    }

    public void OnPointerDown( PointerEventData eventData )
    {
    axis.value = value;
    }

    public void OnPointerUp( PointerEventData eventData )
    {
    axis.value = 0f;
    }
    }
    }

    • yasirkula dedi ki:

      AxisInputUI yerine ButtonInputUI kullanıp, yapmak istediğiniz eylemi SimpleInput.GetButtonDown fonksiyonu true ise yapın.

      • SİDAR POLAT dedi ki:

        Sorumu cevapladığın için çook teşekkür ederim ama cevabı tam olarak anlamadım.
        Yazmış olduğum kod üzerinde küçük bir şekilde gösterebilir misin?

      • SİDAR POLAT dedi ki:

        Çok teşekkür ederim tekrardan. Bool üzerinden hallettim ,desteğin için sonsuz teşekkürler.

      • yasirkula dedi ki:

        Elinize sağlık.

  5. Ahmet Yılmaz dedi ki:

    Merhaba Yasir Bey, Sayfanızı ilgiyle takip ediyorum. Bu anlattıklarınızdan tam olarak bişey anlamadım. daha doğrusu yarım yamalak.. Acaba anlattıklarınız video ile anlatabileceğiniz vaktiniz var mı.. Telefonlar için ufak bir projem var ve sona doğru geldim. sadece touchpad kısmı eksik kaldı

    • yasirkula dedi ki:

      Touchpad’in ekranın neresinde olmasını istiyorsanız, canvas’ınızın içerisinde o alanı kaplayan bir child obje (RectTransform) oluşturun ve ona Touchpad component’ini verin. Eğer Touchpad’in Inspector’daki axis’lerini Horizontal ve Vertical yaparsanız, touchpad input’una SimpleInput.GetAxis(“Horizontal”) ve Vertical ile erişebilirsiniz.

      • Ahmet Yılmaz dedi ki:

        Yeni bir canvas oluştursam bir problem olur mu?
        Alanı kaplayacak child objenin türü ne olmalı? (RectTransform şeklinde bir obje bulamadım.
        Saygılarımla

      • yasirkula dedi ki:

        Yeni canvas sıkıntı olmaz. Canvas’ın içinde oluşturduğunuz her objenin RectTransform component’i olur, onun vasıtasıyla objenin ebatlarını ayarlayabilirsiniz. Canvas’a sağ tıklayıp “Create Empty” seçeneğini seçerek RectTransform’lu child obje oluşturabilirsiniz.

  6. Emir dedi ki:

    Gerçekten inanılmaz birisiniz, sizi gerçekten tebrik ederim o kadar yerde takıldım ki sizin bu inputlarınız olmasa çok zorlanırdım sadece teşekkür etmek istedim üstad..

  7. Sibel Arslan dedi ki:

    Tekrar Merhabalar,

    Yorum yazmıştım ancak sanırım bir sorun oluştuğundan gelmedi.Tekrar yazıyorum..
    Ben sizin vermiş olduğunuz linkten import işlemini gerçekleştirdim ve butonlar için bahsettiğiniz prefab klasöründen bana lazım olan “ArrowsAllDirections” Canvas’ın içine attım.
    Normalde Update fonksiyonunda olan “w,a,s,d” ve yön tuşlarının olduğu yere değil de.Button fonksiyonu açıp oraya bu şekilde yazdım ve butonlara tag verdim ( update fonksiyoonuna attığğımda da çalışmadı zaten);

    public void Button()
    {

    if (SimpleInput.GetButton(“ButtonUp”))
    {
    if (nowDirection != “down”)
    {
    direction = “up”;

    }

    }

    Yalnız yine çalışmadı.Sizden ricam hiç anlamayan birine anlatır gibi bu olayı anlatabilir misiniz? 4 gündür sürekli bununla uğraşıyorum ama kod bilgim çok olmadığından yapamıyorum.Evde zaman geçirmek için yıllardır istediğim oyun proglamayla uğraşmak istiyorum.Ama bazı yerlerde takılıp kalıyorum.Kusura bakmayın sizi de çok rahatsız ediyorum.Yardımlarınız için çok teşekkür ederim.

    • yasirkula dedi ki:

      SimpleInput ile gelen kodları ellemenize gerek yok, onları oldukları gibi bırakın. Sahneye sürüklediğiniz ArrowsAllDirections, otomatik olarak SimpleInput.GetAxis(“Horizontal”) ve SimpleInput.GetAxis(“Vertical”)’a input sağlar. Tek yapmanız gereken, Update kodunuzda Input.GetAxis(“Horizontal”) kullanıyor idiyseniz, onu SimpleInput.GetAxis(“Horizontal”)’a çevirmeniz (aynı şeyi “Vertical” için de yapın). Takıldığınız yer olursa yasirkula@gmail.com‘a mail atabilirsiniz.

  8. ismail dedi ki:

    Hocam bir sorum daha olacaktı sizi rahatsız ettim. Şimdi Benim yaptığım top oyununda kamera topu güzelce takip ediyor. Simple inputta çalışıyor sorun yok. Ama kameranın topa bakış yönünü değiştirince mesela touch inputta sağa çektiğimde top farklı eksende gidiyor. Kameranın bakış yönüne göre gitmiyor. Bu değişkeni hangi kodu ekleyerek yapabilirim . Fotoğrafta kodlar var. teşekkürler

    https://i.hizliresim.com/PtB2OI.jpg

    • yasirkula dedi ki:

      Kameranın Transform’unu kameraTransform diye bir değişkende tuttuğunuzu varsayarsak:

      Vector3 ileri = kameraTransform.forward;
      Vector3 sag = kameraTransform.right;
      ileri.y = 0f;
      sag.y = 0f;

      Vector3 vec = ileri.normalized * dikey + sag.normalized * yatay;

  9. ismail dedi ki:

    üstad acil yardımıa ihtiyacım var. Bu paylaştığınız example dosyasına tıkladım bir ekran çıktı dont save dedim. Örnek sayfa çıktı sorun yok. Ama unityi kapatıp açtığımda kendi kayıtlı projeme ulaşamıyorum tıklayınca tekrar bu example görüntüsü geliyor. Kaydetmeme rağmen kayıtlı projem silindi mi ? ulaşmam mümkünmü teşekkürler

    • yasirkula dedi ki:

      Project panelinin arama kısmına t:Scene yazıp sahnenizi bulabilirsiniz. Eğer sahnenizi hiç kaydetmediyseniz, Don’t Save “kaydetme” demek olduğu için sahnenizi tekrar oluşturmanız gerekebilir.

      • ismail dedi ki:

        Hocam hallettim. open scene tıklayıp açılan ekranda asset klasöründeki scenes dosyasının içindekini seçince bütün hiyerarşi geri geldi.

  10. ali dedi ki:

    sağolun sayenizde hallettim. youtubede 10 tane video izlemiştim yapamamıştım . buraya bakarak şimdi 1 dakikada yaptım.

  11. sezer bulanık dedi ki:

    void Rotasyon()
    {
    kafakemarasi.transform.position = transform.position + kameraArasiMesafe;
    kafaRotUstAlt += SimpleInput.GetAxis(“Mouse Y”) * Time.fixedDeltaTime * -150;
    kafaRotSolSag += SimpleInput.GetAxis(“Mouse X”) * Time.fixedDeltaTime * 150;
    kafaRotUstAlt = Mathf.Clamp(kafaRotUstAlt, -20, 20);
    kafakemarasi.transform.rotation = Quaternion.Euler(kafaRotUstAlt, kafaRotSolSag, transform.eulerAngles.z);
    if (horizontal != 0 || vertical != 0)
    {
    Physics.Raycast(Vector3.zero, kafakemarasi.transform.GetChild(0).forward, out hit);
    transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(new Vector3(hit.point.x, 0, hit.point.z)), 0.5f);
    }
    }
    hocam benim şöyle mause kamera kontrol kodum var ama ben bunu mause değilde dokunmatik yani toucpad ile nasık yaparım

    • yasirkula dedi ki:

      Canvas objenizde yeni bir RectTransform oluşturup tüm ekranı kaplamasını sağlayın ve buna Touchpad component’i verin. “Allowed Mouse Buttons”ın içini boşaltıp “X Axis”i “Mouse X”, “Y Axis”i “Mouse Y” yapın. Son olarak da RectTransform’un Hierarchy’de canvas’ın diğer child objelerinin yukarısında yer aldığından emin olun.

  12. Darqhawq dedi ki:

    Kardeş ben kodu buraya yapıştırıyorum bunu android tuşu yapmak için nasıl bir kod gerekiyor? Sen çevirip bana verir misin kaç gündür bulamadım da

    public void sola_btn()
    {
    if (Input.GetKey(KeyCode.LeftArrow))
    {
    transform.Translate(-hiz * Time.deltaTime, 0, 0);
    }
    }

    şimdi ben kontrol için buton yaptım bu butona bu değeri veriyorum ama sadece klavyeden basınca çalışıyor normal butona basınca çalışmıyor onu nasıl yaparız?

    • yasirkula dedi ki:

      Kontrol için yaptığınız butona KeyInputUI component’i verip Key’i LeftArrow yapın. Ardından Input.GetKey fonksiyonunuzu da SimpleInput.GetKey yapın.

      • Darqhawq dedi ki:

        Hocam çok sağol ya adamın dibisin sen ya o kadar kod denedim olmadı bu dediğin işe yaradı teşekkürler…

  13. Darqhawq dedi ki:

    if (Input.GetKey(KeyCode.LeftArrow))
    {

    transform.Translate(-hiz * Time.deltaTime, 0, 0);

    bu şekildeki bir kodu nasıl android uyumlu hale getirebilirim?

  14. Faruk dedi ki:

    hocam merhaba mobil için keycode nasıl kullanılıyor

  15. Uğur dedi ki:

    Yasir bey. Unity ile geliştirmeye yeni başladım. arrowshorizontal öğesini projeye ekliyorum fakat ne ekranda görünüyor ne de bir işlevi var yardım edebilir misiniz?

    • yasirkula dedi ki:

      Sahnenizde bir UI-Canvas objesi oluşturup Arrows Horizontal’ı onun üzerine sürükle-bırak yapmanız lazım.

      • Uğur dedi ki:

        canvas zaten ekli tasarım ekranında normal bir şekilde gözüküyor ancak başlattığımda yok oluyor nedeni ne olabilir?

      • yasirkula dedi ki:

        Canvas’ınız “Screen Space – Overlay” modunu kullanmıyorsa o moda geçiş yapmayı deneyin. Oyun esnasında butonların canvas’taki konumlarını Scene panelinden değiştirerek belli bir noktada butonlarınız oyunda gözükmeye başlıyor mu ona da bakın. Belki butonlar canvas’ın dışında kalıyordur ve o yüzden gözükmüyordur.

  16. Ahmet dedi ki:

    Yasir abi merhabalar ben kuş bakışı bir araba oyunu yapmaya çalışıyorum ve arabamın direksiyon yardımı ile dönmesini istiyorum ama sınırlı olarak.Arabam 360 derece dönüyor, bunu kısıtlamak istiyorum.Birde arabamı döndüğü yön doğrultusunda nasıl hareket ettirebilirim acaba senin verdiğin yön tuşlarını canvas ‘ a attım ama hareket ettirmeyi başaramadım yardımcı olur musun ?

    • yasirkula dedi ki:

      Diyelim objenin eğiminin Y değerini -45 ile 45 arasında kısıtlamak için:

      Vector3 egim = transform.localEulerAngles;
      if( egim.y > 180 )
      egim.y -= 360;
      else if( egim.y < -180 )
      egim.y += 360;

      egim.y = Mathf.Clamp( egim.y, -45, 45 );
      transform.localEulerAngles = egim;

      Arabayı yön doğrultusunda hareket ettirmek için transform.position += transform.up * Time.deltaTime; veya transform.position += transform.forward * Time.deltaTime; kodlarını deneyebilirsiniz. Ekrandaki yön tuşlarından, klavyedeki yön tuşları gibi input alabilmek için SimpleInput.GetAxis(“Horizontal”) kodunu kullanabilirsiniz.

      • Ahmet dedi ki:

        Abi ben arabayı z ekseninde -40 ile 40 arasında sınırlamak istiyorum. egim.z yapıp ayarlıyorum ama sabit bir şekilde -5 ile 5 arasında sınırlıyor bunu değiştirmenin bir yolu var mı ? Birde araba direksiyon ile çevrilen yöne değilde tek bir yönde bağımsız ilerliyor.Yardımların için teşekkürler.

      • yasirkula dedi ki:

        Araba kodunuzu nasıl yazdığınızı bilmiyorum o yüzden direksiyon mevzusunu cevaplayamayacağım. -40 ile 40 arasında sınırlama kodunuzu görebilir miyim? Inspector’dan bakınca Rotation Z değeri -5 ile 5 arasında kalıyor, değil mi?

  17. Levent dedi ki:

    Yasir bey
    Joytick e karakterin animasyonunu verebilirmiyiz .Mesela uçağı sağa veya sola yatırıp bu animasyonu jostickle oynatabilirmiyiz veya koşma animasyonu dönme animasyonu tırmanma animasyonu vs.
    Kolay gelsin .

    • yasirkula dedi ki:

      Joystick varsayılan olarak “Horizontal” ve “Vertical” axis’lerini kullanmakta. Yani sahnenize joystick koyduktan sonra SimpleInput.GetAxis(“Horizontal”) kodu ile, -1 ile 1 arasında bir sayı elde edebilir ve bu sayıyı kullanarak uçağı döndürebilirsiniz.

Darqhawq için bir cevap yazın Cevabı iptal et

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. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.