代码检查:场景名称不唯一。
此检查会检测使用过短名称(例如, "MyScene" )加载场景且该名称对应多个已添加到 Build Settings 的场景的情况。
当多个场景的文件名相同时,如果仅使用短名称,Unity 的 SceneManager.LoadScene 行为可能难以预测,或可能加载非预期的场景。
运作方式
该检查会监控对 SceneManager.LoadScene 与 SceneManager.LoadSceneAsync 的调用。 会分析作为场景名称参数传入的字符串文本,并将其与添加到 构建设置 (Build Settings 窗口的 Scenes In Build 部分中的 .unity 文件列表)的场景进行比对。
如果提供的字符串(例如, "Level1" )在 Build Settings (例如, Assets/Scenes/Level1.unity 和 Assets/Tests/Level1.unity )中匹配了多个条目,检查会对字符串参数进行警告,建议使用更具体的路径以避免混淆。
示例
在此例中,假设项目有两个场景: Assets/Maps/Forest/Level.unity 和 Assets/Maps/Desert/Level.unity ,且两者都已添加到 Build Settings。 仅使用 "Level" 会造成歧义。
using UnityEngine.SceneManagement;
public class Loader : MonoBehaviour
{
void Start()
{
// Reported: Ambiguous scene name.
// Both "Forest/Level" and "Desert/Level" match "Level".
SceneManager.LoadScene("Level");
}
}
using UnityEngine.SceneManagement;
public class Loader : MonoBehaviour
{
void Start()
{
// Safe: Specifying a path (relative to Assets or just enough to be unique)
SceneManager.LoadScene("Forest/Level");
}
}
快速修复
快速修复会建议所有与歧义短名称匹配的完整路径列表,方便自动将短名称替换为正确且唯一的路径。
2026年 5月 8日