Menu
CoddyTech

Zıplama

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 40 / 60.

Bir zıplama, Space tuşuna basıldığı anda yalnızca bir kez ayarlanan dikey bir hızdır; betiğin zaten eklediği yer çekimi yükselişi yavaşlatır, tepe noktasında durdurur ve denetleyiciyi tekrar aşağı indirir. Geriye, belirli bir yüksekliğe ulaşmak için gereken başlangıç hızı kalır. Yer çekimi hızı sabit bir oranda azaltır; bu yüzden v hızında başlayan bir zıplama, durmadan önce v * v / (2 * g) birim yükselir. Tersinden hesaplandığında, h yüksekliği için başlangıç hızı v = √(2 * g * h) olur.

gravity negatif bir sayı olan -20 olarak saklandığında ve zıplama yüksekliği 2.5 birim olduğunda, bu değer Mathf.Sqrt(2.5f * -2f * -20f), yani 100'ün karekökü: saniyede 10 birimdir. -2f, negatif yer çekimini pozitife çevirir; çünkü negatif bir sayının karekökü NaN'dir:

if (controller.isGrounded && verticalSpeed < 0f)
{
    verticalSpeed = -2f;
}
if (Input.GetButtonDown("Jump") && controller.isGrounded)
{
    verticalSpeed = Mathf.Sqrt(jumpHeight * -2f * gravity);
}
verticalSpeed += gravity * Time.deltaTime;

Sıfırlama işlemi verticalSpeed < 0f koşulunu sınar; bu yüzden yalnızca düşüşleri bitirir: zıplama satırından sonra kullanılan yalın bir if (controller.isGrounded) sıfırlaması, zıplama hızını zıplamanın gerçekleştiği karede üzerine yazar. Zıplama koşulundaki controller.isGrounded sınaması, havadayken zıplamayı engeller. Inspector'da jumpHeight veya gravity değerini değiştirsen de zıplama tam olarak jumpHeight yüksekliğine ulaşır; buna karşılık verticalSpeed = 8f gibi sabit bir hız, her yer çekimi değerinde farklı bir yüksekliğe ulaşır.

challenge icon

Görev

Orta

Tek bir zıplama betiğinin hem Çocuk hem de Kanguru için çalışmasını sağlayın.

  1. Update() içinde, 9f değerini, tam olarak jumpHeight kadar yükselmeyi sağlayan başlangıç hızı olan Mathf.Sqrt(jumpHeight * -2f * gravity) ile değiştirin.
  2. Havada zıplamayı önlemek için zıplama if koşuluna && controller.isGrounded ekleyin.

“Oyna” düğmesine basın ve Space tuşuna basın: Çocuk 1 birim, Kanguru ise 4 birim yükselir. Ardından “Kontrol et” düğmesine basın.

Kendin dene

using UnityEngine;

public class Jumper : MonoBehaviour
{
    public float speed = 5f;
    public float gravity = -18f;
    public float jumpHeight = 1f;

    CharacterController controller;
    float verticalSpeed;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (controller.isGrounded && verticalSpeed < 0f)
        {
            verticalSpeed = -2f;
        }
        if (Input.GetButtonDown("Jump"))
        {
            verticalSpeed = 9f;
        }
        verticalSpeed += gravity * Time.deltaTime;

        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = verticalSpeed;
        controller.Move(move * Time.deltaTime);
    }
}

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground