【Unity光照实战指南】【一:从零到一,构建你的第一个动态光影场景】

张开发
2026/4/14 19:38:05 15 分钟阅读

分享文章

【Unity光照实战指南】【一:从零到一,构建你的第一个动态光影场景】
1. 从零搭建基础场景第一次打开Unity时那个灰蒙蒙的默认场景总是让人有些无从下手。别担心我们先从最基础的空白画布开始。在Hierarchy面板右键选择Create Empty这个空对象就是我们的场景容器。我习惯给它改个名字叫LightingDemo这样后续管理起来会更清晰。接下来我们要添加一些简单的几何体作为光照测试对象。在3D Object菜单下添加一个Plane作为地面再放上几个Cube和Sphere作为被照明的物体。这里有个小技巧按住CtrlD可以快速复制选中的物体我通常会创建5-6个不同高度的物体来测试光照效果。记得把地面放大到10倍左右Scale设为10,1,10否则待会儿测试点光源时会发现光照范围不够用。注意所有物体的材质建议使用Unity默认的Standard Shader这样能最直观地看到光照变化。如果使用自定义Shader可能会影响光照效果的判断。2. 方向光模拟自然昼夜循环2.1 初始设置场景创建好后你会发现Unity已经自动添加了一个Directional Light。这就是我们的太阳——它决定了场景的基础光照方向。选中这个光源在Inspector面板可以看到所有可调参数。我建议先把Intensity调到1.2Color设为浅黄色RGB 255,245,215这样能模拟出自然的日光效果。关键参数解析Shadow Type推荐选Soft Shadows阴影边缘会更自然Shadow Resolution设为Very High能让阴影更清晰Bias参数组保持默认即可后面优化时再调整2.2 实现昼夜循环要让这个太阳动起来我们需要写个简单的旋转脚本。新建C#脚本命名为DayNightCycle代码如下using UnityEngine; public class DayNightCycle : MonoBehaviour { [Range(0.1f, 5f)] public float speed 1f; void Update() { transform.Rotate(Vector3.right * speed * Time.deltaTime); } }把这个脚本挂到Directional Light上运行游戏你就会看到光影随时间变化的效果。把speed设为0.5时大约2分钟能完成一个完整的昼夜循环。当光源旋转到平面下方时就进入了夜晚状态。实用技巧可以在Light组件里添加Color渐变效果让日出日落时的光线变成橙红色。这需要用到脚本控制后面进阶教程会详细讲解。3. 点光源制作可交互灯笼3.1 基础灯笼搭建在Hierarchy面板右键 Light Point Light创建一个新的点光源。把它放到一个Cube上方位置约0,1.5,0然后调整参数Range8-10根据场景大小调整Intensity3-5Color暖橙色RGB 255,150,50为了让这个灯笼更真实我们可以给Cube添加自发光材质。新建Material将Emission属性启用并设置为相同颜色强度设为1-2。这样即使没有直接光照时灯笼也能有微弱的自发光效果。3.2 添加交互效果让我们实现鼠标点击控制灯笼开关的功能。新建C#脚本LanternControllerusing UnityEngine; public class LanternController : MonoBehaviour { public Light pointLight; public float flickerIntensity 0.2f; private float baseIntensity; private bool isOn true; void Start() { baseIntensity pointLight.intensity; } void OnMouseDown() { isOn !isOn; pointLight.enabled isOn; } void Update() { if(isOn) { // 添加随机闪烁效果 pointLight.intensity baseIntensity Random.Range(-flickerIntensity, flickerIntensity); } } }把这个脚本挂到灯笼Cube上然后把Point Light拖到脚本的pointLight变量槽中。运行游戏后点击灯笼就能开关灯光而且开启时会有真实的火焰闪烁效果。4. 聚光灯突出关键区域4.1 基础聚光设置创建一个Spot Light建议位置0,3,0旋转30,-30,0调整以下参数Range12Spot Angle45Intensity8Color冷蓝色RGB 150,200,255这种配置适合用来突出展示场景中的重要物品。比如我们可以放一个金色Cube在聚光灯下作为宝藏效果。记得启用Shadow效果这样物体下方会出现清晰的投影。4.2 动态追踪效果让聚光灯跟随玩家移动是个常见需求。新建脚本SpotlightFollowusing UnityEngine; public class SpotlightFollow : MonoBehaviour { public Transform target; public float smoothSpeed 5f; public Vector3 offset new Vector3(0, 2, 0); void LateUpdate() { Vector3 desiredPosition target.position offset; Vector3 smoothedPosition Vector3.Lerp(transform.position, desiredPosition, smoothSpeed * Time.deltaTime); transform.position smoothedPosition; transform.LookAt(target); } }把这个脚本挂到Spot Light上然后把玩家对象比如主摄像机拖到target变量槽中。现在聚光灯会平滑地跟随目标移动始终保持照射状态。5. 性能优化技巧5.1 光源渲染模式每个Light组件都有Render Mode选项AutoUnity自动决定渲染优先级Important强制高质量渲染适合主要光源Not Important性能优先模式适合次要光源对于Directional Light应该设为Important点光源和聚光灯根据作用范围决定。小范围的装饰性光源可以设为Not Important。5.2 阴影优化阴影是性能消耗大户有几个优化方向在Quality Settings中降低Shadow Distance建议30-50使用Shadowmask代替实时阴影对远处物体使用简化的Shadow Resolution5.3 光照探头的使用在Window Rendering Lighting下的Light Probe Group可以添加光照探头。这些小球会记录场景中的光照信息让移动的物体也能获得正确的间接光照。我通常会在场景中每隔3-5米放置一个探头重点区域可以更密集。

更多文章