Menu
CoddyTech

Bertahan dan Raih Skor

Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 80 dari 85.

Langkah ini menyelesaikan Dodge the Blocks: pengatur waktu yang memunculkan objek, sebuah list yang bergerak dan membersihkan objek, pengujian tabrakan, dan skor yang menghitung detik. (int) di depan float membuang bagian pecahannya.

challenge icon

Tantangan

Sedang

Tambahkan skor dan blok yang jatuh semakin cepat.

  1. Tambahkan private float score; dan [SerializeField] private float speedUp = 0.2f;.
  2. Di bagian atas Update(), tambahkan Time.deltaTime ke score dan speedUp * Time.deltaTime ke fallSpeed.
  3. Saat terkena, catat "Game over! Score: " + (int)score. (int) menghilangkan bagian pecahan: 12.7 ditampilkan sebagai 12.

Tekan tombol “Main” dan bertahanlah: saat terkena, skor kamu akan dicatat. Lalu tekan tombol “Periksa”.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar Scripting Unity

Latihan sendiri: Playground Unity