在自定义 Unity 包中使用 ECS
Posted
技术标签:
【中文标题】在自定义 Unity 包中使用 ECS【英文标题】:Using ECS in a custom Unity package 【发布时间】:2019-08-23 11:24:00 【问题描述】:我为 Unity 构建了一个名为 world-renderer
的自定义包。这是文件夹结构。
“运行时”里面是我所有的源代码。为了在 Unity 项目中使用它,我将此行添加到该项目的 manifest.json
中。
"com.tamagames.extinction.word-renderer": "file:C:/Users/dbugger/projects/unity/world-renderer",
到目前为止效果很好,但现在我想开始在我的自定义包中使用 ECS。所以我将其命名空间添加到其中一个文件中:
using Unity.Entities;
现在当我返回 Unity 编辑器时,我看到以下错误消息:
CS0234:命名空间“Unity”中不存在类型或命名空间名称“实体”(您是否缺少程序集引用?)
我想我需要将依赖项添加到我的自定义包的package.json
,所以我写了更新它是这样的:
"name": "com.tamagames.extinction.word-renderer",
"version": "1.0.4",
"displayName": "Extinction - World renderer",
"description": "World renderer for Extinction",
"unity": "2019.1",
"unityRelease": "0b5",
"keywords": [],
"dependencies":
"com.unity.entities": "0.1.1-preview" // Dependency added
,
"author":
"name": "Enrique Moreno Tent",
"email": "enriquemorenotent@gmail.com",
"url": "https://enriquemorenotent.com"
但我仍然不断收到同样的错误。
我做错了什么?
更新
我尝试添加对我的包的程序集的引用,如下所示:
"name": "Unity.com.tamagames.extinction.world-renderer-ecs",
"optionalUnityReferences": ["com.unity.entities"],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": []
这确实解决了找不到“Unity.Entities”的问题,但是现在,在 Unity 项目中,找不到我的源代码中的类!
【问题讨论】:
【参考方案1】:好吧,我让它工作了。
首先,我不应该使用optionalUnityReferences
,而是references
。
但最大的错误是,尽管 package.json 中的依赖项称为 com.unity.entities
,但 Assembly 文件中的依赖项应该称为 Unity.Entities
。
【讨论】:
【参考方案2】:我怀疑这与程序集定义有关:您可以通过在代码中添加引用来解决此问题(在程序集定义文件中 - 如果您没有,则需要在 运行时创建一个 文件夹)到Unity.Entities
。
【讨论】:
我尝试将其添加到我的程序集文件中:"optionalUnityReferences": ["com.unity.entities"],
。这确实解决了 ECS 的问题,但是项目将在我的包中找不到类:/ 问题已更新。以上是关于在自定义 Unity 包中使用 ECS的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D编辑器扩展—— 在自定义编辑器窗口中序列化List对象