我正在处理新的ECS包(com.unity.entities),在我的Monobehavior中有以下代码:
public class LevelBaker : Baker<LevelMono>
{
public override void Bake(LevelMono authoring)
{
AddComponent(new LevelProperties
{
SpawnDimensions = authoring.SpawnDimensions,
NeutralSpawnCount = authoring.NeutralSpawnCount,
NeutralActorPrefab = GetEntity(authoring.NeutralActorPrefab)
});
AddComponent(new LevelRandom
{
Value = Random.CreateFromIndex(authoring.RandomSeed)
});
}
}
代码运行正常,但Rider突出显示了AddComponent
方法
型别'ComponentsAndTags.LevelProperties'必须是有效的Unmanaged型别(简单数值、'bool'、'char'、'void'、枚举型别或非泛型结构型别,且所有字段都是Unmanaged型别的字段,位于任何巢状层级),才能当做'T'参数的型别参数使用
错误,因为它的定义如下a:
public void AddComponent<T>(in T component) where T : unmanaged, IComponentData
LevelProperties和LevelRandom是简单的结构体,只包含非托管类型,但Rider似乎不知道这一点。下面是LevelProperties的代码:
public struct LevelProperties : IComponentData
{
public float2 SpawnDimensions;
public int NeutralSpawnCount;
public Entity NeutralActorPrefab;
}
如何将LevelProperties结构“标记”为非托管,以便Rider停止将其作为错误突出显示?
我使用的是最新、当前版本的Rider和Unity 2022.2.0b16。代码编译并运行,只有Rider显示错误。
1条答案
按热度按时间hgc7kmma1#
当结构的字段和属性也是Unmanaged时,结构也是Unmanaged。使用
Entity
做为型别可能是它被视为Managed的原因。请参阅https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/unmanaged-types