01. Thiết lập khu vực trò chơi (Setting up the game area)


Trong phần đầu tiên này, chúng ta sẽ thiết lập khu vực chơi của game. Hãy bắt đầu bằng việc nhập (import) các tài nguyên khởi tạo và tạo scene chính của trò chơi.

Nhập tài nguyên khởi tạo

Chúng tôi đã chuẩn bị sẵn một dự án Godot chứa các mô hình 3D và âm thanh sẽ được sử dụng trong suốt hướng dẫn này. Nếu bạn chưa tải về, hãy tải file nén tại đây:
🔗 Tải tài nguyên Squash the Creeps Starter (.zip)

Sau khi tải xong: 1. Giải nén file .zip vào một thư mục trên máy tính của bạn. 2. Khởi động Godot Project Manager và nhấn vào nút Import (Nhập).

  1. Trong cửa sổ hiện ra, duyệt đến thư mục 3d_squash_the_creeps_starter/ vừa giải nén và chọn file project.godot.

  1. Nhấn Import & Edit để mở dự án trong Godot Editor.

📌 Lưu ý
Nếu xuất hiện hộp thoại thông báo rằng dự án được tạo bằng phiên bản Godot cũ hơn, hãy nhấn **OK** để chuyển đổi dự án sang phiên bản Godot hiện tại của bạn.

Dự án mẫu gồm có file icon và hai thư mục chính: - art/: Chứa các tài nguyên đồ họa (hai mô hình 3D player.glb, mob.glb, các material vật liệu) và file nhạc nền. - fonts/: Chứa các font chữ được sử dụng cho giao diện.


Thiết lập khu vực sàn đấu (Playable Area)

Chúng ta sẽ tạo scene chính của trò chơi với gốc là một node cơ bản:

  1. Trong thanh Scene dock (ở góc trên bên trái), nhấn vào nút dấu cộng + (Add Child Node) hoặc dùng phím tắt Ctrl + A (Cmd + A trên macOS).
  2. Chọn loại node Node thông thường (màu trắng).
  3. Đổi tên node này thành Main (nhấn đúp chuột hoặc phím F2).
  4. Lưu scene lại bằng cách nhấn Ctrl + S (Cmd + S), đặt tên file là main.tscn.

Cấu trúc Node
Main (Node)

Thêm mặt sàn (Floor / Ground)

Để các nhân vật không bị rơi vào khoảng không vô tận, chúng ta cần tạo một sàn đấu vững chắc. Trong Godot 3D, các vật cản tĩnh (như sàn, tường, trần nhà) được tạo bằng node StaticBody3D.

Một StaticBody3D bắt buộc phải có ít nhất một node con CollisionShape3D để xác định hình dạng va chạm vật lý:

  1. Chọn node Main, nhấn Ctrl + A và thêm một node StaticBody3D. Đổi tên node này thành Ground.
  2. Chọn node Ground, nhấn Ctrl + A và thêm một node con CollisionShape3D.

Cây node của bạn sẽ trông như sau:

Cấu trúc Node
Main
└── Ground (StaticBody3D)
    └── CollisionShape3D

Lúc này, một biểu tượng cảnh báo màu vàng tam giác sẽ xuất hiện bên cạnh CollisionShape3D vì nó chưa được gán hình dạng (shape):

  1. Chọn node CollisionShape3D.
  2. Sang bảng Inspector bên phải, tìm thuộc tính Shape (đang hiển thị <empty>).
  3. Nhấp vào và chọn New BoxShape3D (Hình hộp va chạm).

  1. Nhấp trực tiếp vào biểu tượng khối hộp BoxShape3D vừa tạo để mở rộng các thuộc tính của nó.
  2. Đặt kích thước Size thành: - X: 60 - Y: 2 - Z: 60

💡 Mẹo hay
Hình hộp va chạm dạng Box rất lý tưởng cho mặt đất và các bức tường. Độ dày `2` mét trên trục Y giúp đảm bảo các vật thể di chuyển nhanh cũng không bao giờ bị "xuyên thủng" qua sàn.

Thêm phần hiển thị trực quan cho mặt sàn

Khung va chạm CollisionShape3D chỉ là vùng vật lý vô hình. Chúng ta cần thêm một khối mesh để người chơi có thể nhìn thấy mặt đất:

  1. Chọn node Ground.
  2. Nhấn Ctrl + A để thêm một node con MeshInstance3D.

  1. Trong bảng Inspector, tìm thuộc tính Mesh (đang là <empty>) và chọn New BoxMesh.

  1. Nhấp vào khối BoxMesh vừa tạo để mở rộng thuộc tính, và đặt kích thước Size khớp với hình dạng va chạm: - X: 60 - Y: 2 - Z: 60

Cây node hiện tại:

Cấu trúc Node
Main
└── Ground (StaticBody3D)
    ├── CollisionShape3D (BoxShape3D 60x2x60)
    └── MeshInstance3D (BoxMesh 60x2x60)

Bạn sẽ thấy một phiến đá màu xám rộng lớn bao phủ khung nhìn trong viewport 3D.


Căn chỉnh vị trí mặt sàn

Hiện tại mặt sàn đang nằm ở tâm tọa độ Y = 0, che mất lưới tọa độ (grid). Chúng ta sẽ hạ sàn xuống 1 mét dọc theo trục Y để mặt trên của sàn nằm chính xác tại mặt phẳng Y = 0:

  1. Bật chế độ bám lưới (Grid Snapping) bằng cách nhấn vào biểu tượng nam châm trên thanh công cụ 3D (hoặc phím tắt Y).

  1. Chọn node Ground (lưu ý: chọn đúng node cha Ground, không chọn các node con MeshInstance3D hay CollisionShape3D).
  2. Dùng chuột kéo mũi tên màu xanh lá cây (trục Y) của con trỏ gizmo xuống dưới 1 mét.

  1. Hoặc trong bảng Inspector của Ground, tìm mục Transform (như hình bên dưới):

-> Position và nhập giá trị: - X: 0 - Y: -1 - Z: 0


Thêm ánh sáng định hướng (DirectionalLight3D)

Hiện tại khung cảnh của chúng ta trông phẳng và xám xịt do thiếu ánh sáng. Chúng ta sẽ thêm một nguồn sáng mô phỏng ánh nắng mặt trời:

  1. Chọn node gốc Main.
  2. Nhấn Ctrl + A và thêm một node con DirectionalLight3D.

  1. Sử dụng công cụ xoay (phím tắt E hoặc biểu tượng xoay trên thanh công cụ) để xoay đèn quanh trục X (vòng tròn màu đỏ) nghiêng xuống dưới sân đấu.
  2. Trong bảng Inspector của DirectionalLight3D: - Mở mục Shadow và tích chọn ô Enabled để bật bóng đổ cho ánh sáng.

Bây giờ bạn sẽ thấy mặt sàn xuất hiện độ sáng tối rõ rệt với bóng đổ chân thực.


Tổng kết bài 1

Bạn đã hoàn tất việc thiết lập cơ bản cho khu vực chơi: - Nhập dự án tài nguyên mẫu vào Godot 4. - Tạo scene chính Main (main.tscn). - Tạo sàn đấu Ground bằng StaticBody3D, bao gồm khối va chạm CollisionShape3D và khối hiển thị MeshInstance3D. - Thêm nguồn sáng mặt trời DirectionalLight3D có bóng đổ.