Menu
CoddyTech

Hayatta Kal ve Puan Kazan

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 80 / 85.

Bu adım, Bloklardan Kaçış oyununu tamamlıyor: blokları oluşturan bir zamanlayıcı, hareket edip temizlenen bir liste, çarpışma testi ve geçen saniyeleri sayan bir skor. Bir float değerin önündeki (int), kesirli kısmını atar.

challenge icon

Görev

Orta

Bir puan ekle ve blokların giderek daha hızlı düşmesini sağla.

  1. private float score; ve [SerializeField] private float speedUp = 0.2f; ekle.
  2. Update() metodunun başında, score değişkenine Time.deltaTime ve fallSpeed değişkenine speedUp * Time.deltaTime ekle.
  3. Bir engele çarptığında "Game over! Score: " + (int)score ifadesini günlüğe yazdır. (int) kesirli kısmı atar: 12.7, 12 olarak gösterilir.

“Oyna” düğmesine bas ve hayatta kal: Bir engele çarptığında puanın günlüğe yazdırılır. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using System.Collections.Generic;
using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;
    [SerializeField] private GameObject blockPrefab;
    [SerializeField] private float spawnEvery = 1f;
    [SerializeField] private float fallSpeed = 5f;

    private List<GameObject> blocks = new List<GameObject>();
    private float timer;

    void Update()
    {
        Vector3 p = transform.position;
        p.x += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
        p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);
        transform.position = p;

        timer += Time.deltaTime;
        if (timer >= spawnEvery)
        {
            timer -= spawnEvery;
            Vector3 spot = new Vector3(Random.Range(-laneEdge, laneEdge), 10f, 0f);
            blocks.Add(Instantiate(blockPrefab, spot, Quaternion.identity));
        }

        for (int i = blocks.Count - 1; i >= 0; i--)
        {
            blocks[i].transform.position += Vector3.down * fallSpeed * Time.deltaTime;
            Vector3 b = blocks[i].transform.position;
            if (Mathf.Abs(b.x - transform.position.x) < 1f && Mathf.Abs(b.y - transform.position.y) < 1f)
            {
                Debug.Log("Game over");
                enabled = false;
                return;
            }
            if (b.y < -1f)
            {
                Destroy(blocks[i]);
                blocks.RemoveAt(i);
            }
        }
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground