Giải phóng sớm. Giải phóng thường xuyên. Pablo Picasso
STDIO Đối với các game hành động nhập vai, 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, giúp các bạn phát triển các dự án cá nhân.
Nội dung bài viết

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, giúp các bạn phát triển các dự án cá nhân.

 

Tiền đề bài viết

Bài viết thuộc Chương trình TỰ HỌC UNITY, sử dụng cho mục đích nghiên cứu cá nhân và training Unity.

Đối tượng hướng đến

Bài viết hướng đến đối tượng MỚI BẮT ĐẦU với Lập trình game trên Unity. Script hướng dẫn trong bài được viết bằng ngôn ngữ C# nên bạn đọc cần có kiến thức tương đối về C# để có thể đọc hiểu tốt.

 

Khái niệm ShakeIntensity và ShakeDecay

Intensity – cường độ là thuật ngữ diễn tả sức mạnh và mức độ ảnh hưởng lên một đố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 một hiện tượng nào là không có điểm dừng. Do đó, để đưa cường độ rung về 0, chúng ta sử dụng một 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, chúng ta 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. Chúng ta sẽ xây dựng hai thuộc tính này và gắn với camera chính trong game. Để tạo hiệu ứng Camera Shake, chúng ta thay đổi vị trí, góc quay của camera liên tục trong một thời gian ngắn dựa trên hai 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í, ta sử dụng một thuộc tính khá hay thuộc lớp Random insideUnitSphere. Biến này sẽ trả về một vị trí ngẫu nhiên (Vector3) trong một hình cầu có bán kính là 1. Chi tiết về lớp Random trong Unity, bạn đọc vui lòng tham khảo bài viết C# Script - Lớp Random.

Để tạo cảm giác camera rung chuyển với cường độ giảm dần, ta sử dụng thêm biến thể hiện cường độ rung (shakeIntensity), đồng thời sử dụng một 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 một phạm vi nhất định và giảm dần theo thời gian. Sau khi biến shakeIntensity giảm về 0, ta đư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 là ta đã có một hiệu ứng Camera Shake khá đẹp mắt. Tuy nhiên, tôi khuyến khích các bạn thêm một 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, chúng ta cũng sử dụng Góc quay ban đầu (originRotation), một 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. Tìm hiểu thêm tại C# Script - Lớp Quaternion.

Sau khi thực hiện xong, ta 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

ss_1

Bạn cần hỗ trợ các dự án kết nối không dây?

Quí doanh nghiệp, cá nhân cần hỗ trợ, hợp tác các dự án IoT, kết nối không dây. Vui lòng liên hệ, hoặc gọi trực tiếp 0942.111912.

  • TỪ KHÓA
  • Arduino
  • ESP32
  • ESP8266
  • Wifi
  • Bluetooth
  • Zigbee
  • Raspberry Pi
THẢO LUẬN
ĐÓNG