using UnityEngine;
public class OyuncuHareketi : MonoBehaviour
{
public float hareketHizi = 5.0f;
public float ziplamaGucu = 8.0f;
public float yuvarlanmaGucu = 2.0f;
public int maksimumZiplamaSayisi = 2;
public Transform zeminKontrolNoktasi;
public LayerMask zeminLayer;
private Rigidbody2D rb;
private bool zemindeMi;
private int ziplamaSayisi;
private float zeminCapi = 0.3f;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
// Zıplama
if (zemindeMi && Input.GetKeyDown(KeyCode.W))
{
rb.velocity = new Vector2(rb.velocity.x, ziplamaGucu);
ziplamaSayisi = 1;
}
else if (ziplamaSayisi < maksimumZiplamaSayisi && Input.GetKeyDown(KeyCode.W))
{
rb.velocity = new Vector2(rb.velocity.x, ziplamaGucu);
ziplamaSayisi++;
}
// Sol ve sağ hareket
float yatayHareket = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(yatayHareket * hareketHizi, rb.velocity.y);
// dönme
if (yatayHareket < 0)
{
transform.localScale = new Vector3(-1, 1, 1);
}
else if (yatayHareket > 0)
{
transform.localScale = new Vector3(1, 1, 1);
}
if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.D))
{
rb.drag = 0; // Sürtünmeyi sıfırla, böylece yuvarlanma etkisi oluşur
}
if (Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.D))
{
rb.drag = 3; // Sürtünmeyi geri yükle
}
}
private void FixedUpdate()
{
// Zemin
zemindeMi = Physics2D.OverlapCircle(zeminKontrolNoktasi.position, zeminCapi, zeminLayer);
// Zeminde değilken zıplama sayısını sıfırla
if (!zemindeMi)
{
ziplamaSayisi = 0;
}
}
}