Unity ECS+Jobs System笔记 案例解析1(十)

本文详细解析了Unity的ECS案例,包括ForEach入门案例和Prefab转换到Entity的实现。首先介绍了如何使用ConvertToEntity将GameObject转换为Entity,并实现ComponentSystem处理数据。接着讲解了Prefab转化成Entity的过程,通过EntityManager和GameObjectConversionUtility进行操作,以及如何通过ComponentSystem更新Entity的状态。文章总结了ECS的基本使用步骤和性能优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章节为大家解析ECS案例,资源来自,大家自行获取:
https://github.com/Unity-Technologies/EntityComponentSystemSamples

ECS案例解析

1、ForEach——ECS入门案例

在这里插入图片描述
在该案例中有两个组件,一个是RotationSpeedSystem_ForEach,还有一个是ConvertToEntity

1.1、ConvertToEntity——Entity

这个组件的作用就是:将Inspector面板的GameObject从根节点开始,将整个GameObject(包括子物体)全部转成Entity,并且将所有现有的、能转化的Component转换成ECS的Component

在ConvertToEntity代码中,执行了GameObjectConversionUtility.Convert()函数,而"能转化"的四亿是只有当该组件实现了接口IConvertGameObjectToEntity的Convert()函数,才会根据Convert()函数产生作用

最后把原本的GameObject销毁掉

1.2、RotationSpeedAuthoring_ForEach——Convert
using System;
using Unity.Entities;
using Unity.Mathematics;
using UnityEngine;

[RequiresEntityConversion]
public class RotationSpeedAuthoring_ForEach : MonoBehaviour, IConvertGameObjectToEntity
{
   
   
    public float DegreesPerSecond;
    //那么这里就是实现了1.1中的Convert函数,在这个Convert函数中
    //将MonoBehaviour的参数作为RotationSpeed_ForEach组件的参数传入
    //并且从角度制变为弧度制
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
   
   
        var data = new RotationSpeed_ForEach {
   
    RadiansPerSecond = math.radians(DegreesPerSecond) };
        dstManager.AddComponentData(entity, data);
    }
}
1.3、RotationSpeed_ForEach——Component

ECS中的组件继承IComponentData,是struct类型,而在这个结构体中只保存了数据

using System;
using Unity.Entities;
// Serializable属性是为了支持编辑器
[Serializable]
//记住IComponentData是struct类型
public struct RotationSpeed_ForEach : IComponentData//首先要继承IComponentData
{
   
   
    public float RadiansPerSec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值