【不用找素材】ECS 游戏Demo制作教程(1) 1.15

发布时间:2024年01月16日

一、项目设置

版本:2022.2.0f1
(版本太低的话会安装不了ECS插件)

模板选择3D URP

进来后移除URP(因为并不是真的需要,但也不是完全不需要)

Name: com.unity.entities.graphics

Version: 1.0.0-exp.8

点击Add添加

出现右边这个就是在安装中啦

安装成功~~~

↑推荐的编辑器布局

需要新添加上来的窗口会在下边列出来

把这些窗口打开,方便观察

右键可以多加一个Inspector窗口

项目设置窗口也打开

勾选上,更快进入播放模式

检查一下这几项

二、新建子场景

顺便在场景里创建一个地板

三、创建Entity

创建一个空实体,命名为Brain

创建好后如图

点击运行,一下出来一堆东西

在运行模式下,把右上角改成Runtime

就变成这样啦

给大脑加上这两个组件,随便来个模型和材质

需要关掉子场景再打开才会刷新哦

如果想真的关掉子场景,需要先点close,然后unload,就消失在场景中了,但一点击运行又会自动回来

四、创建Prefab Entity

创建一个空物体命名为Tombstone,给它创建一个用于渲染的子物体Renderer,给Renderer来个模型和材质,最后把Tombstone做成预制体,再把场景里的删喽。

五、设置场景Entity

创建个空物体,命名为Graveyard

创建一些文件夹用于存放脚本

在ComponentsAndTags文件夹里创建一个脚本叫GraveyardProperties

using Unity.Entities;
using Unity.Mathematics;

namespace ECSdemo
{
    public struct GraveyardProperties : IComponentData
        //继承这个接口,让这个结构体变成组件,记得引用命名空间
    {
        public float2 FieldDimensions;
        //float2 结构体表示一个包含两个 float 字段的结构体,记得引用命名空间
        public int NumberTombstonesToSpawn;
        //想要跟踪的数量
        public Entity TombstonePrefab;
        //墓碑预制件
    }
}


此时我们想把这个组件加到Graveyard上,发现搜不到这个组件~还需要一些操作

在AuthoringAndMono文件夹里创建一个脚本叫GraveyardMono

using Unity.Mathematics;
using UnityEngine;

public class GraveyardMono : MonoBehaviour
{
    public float2 FieldDimensions;
    //float2 结构体表示一个包含两个 float 字段的结构体,记得引用命名空间
    public int NumberTombstonesToSpawn;
    //想要跟踪的数量
    public GameObject TombstonePrefab;
    //墓碑预制件
}

把脚本给墓地加上,并给脚本赋值,点击运行,发现其实也没什么变化(っ ? -。) 继续写GraveyardMono脚本

using Unity.Entities;
using Unity.Mathematics;
using UnityEngine;

namespace ECSdemo
{
    public class GraveyardMono : MonoBehaviour
    {
        public float2 FieldDimensions;
        //float2 结构体表示一个包含两个 float 字段的结构体,记得引用命名空间
        public int NumberTombstonesToSpawn;
        //想要跟踪的数量
        public GameObject TombstonePrefab;
        //墓碑预制件
    }

    public class GraveyardBaker : Baker<GraveyardMono>
    {
        public override void Bake(GraveyardMono authoring)
        {
            AddComponent(new GraveyardProperties
            {
                FieldDimensions = authoring.FieldDimensions,
                NumberTombstonesToSpawn = authoring.NumberTombstonesToSpawn,
                TombstonePrefab = GetEntity(authoring.TombstonePrefab)
                //GetEntity:把GameObject变成Entity
            });

        }
    }

}

点击运行,发现能在面板上看到了~

文章来源:https://blog.csdn.net/m0_53930254/article/details/135603522
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。