- vừa được xem lúc

Unity Basic (1/5): Các khái niệm cơ bản: GameObject, Component, Scene, Prefab… trong Unity3D

0 0 9

Người đăng: Phuong Le

Theo Viblo Asia

Phuongne, Th3 07, 2021


Unity là gì?

Unity3D là một hệ thống phát triển game đa nền tảng nổi tiếng nhất hiện nay. Nó bao gồm công cụ phát triển game (game engine) và tích hợp môi trường phát triển (IDE).

Game engine này có thể phát triển game ở các nền tảng như PCs, consoles, android, ios thậm chí có thể deploy cho web,…

Ở trong bài này, chúng ta sẽ nói tới các thành phần cơ bản của Unity. Đây là một hệ thống thức tạp, mình không nói quá nhiều tính năng của nó, bạn có thể lên trang Unity Learn để học thêm nhé.

Các khái niệm cơ bản trong Unity

Đây là các cấu trúc nền tảng làm nên Unity, các khái niệm này cũng có thể áp dụng cho hầu hết các game engies khác phổ biến hiện nay.

Với mỗi hệ thống đều có các thành phần nhỏ tạo nên nó mà chúng ta sẽ học ở các bài sau.

1. Project

Khái niệm Project bao trùm toàn bộ các thành phần làm nên một game: các models, assets, scripts, scenes,…. Projects được cấu trúc phân tầng tương tự với cấu trúc file và folder trong máy bạn.

Project Folder Tree

2. Scenes

Một scene chứa các vật thể trong game (game objects) tương tác với thế giới, trong đó có player của chúng ta.

Một game có thể chứa nhiều scenes như ở hình trên, ví dụ như bạn có game đi cảnh nhiều màn, mỗi màn chơi sẽ được lưu ở một scene khác nhau.

3. Packages

Một package là tập hợp các game objects, assets và các file meta-data liên quan. Bạn có thể nghĩ package tương tự như một một package thư viện trong Java vậy.

Chúng là các object liên quan với nhau: models, scripts, materials, etc,…:

  • Một tập các shaders để hỗ trợ hiệu ứng hình ảnh.
  • Các prefabs hiệu ứng particle systems.
  • Các models xe cho game đua xe.
  • Các models cây và vật cản,…

Unity cung cấp một số “standard package” miễn phí trên Asset Store, bạn có thể import vào trong project đang phát triển.

4. Prefab

Prefab là một gameObject được “cache” lại nhằm tái sử dụng, thường được dùng để tạo nhiều instances của một object nào đó.

Giả sử bạn tạo một gameObject cần ghép từ 5 bộ phận, sẽ rất mất thời gian nếu mỗi lần tạo gameObject đó bạn phải ngồi ghép lại 5 bộ phận đó. Hãy biến nó thành Prefab và tạo ra nhiều bản sao.

Prefabs thường được sử dụng theo 2 cách:

  • Thiết kế level cho game, bạn có thể tạo một cái cột đèn và biến nó thành prefab, tạo ra nhiều bản sao và đặt nó khắp mọi nơi trong map. Nếu bạn muốn đổi độ sáng của toàn bộ cột đèn, thay vì đổi từng cái một, bạn chỉ cần đổi độ sáng của “cột đèn prefab”
  • Cách dùng thứ 2: tạo GameObject ngay trong màn chơi, giống như Flappy Bird chẳng hạn, các cây cột màu xanh hiện ra liên tục, mỗi lần hiện như vậy tức là bạn đang “tạo bản sao” của cây cột.

Flappy Bird

5. Game Objects

Các Game Objects là toàn bộ các thứ trong Scene, có thể nhìn thấy hoặc không nhìn thấy.

Không chỉ các objects thực như bàn, ghế, rìu, kiếm mà còn các objects hỗ trợ như audio sources, cameras, light sources (nguồn sáng),… Các game object rỗng rất hữu dụng, đặc biệt là trong hệ thống cấp bậc parent-child (bạn có thể xem trong Hierachy tab).

Tất cả các game objects (kể cả game objects rỗng) đều có vị trí và độ xoay trong thế giới game, nó có thể di chuyển, xoay và scale. Lưu ý rằng các yếu tố này sẽ chịu ảnh hưởng bởi cấp bậc như hình trên.

Bạn có thể tắt (disabled) hoặc bật (enabled) gameObject tùy ý, các thành phần cấu tạo nên một GameObject là Components.

6. Components

Như mình đã đề cập ở trên, mỗi game object đều được đinh nghĩa bởi các tập hợp các components. Tập hợp các components phải liên quan tới thuộc tính tự nhiên của object đó

Như nguồn sáng chẳng hạn, các component của nó phải định nghĩa được màu sắc, độ sáng, tương phản,… của nguồn sáng. Một camera object phải có các thuộc tính như cách tính toán phép chiếu 2D, 3D, vùng quay gần nhất, xa nhất,…

Chúng ta có thể xem một ví dụ về component:

  • Mesh Filter và Mesh Renderer là những components định nghĩa các bề mặt của khối vật thể 3D.
  • Rigidbody component làm nhiệm vụ định nghĩa cách mà một object của thể di chuyển một cách “vật lý” trong Game như cân nặng, sức cản không khí, trọng lượng,…
  • Collider component định nghĩa một khối bao quanh GameObject để xử lý va chạm với các GameObject cũng có Collider khác trong scene.
  • Vị trí, độ xoay và scale của một GameObject được định nghĩa bởi component có tên là Transform.

Bạn có thể điều chỉnh các thông số của component ở ngay trên Unity Editor, trong cửa sổ Inspector.

7. Assets

Một asset là bất kỳ tài nguyên nào: âm thanh, texture (hình ảnh), model (vật thể 3D)… mà bạn cần để cấu thành một GameObject.

Assets

8. Scripts

Script là mã nguồn (code) của chúng ta, có thể để định nghĩa một hành vi nào đó cho game objects, cũng có thể định nghĩa một chức năng nào đó, có rất nhiều loại classes, phụ thuộc và hành vi mà nó điều khiển.

Tương tác trong game programming là loại event-driven, một script điển hình sẽ định nghĩa các functions dùng để phản ứng với các sự kiện trong game. Như hàm va chạm sẽ được gọi nếu 2 object va chạm với nhau, hàm tăng xu sẽ gọi nếu player nhặt được coin trong game,…

Các functions của script có thể là: di chuyển một game object, tạo/ xóa các game objects, chạy function của game objects khác… Sau đó trả lại quyền điều khiển cho hệ thống Unity Engine.

Claims

Bài viết được đăng vào 2021, chỉ có giá trị tham khảo các bạn nhé 😉

Bài tiếp theo: Giới thiệu Unity Editor

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tạo setting game trên inspector.

. Chào các bạn,. Hôm nay chúng ta sẽ cùng tạo 1 setting/config cho game trên inspector nhé. Câu trả lời đó là khi chúng ta cần 1 cái gì đó để thao tác trong editor, trực quan nhất, không cần sửa code để cập nhật dữ liệu.... Và hẳn các bạn cũng từng làm việc với những value trên inspector rồi, ví dụ

0 0 22

- vừa được xem lúc

Hướng dẫn đưa nhân vật từ Mixamo vào demo.

. Chào các bạn. Bài này chúng ta chỉ tìm hiểu cách để lấy model, animation về, setting sao cho nó chạy được trong Unity để làm demo là ngon rồi nhé . Bước 1: Đăng nhập. Hãy tạo tài khoản nếu các bạn chưa có.

0 0 25

- vừa được xem lúc

Cơ bản về Rigidbody trong Unity3D

Phuong Le at 31-10-2019 - phuongne. Bài viết từ 2019 nên chỉ có giá trị tham khảo bạn nhé . . Rigidbody là gì.

0 0 18

- vừa được xem lúc

Một số folder đặc biệt trong Unity

Phuong Le 2019 - phuongne. Bài viết từ 2019 nên chỉ có giá trị tham khảo bạn nhé .

0 0 15

- vừa được xem lúc

Coroutine trong Unity là gì? Có liên quan tới Threads hay không?

Phuongne, Th11 17, 2019. Sơ qua một chút về Coroutine và StartCoroutine(.

0 0 11

- vừa được xem lúc

So sánh nhẹ Coroutine và Invoke

Phuongne - 31-10-2019. . Roài, đây sẽ là một bài viết ngắn nên mình đi vào chi tiết luôn, khởi mở đầu giới thiệu dài dòng nhá anh em. Coroutine với Invoke là gì.

0 0 17