How to Develop a Game
Light
PublishDate: 2025-05-29 | CreateDate: 2025-05-29 | LastModify: 2025-05-29 | Creator:ljf12825

Unity中的Light是照亮场景和物体的核心组件,也是实现逼真视觉效果的关键之一。合理使用光源可以极大提升游戏画面质量,同时也对性能有重要影响 Light决定了场景中物体如何被照亮、阴影如何生成、氛围如何表现

Light的类型(Type)

Unity中有4种主要光源类型:

类型描述用途示例
Directional Light没有位置,只有方向,光线平行太阳光、月光
Point Light从一点向所有方向发散灯泡、火把
Spot Light从一点向特定方向的锥体发散手电筒、聚光灯
Area Light(仅用于烘焙)从一个平面区域发光霓虹灯、窗户光线(仅用于静态对象)

光照模式(Mode)

Unity光源有三种模式,关系到实时性和性能:

模式描述用途
Realtime每帧计算光照,支持动态物体动态灯光,如手电筒、角色法术
Mixed静态对象使用烘焙,动态对象使用实时光综合表现和性能
Baked所有光照预先烘焙,不支持动态阴影静态场景,如建筑、地形

Light属性

在Unity中,使用UnityEngine.Light类可以动态修改光源的各种属性,实现如灯光变化、闪烁、开关、颜色变化等效果

Light light = GetComponent<Light>();

namespace:UnityEngine
Behaviour -> Component -> Object

常用字段与属性

属性/方法类型说明
typeLightType光源类型(Directional, Point, Spot, Area
colorColor光的颜色
intensityfloat光照强度
rangefloat光照范围(Point/Spot)
spotAnglefloat聚光灯角度(Spot)
enabledbool是否启用光源
shadowsLightShadows阴影类型(None/Hard/Soft)
cookieTexture光照投影纹理
cookieSizefloatCookie 范围(仅限 Directional Light)
renderModeLightRenderMode自动/强制重要/强制非重要
bounceIntensityfloat间接光强度(GI 反射)
flareLensFlare镜头光晕组件
cullingMaskLayerMask此灯光影响的层(需要启用“Forward Rendering”)

Unit官方文档(Light)

示例:动态控制灯光

1.开关灯

void ToggleLight()
{
    Light light = GetComponent<Light>();
    light.enabled = !light.enabled;
}

2.改变颜色和强度

void SetAlertMode()
{
    Light light = GetCompenent<Light>();
    light.color = Color.red;
    light.instensity = 5f;
}

3.手电筒控制

public Light flashlight;

void Update() => if(Input.GetKeyDown(KeyCode.F)) flashlight.enable = !flashlight.enable;

枚举类型

LightType

LightType.Directional
LightType.Point
LightType.Spot
LightType.Area

LightShadows

LightShadows.None
LightShadows.Hard
LightShadows.Soft

LightRenderMode

LightRenderMode.Auto
LightRenderMode.ForcePixel
LightRenderMode.ForceVertex

动态创建光源

GameObject lightObj = new GameObject("My Light");
Light light = lightObj.AddComponent<Light>();
light.type = LightType.Point;
light.color = Color.yellow;
light.range = 10;
light.intensity = 2;

阴影(Shadows)

1.Type(类型)

2.Strength(强度) 控制阴影颜色的不透明度

3.Bias / Normal Bias 用于消除“Peter Panning”(阴影漂浮)或自阴影伪影的问题

环境光

全局光照设置不依赖于某个 Light,而是在场景中作为基础光存在:

高级功能

1.Light Cookies(光照贴图) 使用一张纹理控制光照形状,常用于:

light.cookie = yourTexture;

2.体积光 Unity标准版本不自带,可通过插件实现(如HDRP或Volumetric Lighting插件)实现光柱、薄雾等效果

光照的重要系统

1.Light Probes

2.Reflection Probes

3.Global Illumination(全局光照)

光照调试技巧

性能建议

1.实时光数量尽量控制在2~4个
2.阴影数量建议仅关键光源开启阴影
3.静态光使用Baked,可大幅提升帧率
4.动态光照使用Light Probe + Mixed模式