Header ads

Header ads
» » » PHÁT TRIỂN GAME VỚI UNITY Bài 1: Mass / Gravity

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ả! 04

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ì 04, 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õWink.

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 đỡ! 04

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.

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn