Bài này sẽ giới thiệu cho chúng ta về
Rigidbody – một thành phần quan trọng về vật lí trong Unity, liên quan
đến các vấn đề như khối lượng, trọng lực. Tuy trong loạt bài về Code,
nhưng bài này chúng ta không cần đến code nhé!
1. Chuẩn bị:
Trước tiên, chúng ta phải chuẩn bị trước một scene như bên dưới để khảo sát và thực hiện vấn đề này:
Hướng dẫn tạo scene:
Ở những bài đầu tôi sẽ trình bày sơ
cách dựng các scene để thực nghiệm, nhưng về sau mọi người phải tự làm
lấy, đây đều là những thứ cơ bản mà chỉ cần vọc một chút là làm được
ngay, chủ yếu chỉ là kéo thả, không có gì khỏ cả! 
Các đối tượng chúng ta cần là 1 Cube
đại diện cho vật mà chúng ta sẽ áp dụng Rigidbody cho nó, một cube được
scale thành hình dạng của một cái floor để “hứng” vật. Một Camera,
không cần giải thích cũng biết là để làm gì
, và cuối cùng là 1 Directional Light để “thấy đường”.
- Để tạo Cube thì vào menu: Game Object -> Create Other -> Cube
- Sau khi tạo thì chúng ta chọn, set
Transform về (0,0,0) để tiện điều chỉnh. Dùng các công cụ move, scale
(xem tài liệu đã cung cấp ở kỳ 1) để di chuyển và scale các Cube này sao
cho như trong hình.
- Camera: Mặt định khi tạo scene thì
Unity cung cấp sẵn cho chúng ta một Main camera, với bày này thì chúng
ta không cần làm gì thêm ngoài việc điều chỉnh Rotation cho Camera có
thể quan sát được đại cảnh mà chúng ta đang cần xem!
- Directional Light: Game Object -> Create Other -> Directional Light. Điều chỉnh Position và Roration cho thích hợp (toàn cảnh đều sáng rõ
2. Rigidbody và Collider:
Vậy là chúng ta đã chuẩn bị xong
scene. Bây giờ chúng ta thử nhấn Play để test! Kết quả, mọi thứ vẫn đâu
vào đấy! Sao cái Cube không rơi nhỉ? Nó đang ở trên không mà?
Lý do là nó chưa được gán các thành
phần vật lý cần thiết vào. Bây giờ hãy chọn Cube, vào menu: Component
-> Physics -> Rigidbody. Nhìn qua cửa sổ Inspector, chúng ta thấy
thành phần Rigidbody đã được thêm vào đối tượng Cube. Khoan hãy nói
nhiều về nó, hãy nhấn Play để xem điều gì xảy ra!
Cube rơi, lý do vì sao thì mọi người đã biết, chính là component Rigidbody đã gây ra điều đó.
Ảnh. Box Collider và Rigidbody
Bây giờ hãy chọn và quan sát Cube ở
của sổ Inspector, chúng ta thấy một Component có tên là Box Collider,
hãy thử bỏ check nó và nhấn play, chúng ta sẽ thấy đối tượng Cube rơi
xuyên qua Floor và cứ thế rơi mãi! Tương tự vậy ở Floor cũng có một Box
Collider, bỏ check nó chúng ta cũng sẽ thấy kết quả tương tự khi test.
Lý do là vì Rigidbody quy định khối lượng và áp dụng trọng lực vào
Object, nhưng không kiểm soát về sự va chạm của Object với vật khác.
Thay đó đó Box Collider sẽ quyết định việc này.
Trong Unity Collider sẽ được biểu
thị bởi những đường kẻ màu xanh bao quanh vật, có rất nhiều loại
Collider với những hình dáng khác nhau từ hình hộp (Box Collider),
hìnhviên nang (Capsule Collider), hình tròn (Sphere Collider), theo hình
dáng của Mesh (Mesh Collider), … Các thành phần này khi gán vào đối
tượng sẽ đảm nhận chức năng phát hiện và xử va chạm cho đối tượng đó.
Trong Unity API cũng có đầy đủ các Function và Class giành cho việc xử
lý trên các Component dạng này (chúng ta sẽ khảo sát chúng ở bài tiếp
theo).
Ảnh. Một số Collider trong Unity
Collider không tự nhiên có, đối với
những đối tượng cơ bản như Cube, Plant, Sphere, Cylinder… là những đối
tượng built-in của Unity, khi tạo ra, chúng được Unity gán sẵn các
Collider tương ứng, nhưng đối với một mô hình được nhập (Import) từ bên
ngoài, chúng ta phải tự gán cho chúng thông qua các lựa chọn ở menu:
Component -> Physics. Tùy vào hình dáng, kích thước và vai trò của
Object trong game mà chúng ta có những lựa chọn hay kết hợp các lựa chọn
sao cho phù hợp. Và không phải đối tượng nào cũng buộc phải có
Collider, như đã đề cập thì Colldier liên quan đến va chạm, liên quan
đến vật lí, đây là những thành phần sẽ ảnh hương rất nhiều đến FPS của
game, cụ thể là càng có nhiều Collider thì game sẽ càng nặng, nên chúng
ta phải lưu ý chỉ nên attach Collider vào những đối tượng mà chúng ta
muốn chúng có thể tương tác, đồng thời nên hạn chế sử dụng Mesh Collider
– loại Collider dễ gây nặng game nhất.
Quay về với vấn đề Rigidbody, để rõ hơn và chính xác hơn, mời bạn đọc qua Docs sau:
Chúng ta có thể lưu ý những thông số cơ bản sau:
- Mass: Khối lượng
- Drag và Angular Drag: Độ ma sát khi di chuyển và khi xoay
- Use gravity (boolean): Vật có chịu
tác động của trọng lực không? Hãy thử bỏ check giá trị này, chúng ta sẽ
thấy đối tượng Cube không rơi, cho dù chúng ta có cho khối lượng nó lớn
đến mức nào cũng thế.
Rigidbody còn là một Class trong
Unity API, Class này sẽ cung cấp cho chúng ta chủ yếu các Function về
lực, vận tốc, gia tốc để chúng ta xử lí các vấn đề về vận tốc, va chạm,
các vụ nổ, … trong game. Hiện tại chúng ta chỉ khảo sát sơ qua để biết
về nó, còn về ứng dụng cụ thể được đến như thế nào thì hãy chờ đợi những
bài về sau, nếu được, hãy thiết kế ngay cho mình mộ ý tưởng và thử
nghiệm nó, cần thiết hãy post comment lên đây, nếu được tôi sẽ giúp đỡ! 
3. Physic Meterials:
Ảnh. Physic Material
Unity mang đến cho chúng ta một khái
niệm là “Physic material – vật liệu vật lý” cho phép chúng ta quy định
Object được làm từ chất liệu gì, ví dụ như cao su, gỗ, kim loại, …
Physic material gắn liền với Collider hay cụ thể nó là một giá trị của
Component Collider. Mặc định Unity cung cấp chúng ta một vài built-in
Physic material, tuy nhiên chúng ta hoàn toàn có thể tạo thêm bất kỳ cái
nào mà chúng ta muốn thông qua hỗ trợ của Unity. Ở đây tôi sẽ không đề
cập làm thế nào để tạo ra Physic material, mà chỉ muốn chúng ta lưu ý
đến tác dụng của chúng, khi gán Physic material vào Object, các hiện
tượng vật lý diễn ra với đối tượng sẽ tuân theo vật liệu đó, ví dụ như
khi gán Bouncy cho Cube, khi rơi và va chạm với Floor, Cube sẽ tâng lên
như một quả bóng.
Lưu ý: Để Import Physic material vào
dự án làm như sau: Click phải ở cửa sổ Project -> Import Package
-> Physic material hoặc chọn tương tự ở menu Asset.