Unity3d 如何使用圆点生成单位?

Unity3d 如何使用圆点生成单位?,unity3d,unity-dots,unity-ecs,Unity3d,Unity Dots,Unity Ecs,我正在关注这个话题,并试图了解如何在单击鼠标时生成单位(用于测试目的) 为此,我创建了一个UnitBase等,它实现了IConvertGameObjectToEntity::Convert,以确保所有单元都可以转换为实体对象,如下所示: 名称空间单元 { 公共抽象类UnitBase:MonoBehavior,IConvertGameObjectToEntity { 公共卫生; 选择公共图书馆; 公共无效转换(实体实体、实体管理器、游戏对象转换系统转换系统) { dstManager.AddCom

我正在关注这个话题,并试图了解如何在单击鼠标时生成单位(用于测试目的)

为此,我创建了一个UnitBase等,它实现了IConvertGameObjectToEntity::Convert,以确保所有单元都可以转换为实体对象,如下所示:

名称空间单元
{
公共抽象类UnitBase:MonoBehavior,IConvertGameObjectToEntity
{
公共卫生;
选择公共图书馆;
公共无效转换(实体实体、实体管理器、游戏对象转换系统转换系统)
{
dstManager.AddComponentData(实体,新转换{Value=transform.position});
dstManager.AddComponentData(实体,新旋转{Value=transform.Rotation});
dstManager.AddComponentData(实体,新选择的{Value=Selected});
dstManager.AddComponentData(实体,新运行状况{Value=Health});
}
}
公共抽象类MobileUnitBase:UnitBase
{
公众浮标速度;
public new void Convert(实体实体、实体管理器、游戏对象转换系统转换系统)
{
转换(实体、dstManager、转换系统);
dstManager.AddComponentData(实体,新速度{Value=Speed});
}
}
}
这些是主要组成部分:

名称空间ECS.Components
{
公共类运行状况:IComponentData
{
公众浮动价值;
}
公共类速度:IComponentData
{
公众浮动价值;
}
选定的公共类:IComponentData
{
公共布尔值;
}
}
现在,在我的测试脚本中,我有以下内容:

公共类测试:单一行为
{
公共游戏对象单元预制;
私人实体经理(u EntityManager),;
私人实体_unitEntityPrefab;
//在第一帧更新之前调用Start
void Start()
{
_entityManager=World.DefaultGameObjectInjectionWorld.entityManager;
_unitEntityPrefab=GameObjectConversionUtility.ConvertGameObjectHierarchy(unitPrefab,World.Active);
}
//每帧调用一次更新
无效更新()
{
if(Input.GetMouseButtonDown(0))
{
产卵单位(15,15);
}
}
专用单位(浮动x、浮动z)
{
Log($“x:{x}y:{z}处的生成单元”);
var unitEntity=this.\u entityManager.Instantiate(this.\u unitEntityPrefab);
_SetComponentData(unitEntity,新转换{Value=new Vector3(x,1,z)});
_entityManager.SetComponentData(unitEntity,新旋转{Value=Quaternion.Euler(0,0,0)});
_SetComponentData(unitEntity,新运行状况{Value=100f});
_SetComponentData(unitEntity,新选择的{Value=false});
}
}
其中unitPrefab只是一个简单的游戏对象,上面有一个胶囊,还有一个基本上是空的脚本,现在是空的:

公共类UnitScript:UnitBase
{
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
}
}
问题是,当我单击时,会创建实体,但不会渲染单元

很明显,我遗漏了一些东西,但我看不出是什么


任何帮助都将不胜感激

你在使用混合渲染器吗?@BugFinder啊,就是这样。我不知道我们也必须添加组件
RenderMesh
LocalToWorld
。不幸的是,ECS仍然在变化,他们不断地乱搞东西,虽然很多东西都让它变得更容易,但你遵循一些不是最新的教程,或者它工作方式不同,或者不起作用,或者其他..@BugFinder是的,我注意到了只有几个月的D教程已经过时了。我不得不说,ECS看起来很有趣。我能问点事吗?你认为这个抽象类
UnitBase
是个好主意吗?让所有单位实现
IConvertGameObjectToEntity
s.t.系统可以在它们上面工作吗?这样做感觉很奇怪,但另一方面,还有什么选择呢?好吧,目前他们已经制作了一个组件,你可以把它放在游戏对象上,这样你就可以在正常的世界中开始设计点等等。。然后你在上面放一个converttoentity组件,所有的工作都差不多为你完成了。例如试试看这个,你在使用混合渲染器吗?@BugFinder啊,就是这样。我不知道我们也必须添加组件
RenderMesh
LocalToWorld
。不幸的是,ECS仍然在变化,他们不断地乱搞东西,虽然很多东西都让它变得更容易,但你遵循一些不是最新的教程,或者它工作方式不同,或者不起作用,或者其他..@BugFinder是的,我注意到了只有几个月的D教程已经过时了。我不得不说,ECS看起来很有趣。我能问点事吗?你认为这个抽象类
UnitBase
是个好主意吗?让所有单位实现
IConvertGameObjectToEntity
s.t.系统可以在它们上面工作吗?这样做感觉很奇怪,但另一方面,还有什么选择呢?好吧,目前他们已经制作了一个组件,你可以把它放在游戏对象上,这样你就可以在正常的世界中开始设计点等等。。然后你在上面放一个converttoentity组件,所有的工作都差不多为你完成了。例如试试看这个