Unity Android Araba kontrolleri
-
-
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 > -
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ı: MrMoonBowQQNedense 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 >
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X