精华内容
下载资源
问答
  • Entitas简单移动项目

    2017-09-06 15:49:19
    该资源对应Unity3D ECS框架 Entitas入门学习3文章的内容。 主要承接上一节的内容来实现点击右键创建角色、点击左键移动角色的功能。 这边会在IComponent中保存Unity场景中GameObject的引用,以便在各个System中使用...
  • entitas-python是的端口。 概述 组件 Position = namedtuple ( 'Position' , 'x y' ) Health = namedtuple ( 'Health' , 'value' ) Movable = namedtuple ( 'Movable' , '' ) 实体 entity . add ( Position , 3 ,...
  • Entitas-lua-源码

    2021-02-03 18:04:53
    Entitas-lua 起因是因为用Entitas写游戏逻辑感觉舒服,但是发现没有lua版本(但实际上后来才发现原来是有的,不过基本都没有做代码生成),这是一个Entitas_Lua实现。 如何安装: 需要Python3.x环境(配置环境变量)...
  • Entitas 2D Roguelike 这是为引擎编写的简单的末日类Roguelike游戏。 该项目是对使用设计的。 Entitas是一个实体组件系统,它允许以干净且可扩展的方式设计项目。 基本原理 Unity是用于创建游戏的功能强大的工具,...
  • Entitas-Lite Entitas-Lite是Entitas的No- CodeGenerator分支。 它适用于大型项目,团队更喜欢没有代码生成的ECS。 Entitas的某些核心已被重写,以提供用于手动编码的简单界面。 入门指南 将“ Build / deploy / ...
  • Entitas是免费的,但由提供动力 Entitas-C#和Unity的实体组件系统框架 Entitas是专门用于C#和Unity的超快速实体组件系统框架(ECS)。 内部缓存和快速的组件访问使其无与伦比。 已经做出了一些设计决策,以便在...
  • Entitas-Java 总览 Entitas-Java是[Entitas-CSharp]( )的端口。 Entitas是所谓的实体组件系统框架[(ECS)]( 1 /)。 它是为C#和Unity专门设计的超快速。 此端口实现是在Java 8下实现的,它使用工具的功能,...
  • Entitas是守望先锋使用的框架,资源里面有3个Demo。 GameFramework是国内一套较好的框架,里面有一个Demo
  • Entitas.rar

    2019-10-22 23:39:26
    这是一个关于ECS框架的Demo工程,是以游戏案例来进行设计的,是一个用ECS框架写的消除类游戏
  • Entitas-Cpp, Entitas++是一个快速实体组件系统( vt ECS ) C++11端口 Entitas C# Entitas+ +Entitas++是一个快速实体组件系统框架( vt 。ECS ) C++11端口,用于 C# 和Unity的 Entitas 。这两者之间存在一些差异,请...
  • 实体同步框架 产品特点 自动ECS世界同步 客户端-服务器网络模型 命令消息系统 基于T4的代码生成器,用于创建简洁的API,序列化器,反序列化器和压缩器 客户端上的状态缓冲 本机内存分配 联网由单独的线程处理,与该...
  • entitas1.9.2.unitypackage

    2019-12-08 13:09:03
    entitas1.9.2版本,为了方便下载,特意从github上下载的插件,注意,版本的 1.9.2
  • EntitasSaveLoader v0.6.1 可以使用Json文件保存/加载实体信息。 这仍然是实验性的。 版本v0.6.1 添加了excel2Json。 可以读取多个模板组。 版本v0.6 支持庙名。 组件子修补程序将删除。... 实体Templet
  • UnityLockstep-Entitas0.1.rar

    2020-06-06 01:07:34
    最简单的unity ecs项目示例,“高效”,“快速”,“可扩展”, 实在摆不下去了。。。适合入门者,语法基础薄弱者,想进入游戏行业从业者
  • 1. Entity(实体)、Component(组件)、System(系统)间的关系 如果你觉得想尽快看到HelloWorld,那就直接从第2步开始,然后再回来看...因为,在Entitas中,就连鼠标点击产生的事件也作为实体。 组件就是一些...

    1. Entity(实体)、Component(组件)、System(系统)间的关系

    如果你觉得想尽快看到HelloWorld,那就直接从第2步开始,然后再回来看这一步吧。

    这里简单介绍ECS三者之间的关系。

     

    Entity,即实体,显然,它是一个实质的带有功能的对象,但它又不仅限于角色、怪物这些实体。

    因为,在Entitas中,就连鼠标点击产生的事件也作为实体。

     

    组件就是一些零散的功能点,如:坐标、武器、攻击力等。

    实体就是这些组件的载体,把部分组件组合起来。

     

    比如,我有以下的组件:图片、攻击力、武器。

    这些是零散的东西,总得有个角色把它们组合起来吧?所以,这个角色就是实体。

    而组件是千奇百怪的,比如:坐标。

    在产生点击事件的时候,得有个实体把坐标给组合起来,那么,就有个“点击事件实体”的东西了。

     

    至于System(系统),可以理解为Controller(控制器),用来控制实体逻辑的。

    不理解没关系,看完这篇的HelloWorld大家就明白了。

    2. 创建Component(组件)

    好吧,我们开始。

    Entitas的基本思想就是,把实体和它的属性完全分开,以组件的形式组合这些属性。

     

    我们从创建组件开始一步步走向HelloWorld吧。

    创建一个DebugMessageComponent.cs文件,代码目录结构就随意了,只是学习而已。

    using Entitas;
     
    [Game]
    public class DebugMessageComponent : IComponent 
    {    
        public string message;
    }

    注意两个地方,一个是给类加上一个[Game]特性,从目前我所理解的情况来看,这个Game的特性代表了这个组件是属于一个叫做GameEntity的实体。

    这个组件叫做调试信息,拥有这个组件的实体就代码它拥有了调试信息这个属性。

    3.自动生成Entity(实体)

    Entitas会自动帮我们根据组件生成实体,我们是不需要在实体的创建上花费太多心思的。

    现在,回到IDE,依次选择【Tools】-【Jenny】-【Generate】:

    你会看到项目下多了一个GameDebugMessageComponent文件(Generated目录下都是自动生成的文件,不要去修改它们):

    该文件里包含两个类:GameEntity和GameMather。

     

    如之前所说,我们给组件赋予了[Game] 特性,所以它会帮我们生成GameEntity实体(的一部分)。

    如果你仔细看的话,会发现,GameEntity是用partial定义的,也就是说,它是一个分部类。

     

    什么是分部类?就是把一个类拆分为多个部分,在不同的地方定义。

    并没有什么特别的,只是方便我们做不同的处理,比如在不同的文件里定义同一个类,这个文件定义一些属性,那个文件定义一些函数等待。

     

    而Entitas会根据不同的组件生成多个实体的分部类,每个分部类里只定义一个组件的相关操作,这是Entitas的特点之一。

    至于GameMatcher,是用来筛选实体的,这里暂时不多说。

    4. 创建“控制器”——System(系统)

    对于Entitas,组件只是定义一些属性,实体是自动生成的,而我们要做的事情大部分都在System里。

    现在,我们来创建一个新的C#文件,命名为:DebugMessageSystem.cs

     

    其内容如下:

    using System.Collections.Generic;
    using Entitas;
    using UnityEngine;
     
    public class DebugMessageSystem : ReactiveSystem<GameEntity>
    {
        public DebugMessageSystem(Contexts contexts) : base(contexts.game)
        {
        }
     
        protected override ICollector<GameEntity> GetTrigger(IContext<GameEntity> context)
        {
            // 该控制器只关心含有DebugMessage组件的实体 
            return context.CreateCollector(GameMatcher.DebugMessage);
        }
     
        protected override bool Filter(GameEntity entity)
        {
            // 只有hasDebugMessage为true的实体才会触发下面的Execute函数
            return entity.hasDebugMessage;
        }
     
        protected override void Execute(List<GameEntity> entities)
        {
            // 满足GetTrigger和Filter的实体保存在entities列表里
            foreach (var e in entities)
            { 
                // 打印信息
                Debug.Log(e.debugMessage.message);
            }
        }
    }

    这个System比较关键,我分步解释一下:

    • a 通常情况下,我们的System类都要继承ReactiveSystem(还有其他System我们以后再说)
    • b ReactiveSystem是干什么的呢?可以粗暴地理解为:监测那些属性发生了改变的实体,然后对它们做一些厉害的事情
    • c GetTrigger函数的作用:一个System通常只对某些类型的实体感兴趣,比如我们的DebugMessageSystem,它只对那些拥有DebugMessage组件的实体感兴趣,GetTrigger函数就是用来筛选实体的。之前生成的实体里包含了一个GameMatcher类,它也是一个分部类,作用就是筛选实体类型。
    • d Filter函数:这也是一个筛选函数,为毛已经有了GetTrigger的情况下还需要Filter函数?因为,GetTrigger函数仅仅是筛选实体类型,但是并不是这个实体类型下的所有实体我都感兴趣,Filter函数就是在已经筛选了实体类型的情况下,再根据具体的需求进一步筛选。这里筛选的就是那些有打印信息的实体。
    • e Execute函数是重点,经过GetTrigger和Filter的重重筛选后,我们终于得到了自己感兴趣的实体。这些实体会通过Execute的参数传递进来,我们可以对这些实体做我们想做的事情(咳咳,注意道德底线)。比如这里我们就是把所有有打印信息的实体的信息打印出来。

    5.Systems(系统组)

    所以,我们可以开始HelloWorld了么?

    不,还不行,我还想继续说(旁白:那你自己说个够吧,反正我已经听不下去了)

     

    快了快了,大家坚持一下。

    我们现在要来创建一个管理System的System,因为一个游戏开发过程中,不可能只有一个System的,为了方便管理,便有了【Feature】System的概念。

     

    我们先来创建一个TutorialSystems.cs类,内容如下:

    using Entitas;
     
    public class TutorialSystems : Feature
    {
        public TutorialSystems(Contexts contexts) : base ("Tutorial Systems")
        {
            Add(new DebugMessageSystem(contexts));
            //Add(new DebugMessageSystem2(contexts));
            //Add(new DebugMessageSystem3(contexts));
            //Add(new DebugMessageSystem4(contexts));
        }
    }

    这个类要继承Feature,它的内容很简单,就是在构造器里Add所有System进去,我们现在只有一个DebugMessageSystem,所以只需添加一个。

    Feature就像一个管理System的管理器,有什么好处?等会大家就知道了。

    6. 最后一步——让Entitas的东西和Unity关联

    之前我们一直在做的事情基本上都和Unity无关,因此,想要让这组件、实体、系统运行起来,就必须把它们关联起来。

     

    我们来创建一个GameController.cs文件,内容如下:

    using Entitas;
    using UnityEngine;
     
    public class GameController : MonoBehaviour
    {
        Systems _systems;
     
        void Start()
        {
            // 获取Entitas的上下文对象,类似一个单例管理器
            var contexts = Contexts.sharedInstance;
            
            // 获取所需的System组
            _systems = new Feature("Systems")
                .Add(new TutorialSystems(contexts));
     
            // 初始化System
            _systems.Initialize();
     
        }
     
        void Update()
        {
            // 调用System的Execute函数,这里并不是每帧都执行Execute逻辑,因为Syetem里Execute会在实体满足一定条件的情况下才执行的(GetTrigger和Filter函数的作用)
            _systems.Execute();
        }
    }

    7. 运行?

    所以,我们可以运行了?

    差不多是吧,在Unity里创建一个GameObject,然后把GameController挂上去,然后就能运行了。

     

    所以,大家看到HelloWorld了吗?(旁白:并没有!)

    看不到就对了,这就是Entitas的神奇之处。(旁白:神奇你妹啊!我只是想看个HelloWorld,再不出现我就Alt+F4了啊!)

     

    大家别急(靠,我自己都急了),虽然所有代码都正常运行了,但是别忘了,我们的DebugMessageSystem的Execute函数是什么情况下执行的?

    拥有DebugMessage组件的实体(GetTrigger函数限制的),并且hasDebugMessage属性为true(Filter函数限制的)才会触发Execute函数。

     

    我们现在没有任何GameEntity,是不可能触发Execute函数的。

    什么情况下才有新的GameEntity出现,这个是由我们来决定的,这个问题就和“什么时候出现怪物”是一样的。

     

    不过,既然是HelloWorld,我们可以自己添加一些测试实体。

    方法就是,在GameController的Start函数里自己添加实体,代码如下:

    void Start()
        {
            // 获取Entitas的上下文对象,类似一个单例管理器
            var contexts = Contexts.sharedInstance;
            
            // 获取所需的System组
            _systems = new Feature("Systems")
                .Add(new TutorialSystems(contexts));
     
            // 初始化System
            _systems.Initialize();
            
            // 测试,添加一些测试实体
    		contexts.game.CreateEntity().AddDebugMessage("Hello World!");
        }

    获取game的上下文对象,调用CreateEntity函数即可创建实体。

    创建完实体后呢,对,得给它添加DebugMessage组件(AddDebugMessage函数),添加组件的同时传递一个DebugMessage字符串。

     

    于是,这个实体就同时满足了【拥有DebugMessage组件】、【hasDebugMessage属性为true】的条件。

    再次运行游戏,在Console里,大家会看到姗姗来迟的HelloWorld…太感人了。

    8. 唠叨一下

    可能大家觉得,Entitas的HelloWorld也太难出现了吧,得写一堆东西。

    确实,毕竟是框架,不是语言。

    我们得按照框架的把代码搭起来才能做一些简单的事情,可能大家对于Entitas的认识还是很模糊,我已经把官方的HelloWorld教程精简了,可它还是很复杂。

    展开全文
  • 将源代码继承到Unity中,删除了一些无关紧要的文件,可以直接打断点,可以直接看源代码,膜拜一下Google大神。 该项目使用Entitas实现了一个Sprite移动的简单功能。
  • Entitas1.5.1正式版 Unity项目 源代码集成 簡單demo,ECS简单使用学习,适合入门的
  • C# ECS框架 Unity AssetsStore上的Entitas 1.5.2版本 此版本带jenny server 非GitHub版本 配置jenny 移步 https://blog.csdn.net/u011627082/article/details/79881751
  • unity Entitas+1.5.1 附带Jenny代码生成器,附带使用Jenny教程地址
  • 这将打开与Unity关联的默认代码编辑器,并生成Entitas所需的脚本程序集。然后,您可以关闭或最小化编辑器,因为我们在安装过程中不需要它。 注意:某些外部编辑器不会自动生成.csproj文件(例如Visual Studio,...

    第1步 - 准备新的Unity项目

    创建并打开一个新的Unity项目。然后转到Unity工具栏并选择Assets> Open C#Project。这将打开与Unity关联的默认代码编辑器,并生成Entitas所需的脚本程序集。然后,您可以关闭或最小化编辑器,因为我们在安装过程中不需要它。

    注意:某些外部编辑器不会自动生成.csproj文件(例如Visual Studio,emacs,vim)。如果使用其中一个编辑器,请确保已创建.sln.csproj文件。如果项目中至少有1个C#脚本,Visual Studio将自动执行此操作。

    打开C#项目菜单

    可选的

    在Unity项目的根目录中创建一个新文件夹以保存Entitas附加组件。在大多数示例中,这通常被命名为“Libraries”,但您可以将其命名为任何您想要的名称。

    库文件夹

    第2步 - 导入和设置Entitas

    *一定要把新的Entitas文件导入,不要拷贝原有的Entitas,负责Generate时无法生成需要的Components文件

    下载Releases中的最新Entitas.zip,然后将其打开并将名为(位于Assets / Entitas下)的文件夹拖放到您之前创建的文件夹或Unity项目的根目录中。您可能还需要名为的文件夹。EntitasDesperateDevs

    导入后的Unity文件夹

    等待Unity重新加载,您现在应该在工具栏上看到一个名为Tools的新部分,选择它并选择Jenny> Preferences打开首选项窗口。这是代码生成器Jenny的首选项窗口。

    在Jenny首选项窗口中,按下标有“ 自动导入”的按钮。然后,您将看到一条警告消息,只需选择继续并覆盖,现在应自动为您设置首选项窗口中的所有设置。

    珍妮菜单

    然后再点击Tools>Jenny>Generate即可生成相关的Components文件

    第3步 - 测试代码生成器

    在首选项窗口中按标记为Generate的绿色大按钮,或使用热键Shift + Ctrl + G验证一切设置是否正确并生成第一个代码。

    如果一切正常,您应该在控制台中看到一条消息,并在Unity项目中看到一个包含所有生成文件的新文件夹。默认情况下,它位于Sources / Generated。如果您收到错误消息,请阅读常见问题解答常见问题解答

    生成的代码文件夹

    全部完成。你真棒!??

    恭喜!您现在已准备好开始使用Entitas和Unity创建令人惊叹的东西!要了解如何开始制作组件,系统和游戏逻辑,请查看“ 教程示例”部分。

    展开全文
  • Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 目录 Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 一、简单介绍 二...

    Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么)

     

    目录

    Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么)

    一、简单介绍

    二、一些专有项简介

    Entity

    Context

    Group

    Collector

    Matcher

    System

    Feature

    三、注意实现

    四、ECS 的下载

    Github 上下载

    Unity Asset Store 中下载

    Unity 的 Package Manager 中下载

    五、ECS 框架导入

    六、ECS 的配置

    七、ECS 的简单使用( Hello ECS Entitas)

    八、关键代码

    九、参考博文:


     

    一、简单介绍

    Entitas是一个运行效率高的轻量级C# Entity-Component-System(ECS)框架,专门为unity订制。提供内部缓存和快速的组件访问。它经过精心设计,可以在垃圾收集环境中发挥最佳作用。

    面向对象思想强调对象,通过对象自身属性等完成具体实现。ECS则强调过程,通过并无实际意义的实体来收集作为数据的容器来完成具体实现。

    • E:Entity无实际意义,仅作为收集组合C的容器。

    • C:Component包含数据的组件,无方法实现。

    • S:处理数据的系统,自身无任何数据,通过方法来实现。

     

    目前的优点:

    • 遵循这个框架的规则去写代码,代码结构清晰。

    • ECS这种模式,耦合度就很低,所有的游戏物体都是组件的组合而已,可扩展性强,通过合理组合component就能配置出一个新的游戏物体。

    • 很方便的管理所有实体状态,entitas提供了类似状态机的功能,当感兴趣的某个属性发生变化时,能在System中很方便的做出响应,不管什么状态,都能很方便的做出对应处理。

    • unity本身的开发模式就类似ECS,unity2018更是推出了最新的ECS框架,entitas很符合这种开发模式

    • entitas自开源以来,一直在更新维护,并受到了unity官方的认可,在unite大会上都有提到。所以,这个框架还是很靠谱的。

    目前的缺点:

    • 国内资料少,上手难度高。国内用这个框架开发的特别少,遇到问题需要自己爬坑。

    • 不适合小项目。小项目用entitas反而麻烦

    • entitas更新太快,官方wiki文档更新没有跟上,比如,我在看官方Demo-MatchOne的时候,有个Event的Attribute, wiki上暂时还没有这个的

    • 代码热更方面是个问题, entitas基本对unity开发定了一套完整的规则,特别是有Code Generate,如果项目发布后想要更新加入新的代码会很麻烦,官方对此也没有说明,目前好像也没有人分享在entitas中加入lua热更的功能

     

    二、一些专有项简介

    Entity

    entity是一个存储数据的容器,用以表现程序中存在的对象。你可以添加,替换和移除数据通过IComponent。Entitas也有相应的事件event来通知你这些变化。
    Entitas通过代码生成器可以自然的产生很多易读的代码如下文中的方法便是代码生成器自动产生的API调用。

    Entitas中的Atrributes

    Code Generator(代码生成器)目前支持与类、接口和结构一起使用的以下特性:

    • Context: 可以使用此特性使组件仅在指定的context中可用;例如 [MyContextName], [Enemies], [UI]....提高内存效率。它还可以创建组件。

    • Unique: 代码生成器将提供额外的方法,以确保最多存在一个具有该组件的实体,相当于单例。

    • FlagPrefix:仅可用于支持标记组件的自定义前缀。

    • PrimaryEntityIndex: 可用于将实体限制为唯一的组件值。

    • EntityIndex: 可用于搜索具有组件值的实体。

    • CustomComponentName: 为一个类或接口生成具有不同名称的多个组件。

    • DontGenerate]: 代码生成器不会使用此属性处理组件。

    • Cleanup: 代码生成器将生成删除组件或销毁实体的系统。

     

    Context

    Context是一个让你可以创建和销毁实体entities的工厂。通过它可以过滤感兴趣的实体。

     

    Group

    通过组Group,可以对上下文中的实体进行超快速过滤。 当实体更改时,它们会不断更新,并且可以立即返回实体组。 想象一下,您有成千上万个实体,而您只需要那些具有PositionComponent的实体-只需询问该组Group的上下文,它的结果就已经被筛选完成。

    Group和获取的entities都被缓存下来,所以该方法运行速度非常高。尽可能的优先使用Group。gameContext.GetEntities(GameMatcher.Moveble)同样可以内部地使用groups。
    Groups有OnEntityAdded,OnEntityRemoved,OnEntityUpdated来对group变化作出响应。

     

    Collector

    Collector提供了便捷的方法来对group的变化作出反应。比如你想汇总和处理所有添加或替换PositionComponent的实体entities。

     

    Matcher

    Matcher匹配器由代码生成器生成,可以组合。匹配器通常用于从感兴趣的上下文中获取实体组。需要在匹配器前加上你感兴趣的上下文名称(例如GameMatcher, InputMatcher等)。

     

    System

    entitas中有四种Systems:

    • IInitializeSystem: 只执行一次 (system.Initialize())

    • IExecuteSystem: 每帧执行 (system.Execute())

    • ICleanupSystem: 在其他系统完成后每一帧执行(system.Cleanup())

    • ReactiveSystem: 当观察的group改变时执行(system.Execute(Entity[]))

    最后需要注意的是,需要创建一个管理System的System,因为一个游戏开发过程中,不可能只有一个System的,为了方便管理,便有了[Feature]System的概念。这个类要继承Feature,在构造器里Add所有System进去。Feature就像一个管理System的SystemManager。

     

    Feature

    entitas为提供了Features来组织你的system。使用Features将相关system组合在一起。这有一个额外的好处,就是可以在Unity层次结构中为你的system分离可视化调试对象。现在可以在逻辑组中检查它们,而不是一次检查所有。
    Feature还可以帮助你在项目中执行更广泛的范例规则。功能的执行顺序由添加它们的顺序决定,然后按照这个顺序初始化它们,确保游戏逻辑不会被干扰。
    Feature要求实现构造函数。使用Add()方法向Feature添加system。这里添加它们的顺序定义了它们在运行时的执行顺序。可以在Controller中使用Feature将systems组实例化。

     

    三、注意实现

    1、因为 ECS 系统会根据脚本的名称生成对应的框架代码,所以脚本的命名最好根据功能什么的取一个合适的名称,必要的时候添加命名空间

    2、Compoent 组件代码有更新,注意需要重新 Generate 生成一次,其他部分代码更改可以不需要重新 Generate

     

    四、ECS 的下载

    Github 上下载

    1、在github 上输入 Entitas 可以搜到 ECS 框架

    Releases 下载地址:https://github.com/sschmid/Entitas-CSharp/releases

    Github下载地址:https://github.com/sschmid/Entitas-CSharp

     

    2、往下拉,可以看到一些介绍,适用平台,一些学习资料等信息

     

     

    3、可以在旁边的 Release 下载最新版本,或者以前版本

     

     

    4、点击 Entitas.zip 下载即可

     

    6、或者在 Download 点击下载

     

     

    7、最后下载保存即可

     

    Unity Asset Store 中下载

    1、进入 Unity Asset Store,搜索 Entitas,即可找到 ECS 框架

     

    2、Unity Asset Store 中 Entitas 与Github 的差不多(其实应该是一样的)

     

    Unity 的 Package Manager 中下载

    1、同理打开 Unity ,在 Window-Package Manager 中搜索 Entities 即可搜到

    (目前 Entities 为预览版本,为 DOTs 布局使用的 )

     

    五、ECS 框架导入

    这里讲解 github 上下载的解压包的方法

    1、解压 github 上下载的解压包

     

    2、打开 Unity ,直接把解压的文件拖入 Unity 即可

     

    3、之后就会看到菜单栏多了 Tools 菜单,内容如下

     

    六、ECS 的配置

    1、选择 Tools - Jenny - Preferences ...

     

    2、打开 Jenny ,然后店家 Auto Import 进行一些自动配置

     

    3、之后就会有新的栏目,和配置好的信息

     

    4、一些关键信息的说明

     

    5、Unity 下的 Assembly-CSSharp.csproj 就是 配置信息中的 Project Path ,如果名称与配置信息不一致,进行更改即可

     

    七、ECS 的简单使用( Hello ECS Entitas)

    1、在 Unity 中新建一个 文件夹 Scripts ,管理脚本,并且 ECS 生成的文件夹也将放在这里,然后编写一个ECS component 组件

     

    2、ECS component 中的组件需要生成代码,所以 Tools - Jenny - Preferences ...,并配置 Target Directory 为 Scripts

     

    3、代码就自动生成在了 Scripts 下

     

    4、编写其他System、Featrue、Controller 实现 打印 Hello ECS Entitas……

    (每个文件夹下的功能可以参见上面的专有项介绍)

     

    5、把  Controller 脚本挂在到场景中

     

    6、运行脚本,打印出现,ECS 中就有了对应的 component 组件

     

    八、关键代码

    1、HelloECSComponent

    using Entitas;
    
    
    /// <summary>
    /// HelloECSComponent 组件继承 IComponent
    /// 注入属性为 Game (目前 Entitas 只有  Game,Input)
    /// </summary>
    [Game]
    public class HelloECSComponent : IComponent
    {
        // 变量
        public string message;
    }

     

    2、HelloECSSystem

    
    using System.Collections.Generic;
    using UnityEngine;
    using Entitas;
    
    public class HelloECSSystem : ReactiveSystem<GameEntity>
    {
        /// <summary>
        /// 构建函数,传入上下文
        /// 目前上下文只有 Game,Input
        /// 这里 HelloECSComponent 组件是 Game,故 contexts.game
        /// </summary>
        /// <param name="contexts"></param>
        public HelloECSSystem(Contexts contexts) : base(contexts.game) { 
            
        }
    
        protected override ICollector<GameEntity> GetTrigger(IContext<GameEntity> context)
        {
            return context.CreateCollector(GameMatcher.HelloECS);
        }
    
        /// <summary>
        /// 过滤器,判断上下文是否包含该组件 Component
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override bool Filter(GameEntity entity)
        {
            return entity.hasHelloECS;
        }
    
        /// <summary>
        /// 具体执行的代码
        /// </summary>
        /// <param name="entities"></param>
        protected override void Execute(List<GameEntity> entities)
        {
            foreach (GameEntity entity in entities)
            {
                Debug.Log(entity.helloECS.message);
            }
        }
    }
    

     

    3、InitSystem

    
    using Entitas;
    
    /// <summary>
    /// 初始化系统
    /// </summary>
    public class InitSystem : IInitializeSystem
    {
        private readonly GameContext mGameContext;
    
        /// <summary>
        /// 构造函数,获取上下文
        /// </summary>
        /// <param name="contexts"></param>
        public InitSystem(Contexts contexts) {
            mGameContext = contexts.game;
        }
    
        /// <summary>
        /// 初始化
        /// </summary>
        public void Initialize()
        {
            mGameContext.CreateEntity().AddHelloECS("Hello ECS Entitas……");
        }
    }
    

     

    4、AddSystemsFeature

    
    /// <summary>
    /// 用于添加需要的系统 System
    /// </summary>
    public class AddSystemsFeature : Feature
    {
        // "AddSystemsFeature" 名字自取
        public AddSystemsFeature(Contexts contexts):base("AddSystemsFeature") {
            // 添加系统
            Add(new HelloECSSystem(contexts));
            Add(new InitSystem(contexts));
        }
    }
    

     

    5、GameController

    using Entitas;
    using UnityEngine;
    
    /// <summary>
    /// 控制器,挂在在Unity场景中执行的
    /// </summary>
    public class GameController : MonoBehaviour
    {
        private Systems mSystems;
        // Start is called before the first frame update
        void Start()
        {
            // 获取上下文
            var context = Contexts.sharedInstance;
            // "Systems" 名称自取即可
            mSystems = new Feature("Systems").Add(new AddSystemsFeature(context));
            // 初始化
            mSystems.Initialize();
        }
    
        // Update is called once per frame
        void Update()
        {
            // 执行
            mSystems.Execute();
            // 清除
            mSystems.Cleanup();
        }
    }
    

     

    九、参考博文:

    https://www.cnblogs.com/Firepad-magic/p/12155705.html

    https://zhuanlan.zhihu.com/p/78155704

     

     

    展开全文
  • 一、Entitas适用场景 在写代码时,感觉遇到了瓶颈。在开发大型项目时,现有的编程思想不能很好地提高效率,当代码越来越多时,代码耦合不可避免地越来越多,导致自身bug出现。 Entitas查资料发现,它经过Unity官方...

    一、Entitas适用场景

    在写代码时,感觉遇到了瓶颈。在开发大型项目时,现有的编程思想不能很好地提高效率,当代码越来越多时,代码耦合不可避免地越来越多,导致自身bug出现。

    Entitas查资料发现,它经过Unity官方推荐、某牛推荐,用在守望先锋等大型项目,宣传适合中、大型项目,感觉Entitas是个可靠且使用人数多的大型框架,因此来学习一下,并记录自身学习经历。

     

     

    二、下载地址:

    笔者用的1.9.2版本,下载地址:链接

     

     

    三、Entitas基本配置

    打开方式:Tools——Entitas——Preferences...

    1、点击AutoImport

    2、ProjectPath:VS项目文件名称,将Assets同级目录里的VS项目名称复制到这。

    3、TargetDirectory:Entitas生成的代码会生成到这个文件夹。

    4、点击Generate。

    展开全文
  • 如何使用Entitas开发游戏(FNGGames)

    千次阅读 2018-06-04 23:53:16
    如何使用Entitas开发游戏(FNGGames) 原文链接:How I build games with Entitas (FNGGames) 这个帖子用来说明如何使用Entitas来构建我的游戏工程。假定你对Entitas如何工作已经有了相当好的理解。它并不是一篇...
  • 如何使用Entitas构建游戏

    千次阅读 2018-05-30 11:19:34
    在大型项目中,使用Entitas可以使结构更清晰、稳定、灵活,如果对 Entitas 不是足够了解,可以看看前面几篇 教程 ,本文目的是基于 Entitas 设计一个合理的框架使得 逻辑层 与 表现层 分离,也可以叫 视图层 这样就...
  • Entitas早于《守望先锋》出现在公众视野,2015年的欧洲Unite大会上,Simon sschmid 分享的演讲《Entity System Architecture with Unity》,然后2016年的 《ECS Architecture with Unity by Example》。除了这两个...
  • 使用Entitas ECS的匹配线类型的模板。 特征 低Unity依赖 基本使用者介面 清晰可扩展的项目结构 易于配置 运行时字段调整大小(1) 运行时元素类型计数更改 多种元素/阻滞剂类型 元素匹配 简单的计分设置 组合检测 ...
  • 这是使用Entitas,Forge Networking和MongoDB作为数据库服务的ECS后端的一个非常基本的示例 要运行测试项目: 转到Unitys构建设置,将MultiplayerMenu作为第一个场景,将ClientTest作为第二个场景,然后构建客户端...
  • Entitas-Cpp:Entitas ++是Entitas C#的快速实体组件系统(ECS)C ++ 11端口
  • 不过自从Unity官方启动DOTS以来,Entitas就不再更新了,版本停留在了2019年2月20日发布的1.13.0。 虽然Entitas不再更新了,但是在旧版本的Unity(2019之前)和纯C#环境中还是可以使用的。 源码链接: ...
  • Entity介绍 Entity是ECS框架中三大基本概念之一 :Entity(实体)。ECS中所有的操作对象都是它。它本身对象并不带有任何属性与表达含义,它只有一个在它所有Context中唯一的ID... ECS Entitas源码分析(三)___Component

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 349
精华内容 139
关键字:

entitas

友情链接: LDPC码编译码仿真.zip