Dots简单例子----打印
ECS分为三个部分:
Entity 实体
Component 组件:数据存放于数据组件
System 系统:函数放于系统
一、使用步骤
1.引入库
unity中: windows --->Package Manager:搜索Entities和Hybrid Renderer并安装
2.创建脚本PrintComponentData1
该脚本为数据组件,用来存放数据
代码如下(示例):
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using UnityEngine;
/// <summary>
/// 组件
/// </summary>
public struct PrintComponentData1 : IComponentData
{
public float data;
}
该结构体继承于IComponentData,表面其为数据组件
3.创建系统PrintSystem1
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using UnityEngine;
public class PrintSystem1 : ComponentSystem
{
protected override void OnUpdate()
{
Entities.ForEach((ref PrintComponentData1 data1) =>
{
Debug.Log(data1.data);
});
}
}
继承于ComponentSystem类,必须重载抽象函数OnUpdate()
使用ForEach函数,该函数参数为一个lambda表达式,传入了数据组件 对象data1,并用log函数输出
4.创建实体
将游戏对象gameObject转换为Entity实体
引入ConvertToEntity组件(Dots中的脚本:用来将游戏物体转换为实体)
5. 创建脚本PrintAuthoring1(挂载于游戏物体(实体)上)
1.用来转换实体的脚本
2.继承于monobehaviour和IConvertGameObjectToEntity
3.在这个类中必须实现接口中的Convert(),可以在这个函数中将不能挂载在unity面板中的组件挂载到实体上
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using UnityEngine;
public class PrintAuthoring1 : MonoBehaviour, IConvertGameObjectToEntity
{
public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
{
//使用EntityManager对象dstManager的AddComponentData函数(实体,需要挂载的组件)
dstManager.AddComponentData(entity,new PrintComponentData1());
}
}
此时运行即可得到log信息,但不能在unity面板中可视化修改
实现可视化修改
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using UnityEngine;
public class PrintAuthoring1 : MonoBehaviour, IConvertGameObjectToEntity
{
public float data;
public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
{
//使用EntityManager对象dstManager的AddComponentData函数(实体,需要挂载的组件)
dstManager.AddComponentData(entity,new PrintComponentData1() { data = data});
}
}
第一个data为组件中的,第二个data是 public float data;