unity3d 在C#中将结构标记为非托管- Unity ECS Baker

bweufnob  于 2022-12-13  发布在  C#
关注(0)|答案(1)|浏览(401)

我正在处理新的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显示错误。

hgc7kmma

hgc7kmma1#

当结构的字段和属性也是Unmanaged时,结构也是Unmanaged。使用Entity做为型别可能是它被视为Managed的原因。
请参阅https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/unmanaged-types

相关问题