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

Ánh sáng và bầu trời

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

Assets/

Scenes/

Arena.unity

TerrainMixed Directional Light

Scripts/

DayNight.cs

thiết lập dự án

baked lightmapsskybox + fog

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

Địa hình của bạn đang được chiếu bằng đúng cái Directional Light bạn đã xoay hồi tab 01. Knight đứng trên đó chưa có cái bóng nào ra hồn. Bài này sửa cả hai.

Ánh sáng quyết định cảm giác của game hơn cả model. Mà phần lớn việc đó do một cái Directional Light lo.

sơ đồ động

Xoay mặt trời là cả không khí, hướng bóng đổ và màu trời đổi theo.

Ba loại đèn bạn sẽ dùng

  • Directional — mặt trời. Vị trí không quan trọng, chỉ góc xoay có ý nghĩa. Mỗi cảnh một cái.

  • Point — bóng đèn, toả ra mọi hướng. Đuốc, đèn bàn, quả cầu phép.

  • Spot — hình nón. Đèn pin, đèn đường, đèn sân khấu.

Thiết lập mặt trời hợp lý

  1. 1

    Rotation 50, -30, 0 — đủ cao để sáng mặt, đủ nghiêng để bóng đổ nhìn ra.

  2. 2

    Intensity khoảng 1.0–1.3, màu trắng hơi ấm (#FFF4E0).

  3. 3

    Shadow Type = Soft Shadows, Strength khoảng 0.8. Bóng đen tuyền trông như lỗi.

Thời gian thực hay bake sẵn

✖ Realtime

Tính lại mỗi khung hình

Đúng cho thứ chuyển động, phí phạm cho thứ đứng yên.

✓ Baked lightmaps

Tính sẵn, lưu vào texture

Tính một lần trong editor, lúc chạy không tốn gì. Game mobile đẹp là nhờ cái này.
  1. 1

    Chọn mọi vật thể không bao giờ di chuyển rồi tick Static ở góc trên phải Inspector. Knight KHÔNG phải vật tĩnh — đừng đụng vào nó.

  2. 2

    Đặt Mode của Directional Light là Mixed: nó bake lên vật tĩnh mà vẫn chiếu sáng nhân vật đang di chuyển.

  3. 3

    Mở Window▸Rendering▸Lighting rồi bấm Generate Lighting.

  4. 4

    Trong lúc thử nghiệm để Lightmap Resolution 10. Chỉ nâng lên 30–40 cho lần bake cuối.

Bầu trời, ánh sáng môi trường và sương mù

  • Skybox không chỉ là phông nền — nó là nguồn ánh sáng môi trường chính chiếu lên mọi bề mặt.

  • Ở Lighting > Environment, đặt Ambient Source = Skybox với Intensity 0.8–1.0 cho ánh sáng phụ tự nhiên trong vùng tối.

  • Sương che mặt phẳng cắt xa và cho phép giảm khoảng Far của camera — vừa đẹp vừa được thêm hiệu năng.

  • Chọn màu sương khớp với màu chân trời của skybox, không thì lộ vết ghép rất rõ.

Chu kỳ ngày đêm trong 12 dòng

DayNight.cs — attach to the Directional Light
using UnityEngine;

public class DayNight : MonoBehaviour
{
    [SerializeField] private float dayLengthMinutes = 4f;
    [SerializeField] private Gradient sunColor;          //0 lúc đêm, 1 lúc trưa
    [SerializeField] private AnimationCurve intensity;

    private Light sun;
    private float t;                                     // từ 0 tới 1 cho trọn một ngày

    void Awake() => sun = GetComponent<Light>();

    void Update()
    {
        t += Time.deltaTime / (dayLengthMinutes * 60f);
        t %= 1f;

        transform.rotation = Quaternion.Euler((t * 360f) - 90f, 30f, 0f);
        sun.color = sunColor.Evaluate(t);
        sun.intensity = intensity.Evaluate(t);

        RenderSettings.ambientIntensity = Mathf.Lerp(0.2f, 1f, sun.intensity);
    }
}