代码检查:要在函数中使用 'GetSingleton' 调用的结果,'OnCreate' 必须包含 'RequireForUpdate' 调用。
如果系统的 OnCreate 方法没有用 RequireForUpdate 请求 singleton,本检查会在 ISystem 代码中报告 SystemAPI.GetSingleton<T>() 和 GetSingletonEntity<T>() 的调用。
如果没有 RequireForUpdate<T>() ,即使缺少 singleton,系统也会运行,这样访问 singleton 就不安全。
示例
在此示例中,调用了 GetSingleton<GameConfig>() ,但系统并未要求 GameConfig 进行更新。 快速修复会将缺失的要求添加到 OnCreate。
using Unity.Entities;
public partial struct ExampleSystem : ISystem
{
public void OnUpdate(ref SystemState state)
{
// Reported: singleton must be requested with RequireForUpdate
var config = SystemAPI.GetSingleton<GameConfig>();
}
}
using Unity.Entities;
public partial struct ExampleSystem : ISystem
{
public void OnCreate(ref SystemState state)
{
state.RequireForUpdate<GameConfig>();
}
public void OnUpdate(ref SystemState state)
{
var config = SystemAPI.GetSingleton<GameConfig>();
}
}
快速修复
请使用快速修复为 singleton 类型添加缺失的 RequireForUpdate<T>() 调用,或一次性添加全部缺失的 singleton 要求。
如果没有 OnCreate 方法,快速修复会创建一个。 如果 OnCreate 已存在,快速修复会将缺失的请求插入其中。
2026年 5月 8日