Cảnh đầu tiên: sàn 3D phẳng
Assets/
Scenes/
Materials/
đã có sẵnbài này thêm
Bắt tay vào làm thôi. Mục tiêu bài này: một cảnh 3D trống với một sàn phẳng, có đèn, và camera nhìn vào nó.
Plane là một mặt phẳng ở Y = 0. Mọi thứ khác trong game đều đứng trên nó.
Tạo dự án
- 1
Unity Hub → New project → chọn mẫu Universal 3D (bản cũ gọi là 3D (URP)). URP đẹp hơn và cũng là thứ mobile cần.
- 2
Đặt tên UnityClass. Tránh dấu cách và chữ tiếng Việt có dấu trong đường dẫn.
- 3
Mở xong thì lưu cảnh: → Assets/Scenes/Arena.unity
Thêm sàn
- 1
— một sàn 10×10 mét hiện ra.
- 2
Đổi tên thành Floor trong Hierarchy (bấm đúp chậm, hoặc F2).
- 3
Trong Inspector, đặt Position thành 0, 0, 0. Chuột phải vào dòng Transform → Reset là xong trong một cú click.
- 4
Đặt Scale thành 3, 1, 3 → sàn thành 30×30 mét. Plane scale 1 đã bằng 10 mét rồi.
Gán vật liệu cho sàn
Vật liệu là màu sắc và bề mặt của vật thể. Mesh cho vật thể hình dạng, material cho nó vẻ ngoài.
- 1
Trong Project: , đặt tên M_Floor.
- 2
Đặt màu Base Map thành xám đậm (#2B3040) và Smoothness khoảng 0.2.
- 3
Kéo M_Floor từ cửa sổ Project thả thẳng lên sàn trong Scene view.
Tuỳ chọn: texture lưới để nhìn rõ chuyển động
Nếu sàn chỉ một màu phẳng, bạn không thể biết nhân vật có đang di chuyển hay không.
Đặt Tiling của material thành 10, 10 với một texture ô vuông là nhìn ra ngay.
Camera và ánh sáng
- 1
Chọn Main Camera. Đặt Position 0, 12, -14 và Rotation 35, 0, 0 — góc nhìn chéo từ trên xuống, rất dễ quan sát.
- 2
Cách nhanh hơn: chỉnh Scene view tới góc bạn thích, chọn camera, rồi (Ctrl/Cmd+Shift+F).
- 3
Directional Light đã có sẵn trong cảnh. Xoay nó khoảng 50, -30, 0 để bóng đổ đẹp.
Tuỳ chọn: dựng sàn bằng code
using UnityEngine;
public class FloorBuilder : MonoBehaviour
{
public Material floorMaterial;
public float sizeInMeters = 30f;
void Start()
{
GameObject floor = GameObject.CreatePrimitive(PrimitiveType.Plane);
floor.name = "Floor";
floor.transform.position = Vector3.zero;
floor.transform.localScale = Vector3.one * (sizeInMeters / 10f); // plane = 10 m
if (floorMaterial != null)
floor.GetComponent<Renderer>().material = floorMaterial;
}
}