Şimdi Ara

Unity Android Araba kontrolleri

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
0
Favori
459
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Selam arkadaşlar


    motor = maxMotorGucu * joystick.Vertical; Buradaki kontrolü joystick yerine ui ileri geri butonları ile yaptırmak istiyorum


     float donus = maxDonusAcisi * joystick.Horizontal; Buradakini de joystick yerine ui sağ sol butonları ile yaptırmak istiyorum.


    yardımcı olur musunuz




  • Ya da input.axis kullanarak w s tuşları yerine ui ileri geri butonlarını atayabilir miyim

  • İlk aklıma gelen şey eğer GetAxis'teki gibi güç çarpanınız 0-1 arasında olacaksa butonda bu hissiyatı butona basılı tutulup ne kadar süre basılı tutulduysa o çarpanı 0'den 1'e doğru belli oranda arttırarak verebilirsiniz. Yani butona mesela 1 saniye boyunca basılı tutulursa tam güce ulaşsın. Basılı tutma olayını da OnPointerDown() ve OnPointerUp() gibi fonksiyonlarla kontrol edebilirsiniz.




    < Bu mesaj bu kişi tarafından değiştirildi Fulton -- 9 Aralık 2020; 23:15:14 >
  • Fulton F kullanıcısına yanıt

    Nedense o değerlerin 1 ve -1 döndürdüğü aklımdan çıkmış.


    public float turn = 0;

      public float gas = 0;


    public void SagaDon()

      {

        turn = 1f;

      }


      public void SolaDon()

      {

        turn = -1f;

      }



      public void GazIleri()

      {

        gas = 1f;

      }


      public void GazGeri()

      {

        gas = -1f;

      }


      public void GaziBirak()

      {

        gas = 0;

      }


      public void DonmeyiBirak()

      {

        turn = 0;

      }


    bunları ilgili butonlara tanıtırsam yeterli olur diye düşünüyordum. Elbette joystick kadar hassas olmayacaktır o yüzden yavaş yavaş 1 veya -1 olmasına gerek yok.

    Şimdi de araba kontrollerini tuttuğum script ile bu tuş atamalarını yaptığım scripte bağlantı kuramıyorum. Araba kontrollerindeki kodlarım şu şekilde;

    motor = maxMotorGucu * GetComponent<InGameScreen>().gas;    

    float donus = maxDonusAcisi * GetComponent<InGameScreen>().turn;


    Aldığım hata Object reference not set to an instance of an object.


    Butonların eventlerine gerekli atamaları da yaptım ama sorunu çözemedim yardımcı olur musunuz?




    < Bu mesaj bu kişi tarafından değiştirildi MrMoonBowQQ -- 9 Aralık 2020; 13:5:19 >




  • quote:

    Orijinalden alıntı: MrMoonBowQQ

    Nedense o değerlerin 1 ve -1 döndürdüğü aklımdan çıkmış.


    public float turn = 0;

      public float gas = 0;


    public void SagaDon()

      {

        turn = 1f;

      }


      public void SolaDon()

      {

        turn = -1f;

      }



      public void GazIleri()

      {

        gas = 1f;

      }


      public void GazGeri()

      {

        gas = -1f;

      }


      public void GaziBirak()

      {

        gas = 0;

      }


      public void DonmeyiBirak()

      {

        turn = 0;

      }


    bunları ilgili butonlara tanıtırsam yeterli olur diye düşünüyordum. Elbette joystick kadar hassas olmayacaktır o yüzden yavaş yavaş 1 veya -1 olmasına gerek yok.

    Şimdi de araba kontrollerini tuttuğum script ile bu tuş atamalarını yaptığım scripte bağlantı kuramıyorum. Araba kontrollerindeki kodlarım şu şekilde;

    motor = maxMotorGucu * GetComponent<InGameScreen>().gas;    

    float donus = maxDonusAcisi * GetComponent<InGameScreen>().turn;


    Aldığım hata Object reference not set to an instance of an object.


    Butonların eventlerine gerekli atamaları da yaptım ama sorunu çözemedim yardımcı olur musunuz?

    "InGameScreen" dediğiniz scripti atamamışsınız eğer hatayı onla ilgili satırda veriyorsa. O hata genelde atanmayan, tanımlanmayan objelerde çıkan bir hata. Bunun dışında bu yazdığınız kodlarda hiç hassasiyet olmadan direkt -1 ya da +1 alacak sanırım güç değerleri. Benim kastettiğim şey şuydu: Mesela Time.deltaTime ile belli bir değeri çarparak (Update ya da Fixed Update gibi bir yerde) butona basıldığında saniyede belli bir miktar arttırarak ya da azaltarak bu eşik değerlerine [-1, +1] ulaştırabilirdiniz.


    Mesela; "Güç += 0.25f * Time.deltaTime" gibi bir komut ile güç değerini saniyede 0,25 arttırırsınız. Tabi verdiğim değer sadece örnek.




    < Bu mesaj bu kişi tarafından değiştirildi Fulton -- 9 Aralık 2020; 23:29:52 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.