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);

 }

}
 
1691786539988.png


@Syntax Error hala hata veriyo
 
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.
 

Technopat Haberler

Yeni konular

Yeni mesajlar

Geri
Yukarı