Unity Topu Double Jump Zıplatma Kodu

Katılım
8 Şubat 2023
Mesajlar
167
Çözümler
1
Daha fazla  
Sistem Özellikleri
r7 9800x3d
rtx 5070 ti 16gb
2x32gb ram
asus tuf gaming b850-plus wifi
Cinsiyet
Erkek
Unity'de yaptığım oyuna bir top ekledim ve bu kodu ekledim:

Kod:
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;

 }

 }

}

Top hareket edebiliyor ve zıplayabiliyor ama sonsuz zıplayabiliyor. Ben sadece 2 defa zıplamasını ve yere tekrar değene kadar daha zıplayamamasını istiyorum yani double-jump gibi.
 
hocam Assets\hareketetmektop.cs(3,45): error CS1001: Identifier expected böyle bir hata çıktı bende sorun olabilir mi?
 
Assets\tophareket.cs(3,45): error CS1001: Identifier expected

Hocam en baştan yeni bir kod dosyası açıp. En son attığım kodu ona yapıştırın. Yeni kod dosyasını karaktere ekleyip eskisini silin.
aynı

@Syntax Error çok bilmiyorumda size unity dosyasını atsam baksanız belki başka bişeyi yanlış yapıyorumdur?
 
Hatayı fark ettim sonundaki noktadan dolayıymış.
C#:
using UnityEngine;

public class OyuncuHareketi : MonoBehaviour

{

 public float hareketHizi = 5.0f;

 public float ziplamaGucu = 8.0f;

 public float yuvarlanmaGucu = 2.0f;

 public Transform zeminKontrolNoktasi;

 public LayerMask zeminLayer;

 private Rigidbody2D rb;

 private float zeminCapi = 0.3f;

 bool doubleJump;

 private void Awake()

 {

 rb = GetComponent<Rigidbody2D>();

 }

 private void Update()

 {

 //Zıplamıyorsa double jump yapabilmeyi engeller.

 if (IsGrounded() && !Input.GetButton("Jump"))

 {

 doubleJump = false;

 }

 if (Input.GetButtonDown("Jump"))

 {

 //yerdeyse veya double jumptaysa zıplama işlemi gerçekleşir.

 if (IsGrounded() || doubleJump)

 {

 rb.velocity = new Vector2(rb.velocity.x, jumpingPower);

 //eğer ilk defa zıpladıysa double jump aktif olur. eğer zaten 1 kere zıpladıysa, tekrar zıplarsa double jump false olur.

 doubleJump = !doubleJump;

 }

 }

 if (Input.GetButtonUp("Jump") && rb.velocity.y > 0f)

 {

 rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * 0.5f);

 }

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

 }

 }

 //Zeminde olup olmadığını kontrol edip ona göre değer gönderir.

 private bool zemindeMi()

 {

 return Physics2D.OverlapCircle(zeminKontrolNoktasi.position, 0.2f, zeminCapi);

 }

}
 
Kod:
using UnityEngine;

public class OyuncuHareketi : MonoBehaviour

{

 public float hareketHizi = 5.0f;

 public float ziplamaGucu = 8.0f;

 public float yuvarlanmaGucu = 2.0f;

 public Transform zeminKontrolNoktasi;

 public LayerMask zeminLayer;

 private Rigidbody2D rb;

 private float zeminCapi = 0.3f;

 bool doubleJump;

 private void Awake()

 {

 rb = GetComponent<Rigidbody2D>();

 }

 private void Update()

 {

 //Zıplamıyorsa double jump yapabilmeyi engeller.

 if (zemindeMi() && !Input.GetButton("Jump"))

 {

 doubleJump = false;

 }

 if (Input.GetButtonDown("Jump"))

 {

 //yerdeyse veya double jumptaysa zıplama işlemi gerçekleşir.

 if (zemindeMi() || doubleJump)

 {

 rb.velocity = new Vector2(rb.velocity.x, ziplamaGucu);

 //eğer ilk defa zıpladıysa double jump aktif olur. eğer zaten 1 kere zıpladıysa, tekrar zıplarsa double jump false olur.

 doubleJump = !doubleJump;

 }

 }

 if (Input.GetButtonUp("Jump") && rb.velocity.y > 0f)

 {

 rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * 0.5f);

 }

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

 }

 }

 //Zeminde olup olmadığını kontrol edip ona göre değer gönderir.

 private bool zemindeMi()

 {

 return Physics2D.OverlapCircle(zeminKontrolNoktasi.position, 0.3f, zeminLayer);

 }

}
Şu şekilde kodu düzenleyin. 121 satırdaki hatanın tam olarak neresi olduğunu göremedim. Kodu şu şekilde değiştirip bakın.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…