Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Đồng xu và điểm số là "gia vị" quen thuộc của game 2D: chúng tạo mục tiêu và cảm giác tiến bộ cho người chơi. Bài này hướng dẫn bạn làm đồng xu biến mất khi nhân vật chạm vào, cộng điểm và hiển thị lên màn hình bằng Unity.
Trong Unity, va chạm vật lý do Collider xử lý. Collider thường (solid) chặn vật thể khác đi xuyên qua. Collider đánh dấu Is Trigger thì không chặn, mà chỉ gửi sự kiện khi có vật đi vào. Đồng xu là ví dụ điển hình của trigger: nhân vật đi xuyên qua nhưng game vẫn nhận biết được. Điều kiện để sự kiện kích hoạt là ít nhất một trong hai vật có Rigidbody2D, thường là nhân vật.
Coin, tô màu vàng.Coin (tạo mới trong ô Tag của Inspector nếu chưa có).Hãy chắc chắn đối tượng nhân vật có Tag Player và có Rigidbody2D cùng Collider2D.
Ta tạo một script quản lý trung tâm. Dùng mẫu singleton đơn giản để mọi script đều gọi được mà không phải tìm kiếm đối tượng.
using UnityEngine;
using TMPro;
public class ScoreManager : MonoBehaviour
{
public static ScoreManager Instance { get; private set; }
[SerializeField] private TextMeshProUGUI scoreText;
private int score;
void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
}
void Start()
{
UpdateUI();
}
public void AddScore(int amount)
{
score += amount;
UpdateUI();
}
private void UpdateUI()
{
scoreText.text = "Điểm: " + score;
}
}Thuộc tính [SerializeField] cho phép gán đối tượng trong Inspector mà vẫn giữ biến ở chế độ private. Nếu Unity chưa có font tiếng Việt đầy đủ, bạn nên tạo Font Asset TextMeshPro từ một font hỗ trợ tiếng Việt để các chữ có dấu hiển thị đúng.
GameManager, gắn script ScoreManager và kéo đối tượng chữ vào ô Score Text.using UnityEngine;
public class Coin : MonoBehaviour
{
[SerializeField] private int value = 1;
private void OnTriggerEnter2D(Collider2D other)
{
if (!other.CompareTag("Player")) return;
ScoreManager.Instance.AddScore(value);
Destroy(gameObject);
}
}Gắn script Coin vào prefab đồng xu. Hàm OnTriggerEnter2D được Unity gọi khi một collider khác đi vào vùng trigger. Dùng CompareTag hiệu quả và an toàn hơn so sánh chuỗi với other.tag. Nhấn Play, điều khiển nhân vật chạm vào đồng xu: nó biến mất và điểm tăng lên.
Update đoạn transform.Rotate(0, 180 * Time.deltaTime, 0) hoặc dịch lên xuống nhẹ theo hàm sin.AudioSource.PlayClipAtPoint trước khi hủy đồng xu.value trong Inspector của từng prefab biến thể.OnTriggerEnter2D (có số 2D), nhân vật có Rigidbody2D và đúng Tag.DontDestroyOnLoad hoặc lưu dữ liệu riêng.Bạn vừa gặp ba khái niệm dùng đi dùng lại: trigger collider, giao tiếp giữa các script và cập nhật giao diện. Từ đây có thể mở rộng thành hệ thống mạng sống, kho vật phẩm hay nhiệm vụ.
Nếu muốn làm game hoàn chỉnh theo lộ trình, hãy tham khảo các khóa học Unity tại codebem.com.
Nguyễn Đình Cường
0 comment