C# Karakterin yüzünü döndürme kodu çalışmıyor

FakirSincap

Kilopat
Katılım
27 Mayıs 2018
Mesajlar
1.248
Daha fazla  
Cinsiyet
Erkek
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class movements : MonoBehaviour
{
    Rigidbody2D rb2D;
    Vector3 velocity;

    public float speedAmount = 5f;
    public float jump = 4f;

    // Start is called before the first frame update
    void Start()
    {
        rb2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        velocity = new Vector3(Input.GetAxis("Horizontal"), 0f);
        transform.position += velocity * speedAmount * Time.deltaTime;

        if (Input.GetButtonDown("Jump") && Mathf.Approximately(rb2D.velocity.y, 0))
        {
            rb2D.AddForce(Vector3.up * jump, ForceMode2D.Impulse);
        }
        if (Input.GetAxisRaw("Horizontal") == -1) ;
        {
            transform.rotation = Quaternion.Euler(0f, 180f, 0f);
        }
  

        else if (Input.GetAxisRaw("Horizontal") == 1) ;
        transform.rotation = Quaternion.Euler(0f, 0f, 0f);
    }
    }



Karakterimin yüzünü döndürmek istiyorum ama olmuyor. Son kısımdaki hata tam olarak nedir? Söyleyebilen olursa çok mutlu olurum. Öğrendiğimin aynısını yapıyorum çünkü. Başka bir şey olmalı bu işte. :) Else if değişkenini kullanmama neden izin vermiyor mesela? Neyse gerçekten yardım edersiniz umarım. Bir saattir fenalık geldi artık aynı yerde takılı kalmaktan.

Not: Bu arada Technopat'ta kod şablonu oluşturmayı bilmiyorum. Direk kopyala, yapıştır yaptım. Eğer böyle değilse moderatör düzenlerse sevinirim. Bu kodlama işi iyice cahil yaptı beni. 😁
 
Kodunuzda birkaç küçük hata var. İlk olarak, if ve else if koşullarının sonunda noktalı virgül kullanmamalısınız. Bu, koşulun her zaman doğru olduğu anlamına gelir ve kod bloğunu yürütmez. İkinci olarak, transform.rotation’u değiştirmek yerine transform.localScale.x’i değiştirmeyi deneyin. Bu, karakterinizin yönünü ters çevirmenize yardımcı olacaktır.

Kodunuzu şöyle düzeltebilirsiniz:
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class movements : MonoBehaviour
{
    Rigidbody2D rb2D;
    Vector3 velocity;

    public float speedAmount = 5f;
    public float jump = 4f;

    // Start is called before the first frame update
    void Start()
    {
        rb2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        velocity = new Vector3(Input.GetAxis("Horizontal"), 0f);
        transform.position += velocity * speedAmount * Time.deltaTime;

        if (Input.GetButtonDown("Jump") && Mathf.Approximately(rb2D.velocity.y, 0))
        {
            rb2D.AddForce(Vector3.up * jump, ForceMode2D.Impulse);
        }
        if (Input.GetAxisRaw("Horizontal") == -1) // noktalı virgül kaldırıldı
        {
            //transform.rotation = Quaternion.Euler(0f, 180f, 0f); // bu satır yorumlandı
            transform.localScale = new Vector3(-1f, 1f, 1f); // bu satır eklendi
        }
 

        else if (Input.GetAxisRaw("Horizontal") == 1) // noktalı virgül kaldırıldı
        {
            //transform.rotation = Quaternion.Euler(0f, 0f, 0f); // bu satır yorumlandı
            transform.localScale = new Vector3(1f, 1f, 1f); // bu satır eklendi
        }
    }
}
 
Kodunuzda birkaç küçük hata var. İlk olarak, if ve else if koşullarının sonunda noktalı virgül kullanmamalısınız. Bu, koşulun her zaman doğru olduğu anlamına gelir ve kod bloğunu yürütmez. İkinci olarak, transform. Rotation'u değiştirmek yerine transform. LocalScale. X'i değiştirmeyi deneyin. Bu, karakterinizin yönünü ters çevirmenize yardımcı olacaktır.

Kodunuzu şöyle düzeltebilirsiniz:
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class movements : MonoBehaviour
{
 Rigidbody2D rb2D;
 Vector3 velocity;

 public float speedAmount = 5f;
 public float jump = 4f;

 // Start is called before the first frame update
 void Start()
 {
 rb2D = GetComponent<Rigidbody2D>();
 }

 // Update is called once per frame
 void Update()
 {
 velocity = new Vector3(Input.GetAxis("Horizontal"), 0f);
 transform.position += velocity * speedAmount * Time.deltaTime;

 if (Input.GetButtonDown("Jump") && Mathf.Approximately(rb2D.velocity.y, 0))
 {
 rb2D.AddForce(Vector3.up * jump, ForceMode2D.Impulse);
 }
 if (Input.GetAxisRaw("Horizontal") == -1) // noktalı virgül kaldırıldı
 {
 //transform.rotation = Quaternion.Euler(0f, 180f, 0f); // bu satır yorumlandı
 transform.localScale = new Vector3(-1f, 1f, 1f); // bu satır eklendi
 }

 else if (Input.GetAxisRaw("Horizontal") == 1) // noktalı virgül kaldırıldı
 {
 //transform.rotation = Quaternion.Euler(0f, 0f, 0f); // bu satır yorumlandı
 transform.localScale = new Vector3(1f, 1f, 1f); // bu satır eklendi
 }
 }
}

Hocam çok teşekkür ederim. Bu kadar basit şeyi de nasıl fark edemedim anlamadım. Neyse acemilik diyelim. Daha 3. günüm bu. :) İkinci söylediğiniz şeyi pek anlamadım hocam. Yaptığımda karakterimi yönlendirirken sürekli scale değiştirdi.
 

Geri
Yukarı