代码检查:场景名称不唯一
此检查会检测通过简短名称(如 "MyScene" )加载场景时,该名称指向构建设置中多个场景的情况。
当多个场景具有相同的文件名时,如果只使用简短名称,Unity 的 SceneManager.LoadScene 行为可能变得不可预测,或加载的并不是预期的场景。
运作方式
该检查会监控对 SceneManager.LoadScene 和 SceneManager.LoadSceneAsync 的调用。 会分析作为场景名称实参传递的字符串文字,并将其与已添加到 构建设置 (即 Unity 的 构建设置 窗口 Scenes In Build 部分的 .unity 文件列表)中的场景比对。
如果所提供的字符串(如 "Level1" )在 构建设置 中匹配多个条目(如 Assets/Scenes/Level1.unity 和 Assets/Tests/Level1.unity ),检查会通过警告标记该字符串实参,并建议使用更具体的路径以避免混淆。
示例
在此示例中,假设项目有两个场景: Assets/Maps/Forest/Level.unity 和 Assets/Maps/Desert/Level.unity ,且两者均已添加到构建设置。 仅使用 "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日