U3d单独为场景设置影子距离,不影响全局设置
2026/2/3 20:41:56
关键词:影子距离 unity shadowDistance
2026/2/3 20:41:56
关键词:影子距离 unity shadowDistance
在 Unity 2020 内置渲染管线中,你可以通过以下两种方式单独为某个场景设置影子距离,而不影响全局设置:
方案 1:场景加载时动态修改(最常用)
这是最灵活的方式,通过脚本在场景加载时临时覆盖全局影子距离,退出场景后自动恢复。
使用步骤:在目标场景中创建一个空物体,将此脚本挂载到该空物体上。在 Inspector 中设置 sceneShadowDistance 为你想要的数值(例如 200)。运行游戏,加载该场景时影子距离会自动切换,退出场景后恢复全局设置。
方案 2:通过场景配置文件(无代码)
如果你的项目使用了 SceneManager 管理场景,可以结合场景激活事件来实现,无需在每个场景中放脚本:
在项目中创建一个全局管理脚本(如 GlobalSceneManager),挂载到常驻场景的物体上。
在脚本中监听 SceneManager.sceneLoaded 和 SceneManager.sceneUnloaded 事件。
根据加载的场景名称,动态设置对应的影子距离。代码如下:
[1] [2]
相关文章(向右看)..
方案 1:场景加载时动态修改(最常用)
这是最灵活的方式,通过脚本在场景加载时临时覆盖全局影子距离,退出场景后自动恢复。
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneShadowDistance : MonoBehaviour
{ // 为当前场景设置的影子距离(可在Inspector中调整)
public float sceneShadowDistance = 200f;
private float originalShadowDistance;
void Awake()
{ // 保存全局原始影子距离
originalShadowDistance = QualitySettings.shadowDistance;
// 应用当前场景的影子距离
QualitySettings.shadowDistance = sceneShadowDistance;
}
void OnDestroy()
{ // 场景卸载时恢复全局影子距离
QualitySettings.shadowDistance = originalShadowDistance;
}
}使用步骤:在目标场景中创建一个空物体,将此脚本挂载到该空物体上。在 Inspector 中设置 sceneShadowDistance 为你想要的数值(例如 200)。运行游戏,加载该场景时影子距离会自动切换,退出场景后恢复全局设置。
方案 2:通过场景配置文件(无代码)
如果你的项目使用了 SceneManager 管理场景,可以结合场景激活事件来实现,无需在每个场景中放脚本:
在项目中创建一个全局管理脚本(如 GlobalSceneManager),挂载到常驻场景的物体上。
在脚本中监听 SceneManager.sceneLoaded 和 SceneManager.sceneUnloaded 事件。
根据加载的场景名称,动态设置对应的影子距离。代码如下:
using UnityEngine;
using UnityEngine.SceneManagement;
public class GlobalSceneManager : MonoBehaviour
{ void OnEnable()
{ SceneManager.sceneLoaded += OnSceneLoaded;
SceneManager.sceneUnloaded += OnSceneUnloaded;
}
void OnDisable()
{ SceneManager.sceneLoaded -= OnSceneLoaded;
SceneManager.sceneUnloaded -= OnSceneUnloaded;
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{ // 根据场景名称设置影子距离
if (scene.name == "目标场景名")QualitySettings.shadowDistance = 200f;
}
void OnSceneUnloaded(Scene scene)
{ // 场景卸载时恢复全局默认值
QualitySettings.shadowDistance = 100f; // 全局默认影子距离
}
}
相关文章(向右看)..