Unity: thêm âm thanh và hiệu ứng hạt để game có "hồn" hơn

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Hai game có cùng luật chơi nhưng game có tiếng "ting" khi nhặt xu và tia sáng bung ra khi trúng đích luôn cho cảm giác sướng hơn hẳn. Bài này hướng dẫn thêm âm thanh bằng AudioSource và hiệu ứng hạt bằng Particle System trong Unity, kèm cách quản lý gọn gàng.

Âm thanh trong Unity hoạt động thế nào

Có ba thành phần chính. AudioClip là tệp âm thanh (wav, mp3, ogg). AudioSource là bộ phát, gắn vào đối tượng để phát clip. AudioListener là "đôi tai", thường nằm sẵn trên Main Camera; mỗi scene chỉ nên có một. Để dùng, hãy kéo tệp âm thanh vào thư mục Assets, tốt nhất là tạo thư mục riêng Audio.

Về nguồn âm thanh, hãy dùng tệp do bạn tự tạo hoặc có giấy phép cho phép dùng, ví dụ các thư viện âm thanh miễn phí bản quyền. Đừng lấy nhạc game thương mại làm tài nguyên cho game của mình.

Bước 1: Phát âm thanh nền

  1. Tạo GameObject trống tên Music, thêm component Audio Source.
  2. Kéo clip nhạc nền vào ô AudioClip, bật Loop và Play On Awake.
  3. Chỉnh Volume khoảng 0.3 đến 0.5 để nhạc nền không lấn át tiếng hiệu ứng.

Bước 2: Âm thanh hiệu ứng bằng script

Với tiếng ngắn như nhặt xu, nhảy, va chạm, ta cần phát nhiều lần chồng nhau. Hàm PlayOneShot của AudioSource phù hợp, vì nó không cắt tiếng đang phát. Tạo một bộ quản lý âm thanh dùng chung:

using UnityEngine;

public class AudioManager : MonoBehaviour
{
    public static AudioManager Instance { get; private set; }

    [SerializeField] private AudioSource sfxSource;
    [SerializeField] private AudioClip coinClip;
    [SerializeField] private AudioClip jumpClip;
    [SerializeField] private AudioClip hitClip;

    void Awake()
    {
        if (Instance != null && Instance != this)
        {
            Destroy(gameObject);
            return;
        }
        Instance = this;
    }

    public void PlayCoin() => Play(coinClip);
    public void PlayJump() => Play(jumpClip);
    public void PlayHit() => Play(hitClip);

    private void Play(AudioClip clip, float volume = 1f)
    {
        if (clip == null) return;

        // đổi cao độ nhẹ để tiếng lặp lại bớt nhàm
        sfxSource.pitch = Random.Range(0.95f, 1.05f);
        sfxSource.PlayOneShot(clip, volume);
    }
}

Mẹo hay: thay đổi nhẹ pitch ngẫu nhiên giúp tiếng lặp lại nghe tự nhiên hơn. Gọi âm thanh từ nơi khác rất đơn giản, ví dụ trong script đồng xu: AudioManager.Instance.PlayCoin(); trước khi hủy đồng xu. Vì âm thanh phát từ bộ quản lý chứ không phải từ đồng xu đang bị hủy, tiếng sẽ không bị cắt giữa chừng.

Bước 3: Hiệu ứng hạt

  1. Chuột phải Hierarchy chọn Effects > Particle System. Đặt tên CoinBurst.
  2. Trong Inspector, tắt Looping, đặt Duration khoảng 0.5, Start Lifetime 0.4 đến 0.7, Start Speed 2 đến 4, Start Size 0.1 đến 0.2 và chọn màu vàng.
  3. Mở mục Emission, đặt Rate over Time bằng 0 và thêm một Burst tại thời điểm 0 với Count khoảng 12 để hạt bung ra cùng lúc.
  4. Mở mục Shape, chọn dạng Circle hoặc Sphere cho hạt tỏa đều.
  5. Bật Color over Lifetime và làm mờ dần về cuối (giảm Alpha), bật Size over Lifetime để hạt nhỏ dần.
  6. Trong phần chính, đặt Stop Action thành Destroy để hiệu ứng tự hủy sau khi chạy xong.
  7. Kéo vào thư mục Project để tạo prefab, rồi xóa khỏi scene.

Bước 4: Sinh hiệu ứng khi nhặt xu

using UnityEngine;

public class Coin : MonoBehaviour
{
    [SerializeField] private int value = 1;
    [SerializeField] private GameObject burstPrefab;

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (!other.CompareTag("Player")) return;

        ScoreManager.Instance.AddScore(value);
        AudioManager.Instance.PlayCoin();

        if (burstPrefab != null)
        {
            Instantiate(burstPrefab, transform.position, Quaternion.identity);
        }

        Destroy(gameObject);
    }
}

Đoạn này giả định bạn đã có ScoreManager từ bài thu thập đồng xu. Nếu chưa, có thể bỏ dòng cộng điểm để thử riêng âm thanh và hạt. Với game 2D, nếu hạt bị nằm sau nền, hãy chỉnh Order in Layer trong mục Renderer của Particle System cho cao hơn.

Chỉnh âm lượng bằng Audio Mixer

Khi game lớn dần, hãy tạo Audio Mixer (Window > Audio > Audio Mixer) với nhóm Music và SFX riêng, rồi gán đầu ra của các AudioSource vào nhóm tương ứng. Bạn có thể phơi bày tham số âm lượng để làm thanh trượt cài đặt, và nhớ chuyển giá trị thanh trượt sang thang decibel (dạng logarit) cho cảm giác âm lượng tự nhiên.

Cân nhắc hiệu năng và trải nghiệm

  • Nén clip phù hợp: nhạc dài nên chọn chế độ streaming, tiếng ngắn có thể nạp sẵn vào bộ nhớ.
  • Đừng để hiệu ứng hạt quá nhiều trên di động, giữ số hạt vừa phải.
  • Âm thanh phản hồi nên ngắn, rõ, không gây mệt tai khi nghe lặp lại hàng trăm lần.
  • Cho phép tắt tiếng, vì người chơi có thể đang ở nơi công cộng.

Kết luận

Âm thanh và hạt là hai cách rẻ nhất để nâng cảm giác chơi. Một bộ quản lý âm thanh dùng chung, vài hạt vàng bung ra và tiếng hơi khác nhau mỗi lần là đủ để đồng xu của bạn "đã tay" hơn nhiều.

Nếu muốn học làm game có chiều sâu từ thiết kế đến hoàn thiện, hãy khám phá các khóa học tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment