前言:我为什么来学习的初衷有一点就是为了这个,假如我一次性生成一千个物体你说会卡不卡,如果用了DOTS可想而知(我还没试。嘿嘿)
首先我们创建一个空物体挂载一个创建的脚本
* Scene----GameObject 首先GameObject是存在Scene场景下的
* World--Entity Entity是存在世界坐标下的,两者虽然有不同但是是混合在一起的
首先调用创建方法我们先测试一下是否创建出来了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
using Unity.Transforms;
public class CreateNewEntity : MonoBehaviour
{
/*
* Scene----GameObject 首先GameObject是存在Scene场景下的
* World--Entity Entity是存在世界坐标下的,两者虽然有不同但是是混合在一起的
*
*/
private EntityManager em;
void Start()
{
em = World.DefaultGameObjectInjectionWorld.EntityManager;
CreatyMyEntity();
}
private void CreatyMyEntity()
{
em.CreateEntity();
}
}
现在根据打印输出来看物体是创建出来了,但是只是一个空物体,最右侧面板也没有任何组件 没有任何材质和Mesh,我们现在要做的就是给他先添加上组件试一试
添加组件脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
using Unity.Transforms;
using Unity.Rendering;
public class CreateNewEntity : MonoBehaviour
{
/*
* Scene----GameObject 首先GameObject是存在Scene场景下的
* World--Entity Entity是存在世界坐标下的,两者虽然有不同但是是混合在一起的
*
*/
private EntityManager em;
[SerializeField]
private Mesh myMesh;
[SerializeField]
private Material myMaterial;
void Start()
{
em = World.DefaultGameObjectInjectionWorld.EntityManager;
CreatyMyEntity();
}
private void CreatyMyEntity()
{
//原型
EntityArchetype ea = em.CreateArchetype(
typeof(Translation),
typeof(RenderMesh),
typeof(RenderBounds),
typeof(LocalToWorld)
);
Entity myEntity = em.CreateEntity(ea);
em.AddSharedComponentData(myEntity, new RenderMesh
{
mesh = myMesh,
material = myMaterial
}
);
}
}
然后把mesh 和材质挂上 当当当当!!
是不是这样就出来了那,人头娃娃
小伙伴们可以生成一千个或者一万个试一试哦!!!