Search…

Hiệu Ứng Camera Shake trong Unity

29/09/20203 min read
Hướng dẫn xây dựng 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
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024