【问题标题】:The name 'Entities' does not exist in the current context当前上下文中不存在名称“实体”
【发布时间】:2020-10-28 08:26:39
【问题描述】:
using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Unity.Entities;
   
 public class AttributesGenerationSystem : ComponentSystem
 {
     private static EntityManager entityManager;
   
     [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
     public static void Initialize()
     {
         entityManager = World.Active.GetOrCreateManager<EntityManager>();
     }
     protected override void OnUpdate()
     {
         Entities.ForEach();
     }
 }

我知道我还没有为 Entities.ForEach(); 输入参数——这不是我的问题。我收到错误消息;

“当前上下文中不存在名称‘实体’”

我在这里做错了吗?

【问题讨论】:

  • 对 Unity 了解不多,Entities 是一个命名空间,而不是一个对象。您不能迭代命名空间。查看 Unity 文档以了解如何正确使用 Entities 命名空间中的对象。
  • 其实我看了下文档,Entities.ForEach是命名空间中定义的函数。道歉。
  • 更新——我知道可能是什么问题。 ECS 是 Unity DOTS 的一部分,它是非常实验性的并且一直在更新。他们一直在弃用其中的重要部分——这让我在遵循几个月前的教程后遇到了严重的问题。
  • 它看起来也像乔布斯系统——另一个属于 DOTS 的系统——具有一个功能——IJobForEach——它似乎做的事情与 Entities.ForEach() 完全相同试图做,只是以一种更复杂但公认更优化的方式。明天我将尝试弄清楚工作系统以及明天具体的 IJobForEach。
  • 我想我会在这里保留一些关于思考过程的文档(我认为这些论坛应该是这样工作的?)感谢我已经收到的所有帮助——它帮助了很多看到我不仅遗漏了一些明显的东西,而且这实际上是一个可能对其他人有帮助的问题。

标签: c# unity3d entity-component-system


【解决方案1】:

我想通了。我扩展了 JobComponentSystem 并使用了 Unity 的作业系统,而不是似乎已弃用的 Entities.ForEach() 方法。然后我尝试使用 Unity 2019.3(之前使用的是 2018.4),一切都崩溃了。收到大量错误消息,显然 JobComponentSystem 现在也已弃用?所以我现在决定等待 DOTS 团队完成这件事,因为我正在做一个大项目,缺乏文档加上不断变化的库让我很头疼。

TL;DR:没有人会再读这篇文章,因为 Unity DOTS 很快就会变得无法识别,而且这些问题可能不会存在。

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2014-04-22
    • 2017-06-17
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多