浅尝Unity ECS的笔记 2020 System and Component(三)

Component可以保存到的fields包括:

  • blittable types (type, float, double, int)
  • bool
  • char
  • NativeString, BlobAssetReferences, fixedarray, other structs
  • 没有引用!

Component的创建:

  • 必须是struct

  • 继承IComponentData

using Unity.Entities;

// 添加这句话你就可以把这个script添加到GameObject上
[GenerateAuthoringComponent]
public struct MoveSpeedData : IComponentData
{
	public float Value;
}

添加到之前有EntityConverter的GameObject上之后,运行游戏可以看到:

在这里插入图片描述

这样我们就把自定义的Component添加到Entity上啦~

接下来我们来做一个System

  • 它可以让场景里的Entity在Z轴上前后移动

  • 使用sin的公式在这里插入图片描述

  • 新建两个Data Component:WaveData,MoveSpeedData

using Unity.Entities;

// 添加这句话你就可以把这个script添加到GameObject上
[GenerateAuthoringComponent]
public struct WaveData : IComponentData
{
	public float amplitude, xOffset, yOffset;
}
using Unity.Entities;

// 添加这句话你就可以把这个script添加到GameObject上
[GenerateAuthoringComponent]
public struct MoveSpeedData : IComponentData
{
	public float Value;
}
using Unity.Entities;
using Unity.Transforms;
using Unity.Mathematics;

// 这个方法很老了,只会用一个threat (main threat),之后可以使用JOB或者BaseSystem
public class WaveSystem : ComponentSystem
{
    // 类似Update();
    protected override void OnUpdate()
    {
        Entities.ForEach((ref Translation trans, ref MoveSpeedData moveSpeed, ref WaveData waveData) =>
        {
            // 改变Z的位置
            float zPosition = waveData.amplitude *
                math.sin(
                    (float)/*由于是个double,需要cast成float*/Time.ElapsedTime *
                    moveSpeed.Value +
                    trans.Value.x * waveData.xOffset +
                    trans.Value.y * waveData.yOffset
                    );

            trans.Value = new float3(trans.Value.x, trans.Value.y, zPosition);
        });
    }
}

最终结果!!!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值