U
tab 04Thế giới & Vòng lặp game7 bài — chạm để mở
01 / 07 · 10 phút
Thế giới & Vòng lặp game

Địa hình và cảnh quan

dự án của bạn tới lúc này

Assets/

Scenes/

Arena.unity
FloorBlocks (parent)KnightTerrain

Scripts/

TerrainPlacer.cs

Prefabs/

Knight prefabEnemy.prefab

Materials/

terrain layers

all your scripts

đã có sẵnbài này thêm

Arena.unity vẫn chỉ là một cái hộp xám có mấy nhân vật của bạn bên trong. Tab này dựng thế giới bao quanh nó — quanh chính sân đấu bạn đang có, chứ không thay thế nó.

  1. 1

    Mở Assets/Scenes/Arena.unity — đúng file bạn dùng từ tab 01. Đừng tạo cảnh mới: sàn, khối, các nhân vật, kẻ địch và bộ camera đều giữ nguyên.

  2. 2

    Bấm Play trước khi đụng vào bất cứ thứ gì. Knight phải đi, nhảy và tung chiêu y như lúc kết thúc tab 03.

  3. 3

    Đừng dựng lại bất cứ thứ gì. Nếu bấm Play mà chưa đi lại được thì sửa cho xong rồi hãy đắp quả đồi đầu tiên.

Terrain là một lưới duy nhất được tối ưu, điều khiển bởi bản đồ độ cao. Bạn vẽ độ cao bằng cọ thay vì tự dựng từng quả đồi.

sơ đồ động

Cọ nâng bản đồ độ cao lên; lưới bên dưới đi theo.

Tạo địa hình

  1. 1

    GameObject▸3D Object▸Terrain. Một tấm phẳng 1000×1000 m xuất hiện ở gốc toạ độ.

  2. 2

    Kích thước đó quá lớn cho một sân đấu. Vào bánh răng Terrain Settings, đặt Terrain Width và Length là 200.

  3. 3

    Đặt Heightmap Resolution 513 và Detail Resolution 512 — đủ cho màn nhỏ mà nhẹ hơn nhiều.

  4. 4

    Dời terrain tới -100, -0.05, -100. Tâm của nó nằm ngay dưới sân đấu, còn mặt đất thấp hơn sàn tab 01 một chút, để hai bề mặt không bao giờ nhấp nháy đè lên nhau.

Năm công cụ trên thanh Terrain

  • Raise or Lower Terrain — click trái nâng lên, Shift + click trái hạ xuống. Bắt đầu bằng cọ to, mềm, độ đậm thấp.

  • Set Height — click để san phẳng về đúng một độ cao. Đây là cách tạo mặt bằng để xây dựng.

  • Smooth Height — làm phẳng những chỗ lởm chởm do cọ để lại. Dùng liên tục.

  • Paint Texture — các lớp vật liệu nền: cỏ, đá, cát, đường mòn.

  • Paint Trees và Paint Details — cây là prefab, còn detail là cỏ dạng ảnh đứng.

Tô các lớp nền

  1. 1

    Paint Texture → Edit Terrain Layers → Create Layer. Lớp đầu tiên phủ toàn bộ terrain.

  2. 2

    Đặt Tiling Size của mỗi lớp 8–15 mét. Mặc định 2 làm hoa văn lặp lộ rõ.

  3. 3

    Thêm lớp đá và chỉ tô ở sườn dốc; thêm lớp đường mòn với cọ nhỏ, cứng.

  4. 4

    Trên mobile tối đa bốn lớp. Mỗi lớp là thêm một lần lấy mẫu texture cho từng điểm ảnh.

Cây, cỏ và gió

  • Cây trồng bằng công cụ Terrain tự chuyển sang dạng ảnh phẳng ở xa — nhẹ hơn nhiều so với đặt prefab bằng tay.

  • Đặt Tree Distance khoảng 120 và Billboard Start khoảng 60 trong Terrain Settings.

  • Cỏ là Detail Mesh hoặc texture Grass. Detail Distance 40 trên máy tính, 20 hoặc thấp hơn trên mobile.

  • Một Wind Zone (GameObject > 3D Object > Wind Zone) làm cây cỏ đung đưa. Một cái là đủ cho cả màn chơi.

Đọc độ cao terrain bằng code

đặt vật thể chạm đất
using UnityEngine;

public class TerrainPlacer : MonoBehaviour
{
    [SerializeField] private GameObject prefab;
    [SerializeField] private int count = 60;
    [SerializeField] private float area = 90f;

    void Start()
    {
        Terrain terrain = Terrain.activeTerrain;

        for (int i = 0; i < count; i++)
        {
            float x = Random.Range(-area, area);
            float z = Random.Range(-area, area);

            //độ cao mặt đất tại vị trí đó
            float y = terrain.SampleHeight(new Vector3(x, 0f, z)) + terrain.transform.position.y;

            Quaternion rot = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f);
            Instantiate(prefab, new Vector3(x, y, z), rot, transform);
        }
    }
}