Đăng ký
Cộng đồng phát triển game Việt - kết nối đam mê !

PHÁT TRIỂN GAME VỚI UNITY, TẠI SAO KHÔNG? – Kỳ 2 : Coding for beginers – Bài 1:  Mass / Gravity


Giới thiệu:


Vừa qua chúng ta đã bước đầu làm quen với Unity ở kì 1. Hôm nay chúng ta sẽ qua một kỳ mới, kỳ này sẽ bao bồm nhiều bài nhỏ xoay quanh các vấn đề code cơ bản. Như đã giới thiệu từ trước, series bài viết được viết dưới góc nhìn của 1 Designer biết code, đồng thời kỳ này chỉ toàn “cơ bản đơn giản”, cho nên dù là Designer hay là Coder gì mới tập tành với nghề thì cũng đừng phân vân, cứ đọc, rồi bạn sẽ làm được!


Tiện thể nói luôn, kỳ này dựa theo loạt video clips của Unity3DStudent.com, cho nên bạn có thể tham khảo trực tiếp những video từ nguồn đó. Thật ra thì những bài này đơn giản, nhưng đủ gọi là hay cho những Beginer, nếu tutorial bằng Video luôn thì sẽ rất ổn, nhưng mọi người thông cảm, điều kiện truy cập Internet của tôi có hạn chế (3G) nên không thể làm Video được! 04


À còn nữa, cuối kỳ này chúng ta sẽ thử làm vài thử thách nhỏ mà tôi nêu ra, có thưởng nha! Khoảng vài cục kẹo mút gửi chuyển phát nhanh nhé! Wink)


Các bài đã viết:


Phát triển game với Unity, tại sao không? – Kỳ 1 : Xin chào 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:


http://docs.unity3d.com/Documentation/Components/c...


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.


 



 


Bài hôm nay kết thúc ở đây, ngày mai chúng ta sẽ đi sâu hơn về va chạm và bước đầu tìm hiểu về Input nhé! Chào mọi người!


 


Bài tiếp theo: PHÁT TRIỂN GAME VỚI UNITY, TẠI SAO KHÔNG? – Kỳ 2 : Coding for beginers – Bài 2: Collision, Trigger, Input

Đặng Minh Dự
Admin
Từ từ! Qua nay mình bận chuẩn bị cho cuộc phỏng vấn và mất cả ngày hôm nay đi đi lại lại, mai sẽ có tiếp
  • tháng 8 24, 2012
  • ·
  • Thích
  • ·
Nguyen Van Toan
Bài Anh viết dễ hiểu quá,
  • tháng 10 30, 2012
  • ·
  • Thích
  • ·
Neivy Nguyễn
Làm ko đc ^^, ko ô có check ở Box Collider, mà nó cũng ko rơi xuyên qua đc :d, sao để mình tô màu cho cube. mình mới tìm hiểu nên ko biết ^^ Mong mọi người help dùm, thanks!
  • tháng 1 2, 2013
  • ·
  • Thích
  • ·
Đặng Minh Dự
Admin
"sao để mình tô màu cho cube" => Xuyến cần có kiến thức về 3d trước.
Mình nói sơ: về CƠ BẢN để object có màu sắc thì nó phụ thuộc vào vật liệu (material, còn phụ thuộc nhiều cái khác, bản thân trong materila còn bao gồm shader (cũng ảnh hưởng) nhưng cơ bản là material), Xuyến cần tạo 1 material rồi a...
  • tháng 1 2, 2013
  • ·
  • Thích
  • ·
Neivy Nguyễn
Ok rồi, Thanks bạn
  • tháng 1 2, 2013
  • ·
  • Thích
  • ·
Lam Nhat Tu
thank you!
  • tháng 6 18, 2013
  • ·
  • Thích
  • ·
Chí Phèo
cho hỏi có bài nào hướng dẫn cách tạo object , sử dụng camera trong unity ko nhỉ
  • tháng 7 8, 2013
  • ·
  • Thích
  • ·
Long
Anh cho em hỏi là sao Unity lại mặc định là khi add thêm character control trong khi trước đó có một cái collider (đi kèm với rigidbody) rồi thì thường nó đưa ra 1 trong các lựa chọn là thay thế (replace) ạ? Vì nếu không có ích thì họ đưa ra bảng thông báo như thế để làm gì.
  • tháng 10 17, 2013
  • ·
  • Thích
  • ·
Đặng Minh Dự
Admin
Do bản thân Character Controller là một physic component, đảm nhận các vai trò tương tự như các collider khác rồi.
  • tháng 10 17, 2013
  • ·
  • Thích
  • ·
Long
Nhưng khi em replace một cái capsual collider bằng cái Character Controller thì cái object của em rớt xuyên qua sàn (cả cái cube và cái terrain), sau đó em phải add thêm một cái capsual collider nữa thì object nó mới đứng được trên sàn, vậy thì chính xác là cái Character Controller nó có tác dụng gì...
  • tháng 10 17, 2013
  • ·
  • Thích
  • ·
Đặng Minh Dự
Admin
Xem thử cái này đi bạn:
http://docs.unity3d.com/Documentation/Components/c...
Hints

Try adjusting your Skin Width if you find your character getting stuck frequently.
The Character Controller can affect objects using physics if you write your own scripts.
The Character Controller can not be ...
  • tháng 10 20, 2013
  • ·
  • Thích
  • ·
Long
À và còn một vấn đề nữa là khi chọn add capsual collider thì object của em nó cứ nảy tưng tưng cứ như chọn phải material bouncy mặc dù em đã check rất kỹ là không chọn một cái material nào cả (trên cả cái cube lẫn cái object).
  • tháng 10 17, 2013
  • ·
  • Thích
  • ·
Captcha Challenge