Hey merhaba ziyaretçi bize destek olmak ister misin ? Hemen Kayıt Ol Seni hiç sıkmadan kayıt edeceğiz endişelenmek bize destek olduğun için teşekkürler.



  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
transfor rotation sorunu
#1
merhabalar arkadaşlar unity de ve forumda oldukca yeniyim umarım konuyu doğru yere açmışımdır, benim problemim şu bir uzay gemim var ve bunu kod ile sağa hareket ettiriyorum aynı zamanda rotation ilede sağa dogru kendiside dönüyor şu şekilde
 
 if (Input.GetKey(KeyCode.RightArrow))
        {
            GetComponent<Rigidbody>().velocity = Vector3.right * 100 * Time.deltaTime;
            transform.Rotate(0, 0, -0.9f, (Space)(Time.deltaTime * 10));
        }


ben istiyorumki tuşa basmadığımda geri düzelsin rotation 0 olsun koddada şu  şekilde yaptım 

else
        {

            transform.Rotate(0, 0, 0.0f, (Space)(Time.deltaTime * 10));
        }
ama çalışmıyor teknik olarak else dedigimde şuna cıkmıyormu ? = tuşa basmadıgımda rotationu 0 la nerde yanlış yapıyorum düzelmiyo hic cunki
  Cevapla
#2
hocmam else komutunda 0 derece döndür demiş oluyorsunuz siz direk sıfırlamak isterseniz transform.eulerAngles = new Vector3(0,0,0) yeterli olur
  Cevapla
#3
bilgi için çok teşekkürler yanlız calışmadı sanırım sundan dolayı 

if (Input.GetKey(KeyCode.RightArrow))
        {
            GetComponent<Rigidbody>().velocity = Vector3.right * 100 * Time.deltaTime;
            transform.Rotate(0, 0, -0.9f, (Space)(Time.deltaTime * 10));
        }
altına dırek yazınca else olarak o tusa basılmayınca sureklı 0 da dursun dıyoruz ama benım ondan baska tuslarımda var tum kodlarım su sekılde 

 if (Input.GetKey(KeyCode.RightArrow))

        {

            GetComponent<Rigidbody>().velocity = Vector3.right * 100 * Time.deltaTime;

            transform.Rotate(0, 0, -0.9f, (Space)(Time.deltaTime * 10));     

        }



        



        if (Input.GetKey(KeyCode.LeftArrow))

        {

            GetComponent<Rigidbody>().velocity = Vector3.left * 100 * Time.deltaTime;

            transform.Rotate(0, 0, 0.9f, (Space)(Time.deltaTime * 10));

        }



        if (Input.GetKey(KeyCode.UpArrow))

        {

            GetComponent<Rigidbody>().velocity = Vector3.up * 250 * Time.deltaTime;

            transform.Rotate(-0.5f, 0, 0, (Space)(Time.deltaTime * 10));

        }





        if (Input.GetKey(KeyCode.Space))

        {

            GetComponent<Rigidbody>().velocity = Vector3.forward * 250 * Time.deltaTime;

            transform.Rotate(0, 0, 0, (Space)(Time.deltaTime * 10));

        }



        if (Input.GetKey(KeyCode.DownArrow))

        {

            GetComponent<Rigidbody>().velocity = Vector3.down * 250 * Time.deltaTime;

            transform.Rotate(0.5f, 0, 0, (Space)(Time.deltaTime * 10));
        }

o verdınız kodu en alta yazıncada olmuyo baska bır yontem varmı acaba ? 
  Cevapla
#4
transform.Rotate fonksiyonu belirtilen eksende objeyi sabit açılarla döndürmek için kullanılıyor. Dolayısıyla Rotate(0,0,0) derseniz her eksende objeyi 0 derece döndür demek oluyor, objenin rotasyonunu 0 yap demek olmuyor. Ayrıca (Space)(Time.deltaTime * 10) yazmanız hızını hiçbir şekilde etkilememesi gerekiyor, ordaki space'in iki farklı değeri mevcut, birisi belirtilen açıları world eksenine göre döndürürken, diğeri ise local eksenine göre döndürüyor. Hızını etkilemek istiyorsanız verilen açıyı Time.deltaTime * float ile çarpmanız gerekmekte. Örnek vermek gerekirse:
Kod:
public GameObject selfRotate, worldRotate;

void Start()
{
    selfRotate.transform.Rotate(45f, 0f, 0f, Space.World);
    worldRotate.transform.Rotate(45f, 0f, 0f, Space.World);
}

void Update()
{
    selfRotate.transform.Rotate(0f, 90f * Time.deltaTime, 0f, Space.Self);
    worldRotate.transform.Rotate(0f, 90f * Time.deltaTime, 0f, Space.World);
}
Bu kodu bir scripte atıp sahnede iki küp oluşturduktan sonra selfRotate ve worldRotate parametrelerine iki kübü de atarsanız, selfRotate'in worldRotate'den farklı döndüğünü görebilirsiniz. Her iki küp de saniyede 90 derece dönmekte.
resim
Space.Self olan sol taraftaki küp, Space.World olan sağ taraftaki küp. Gördüğün üzere sol taraftaki küp kendi y eksenine göre saniyede 90 derece dönerken sağ taraftaki küp world eksenine göre y ekseninde saniyede 90 derece dönmekte.
Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!
resim
  Cevapla
#5
yardımlarınız ıcın cok teşekkür ederim yeni oldugum ıcın zorlanıyorum bayagı bunun uzerıne dusup cozeyım sorunumu
  Cevapla
#6
Hocam öncelikle Input.GetKey kullanımınızda mantık hatası var. Biraz uzun bir yöntem ama eğer GetKey kullanıyorsanız böyle yapılması daha sağlıklı olur. GetKey yerine Input.GetAxis("Horizontal") kullanabilirsiniz. Çözüme gelirsek Else ifadesi yerine Input.GetKeyUp diyebilirsiniz yani parmağınız basılan tuştan çekildiği zaman çalışır bu sayede daha basit ama uzun bir kod olur sizin tercihiniz. Profesyonel projelerde başka yöntemler kullanmanızı tercih ediyorum.
  Cevapla
#7
[b]Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.! çok tekeşşükler öneriniz için ama başka bir yöntem kullandım bu sayede gerekte kalmadı.[/b]
  Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Exclamation Space Zıplama Sorunu lütfen yardım ivolverine1 1 81 15-10-2020, Saat: 18:23
Son Yorum: No_99
Exclamation Ağır Çekim Sorunu Yardım. xrasit 2 149 28-08-2020, Saat: 13:58
Son Yorum: No_99
  Unity 3d Mobile Kontrol sorunu Utas990 1 399 27-04-2020, Saat: 17:41
Son Yorum: mtat0640
  Ateş Butonu sorunu bymsec 5 1,126 23-04-2020, Saat: 00:03
Son Yorum: Utas990
Question Transform.position Sorunu downg61 0 320 13-04-2020, Saat: 08:15
Son Yorum: downg61

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi