STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ

    Hiệu Ứng Camera Shake trong Unity

    Hướng dẫn xây dựng hiệu ứng Camera Shake trong Unity
    Rye Nguyen

    Rye Nguyen

    06/08/2015 29/09/2020 3 phút đọc
    Hiệu Ứng Camera Shake trong Unity

    Giới thiệu

    Đối với các game hành động nhập vai, việc xây dựng các hiệu ứng âm thanh hấp dẫn, hiệu ứng về ánh sáng, sự kịch tính, yếu tố bất ngờ, ... đóng vai trò không nhỏ trong sự thành công của game. Bài viết sẽ hướng dẫn xây dựng hiệu ứng Camera Shake, còn gọi là hiệu ứng rung màn hình.

    Khái niệm ShakeIntensity và ShakeDecay

    Intensity – thuật ngữ diễn tả sức mạnh và mức độ ảnh hưởng lên 1 đối tượng. ShakeIntensity cũng được diễn giải tương tự. Giá trị của nó càng lớn, cường độ rung càng mạnh, mức độ dịch chuyển mà người xem cảm nhận được sẽ càng cao.

    Mặt khác, không hiện tượng nào là không có điểm dừng. Do đó, để đưa cường độ rung về 0, sử dụng khái niệm khác là ShakeDecay – độ phân rã của sự rung chuyển. Sau mỗi khoảng thời gian sẽ giảm dần giá trị của ShakeIntensity đến khi nó trở về 0, hiện tượng rung sẽ dừng lại.

    shakeIntensity -= shakeDecay;

    ShakeIntensity và ShakeDecay không có sẵn trong Unity. Xây dựng 2 thuộc tính này và gắn với camera chính trong game. Để tạo hiệu ứng Camera Shake, thay đổi vị trí, góc quay của camera liên tục trong 1 thời gian ngắn dựa trên 2 thuộc tính trên. Sau thời gian này, camera được trả lại trạng thái ban đầu.

    Sử dụng các yếu tố ngẫu nhiên để tạo hiệu ứng

    Ngẫu nhiên vị trí camera

    Để thay đổi ngẫu nhiên vị trí, sử dụng 1 thuộc tính khá hay thuộc lớp RandominsideUnitSphere. Biến này sẽ trả về 1 vị trí ngẫu nhiên (Vector3) trong 1 hình cầu có bán kính là 1. Để tạo cảm giác camera rung chuyển với cường độ giảm dần, sử dụng thêm biến thể hiện cường độ rung (shakeIntensity), đồng thời sử dụng 1 biến lưu vị trí ban đầu của camera. Mã giả như sau:

    Vector3 originPosition;
    Camera.position = originPosition + Random.insideUnitSphere * shakeIntensity;

    Hiện thực theo cách này, camera sẽ có vị trí ngẫu nhiên trong 1 phạm vi nhất định và giảm dần theo thời gian. Sau khi biến shakeIntensity giảm về 0, đưa vị trí camera về ban đầu:

    Camera.position = originPosition;

    Ngẫu nhiên góc quay của camera

    Hiện thực ngẫu nhiên vị trí của camera đã có 1 hiệu ứng Camera Shake khá đẹp mắt. Tuy nhiên, khuyến khích thêm 1 yếu tố ngẫu nhiên nữa là góc quay của camera.

    Tương tự đối với việc ngẫu nhiên vị trí của camera, sử dụng Góc quay ban đầu (originRotation), 1 yếu tố ngẫu nhiên và shakeIntensity:

    Camera.rotation = new Quaternion(
    									originRotation.x + Random.Range(-shakeIntensity, shakeIntensity) * 0.1f,
    									originRotation.y + Random.Range(-shakeIntensity, shakeIntensity) * 0.1f,
    									originRotation.z + Random.Range(-shakeIntensity, shakeIntensity) * 0.1f,
    									originRotation.w + Random.Range(-shakeIntensity, shakeIntensity) * 0.1f
    								);

    Góc quay được biểu diễn dưới dạng Quaternion.

    Sau khi thực hiện xong, trả góc quay của camera về giá trị sao lưu ban đầu. Mã giả như sau:

    Camera.rotation = Vector3(0, 0, 0);
    

    Download Demo

    STDIO_UnityCameraShake

    camera shake unity
    0 Bình luận
    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021