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
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
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 ?
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.

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.
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
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.
[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]