ECS 使用组件的组合代替 Actor 的继承,就是出于简化系统复杂度的考虑
我在网上看到的示例是说,系统要遍历他使用到的组件,我想的是,其实也可以是,要交互的时候就访问实体是否有这个组件,有的话这个事件才能被实体的组件处理。感觉应该也是这个结构的意思。

示例:
我需要玩家和敌人都被视为一个角色,他们作为角色都有相同的逻辑,比如受到伤害,做出决策
一开始我是先新建了一个 BP_RoleBase 然后新建 BP_Role0000 继承这个 BP_RoleBase 表示主角
但是后来我发现,当一些角色需要访问主角的时候,现成的方法中,他们只能拿到 Player Pawn,要拿到 BP_RoleBase 还需要查找。这样就平白多出来一步操作。总览,就是,有两个蓝图可以表示主角,一个是 Pawn,一个是 BP_RoleBase,这样就显得有点多余
实际上,把一些小功能做成组件,然后把组件放到 Actor 中才是更好的
一个优点是便于访问,你只需要对一个 Actor 用 GetComponent 就行,不需要 Cast to
一个优点是便于管理,有这个 Component 的就是角色,没有的就不是,这样,任何 Actor 都可以是角色,而不需要都继承一个角色父类蓝图,还可以动态切换角色身份,只需要动态添加组件就好了,这也是继承父类蓝图做不到的

1.基于 BluePrint 继承的逻辑需要判断 Actor 的蓝图父类

2.基于 Component BluePrint 的逻辑只需要获取 Actor 是否有指定组件

3.带来的优点例如,不需要在初始化加载一些引用,比如玩家引用
本来我是希望 Widget 的基类获得玩家的指定父类的引用,发现 Widget 不能继承之后,我就感觉好像这个逻辑根本就是多此一举

[UE4] Component BluePrint 组合 代替 BluePrint 继承 实现 ECS 结构相关推荐

  1. 【Java设计模式 面向对象设计思想】五 多用组合少用继承编程

    我们经常会听到说多用组合少用继承,但是拜托,继承是面向对象四大特性之一啊,为什么地位反不如组合了呢,为什么不推荐使用继承?组合相比继承有哪些优势?如何判断该用组合还是继承?围绕这三个问题进行以下讨论 ...

  2. UE4 编辑器下修改蓝图类继承的父类 ReparentBlueprint C++

    一.添加代码,修改蓝图类继承的父类 .cpp #include "Kismet2/BlueprintEditorUtils.h" #include "Kismet2/Ki ...

  3. 为何说要多用组合少用继承?

    在面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承.为什么不推荐使用继承?组合相比继承有哪些优势?如何判断该用组合还是继承?今天,我们就围绕着这三个问题,来详细讲解一下 ...

  4. 理论七:为何说要多用组合少用继承?如何决定该用组合还是继承?

    在面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承.为什么不推荐使用继承?组合相比继承有哪些优势?如何判断该用组合还是继承?今天,我们就围绕着这三个问题,来详细讲解一下 ...

  5. 在设计原则中,为什么反复强调组合要优于继承?

    今日推荐21 款 yyds 的 IDEA插件这 56 个代码注释让我笑吐了注解+反射优雅的实现Excel导入导出(通用版)Fluent Mybatis 牛逼!Nginx 常用配置清单这玩意比Threa ...

  6. 面向对象设计原则——优先使用对象组合,而不是继承(组合以及与继承的区别)

    看到面向对象设计原则中的合成复用原则: 优先使用对象组合,而不是继承 类继承:也叫白箱复用 对象组合:也叫黑箱复用. 继承某种程度上破坏了封装性,子父类之间的耦合性过高. 对象组合只要求被组合的对象具 ...

  7. C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式....

    C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式. 目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形 ...

  8. 在多模块开发的时候,利用项目继承可以将结构信息、部署信息,将共同的依赖放在一个父类中。...

    在多模块开发的时候,利用项目继承可以将结构信息.部署信息,将共同的依赖放在一个父类中.

  9. mysql组合索引存储_Mysql - 组合索引的B+树存储结构(最左前缀原理)

    Mysql的B+树索引在单列索引上比较好理解,结构如下: 那组合索引的B+树存储结构是什么样的呢,为什么会有最左前缀原理,看了很多帖子找到了答案 数据表 B+树结构 b c d设置组合索引 对于联合索 ...

最新文章

  1. jfinal js 拦截_jfinal全局数据拦截器
  2. composer update报错: The https://packagist.phpcomposer.com/p/xxx file could not be downloaded
  3. Pat乙级1084 外观数列
  4. 【前端开发系列】—— 文字阴影与样式
  5. linux打包运行python文件_Linux下安装pyinstaller用于将py文件打包生成一个可执行文件...
  6. 2018秋招面经:斗鱼、滴滴、百度、美团、小米、腾讯
  7. Eclipse导入Tomcat源码
  8. 聚类(part2)--经典聚类算法
  9. laravel使用php artisan migrate 报错 SQLSTATE[42000]的解决方式
  10. python sqlserver 列名_报表自动化,三流用Excel,二流用Python,一流用它
  11. 智能会议系统(25)---linphone代码分析
  12. python 2和Python3的常见区别及修改办法
  13. 团队任务3 每日立会
  14. ACE主动对象模式学习
  15. GNOME下也是Alt+F2,输入gnome-terminal
  16. java给list排序_java 怎么将List里面数据排序
  17. 鼠标单击变双击修正工具软件DoubleClickFix下载
  18. Leetcode 995. Minimum Number of K Consecutive Bit Flips
  19. 【原创】【android逆向系列】1:真机(小米note 3)root(从本人简书博客移入)
  20. 程序员与颈椎病(三):颈椎病终极解决办法

热门文章

  1. RedHat系列软件管理(第二版) --二进制软件包管理
  2. iOS 瀑布流布局实现详解
  3. bindService过程
  4. 前端笔试题面试题记录(下)
  5. svn 修改文件的二进制或文本标记
  6. 《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一1.3 建立自动化策略...
  7. 算法积累之处理数组数据
  8. BZOJ 1090: [SCOI2003]字符串折叠 区间DP
  9. 低脂肪肉能帮你减肥吗?
  10. C++ 类访问控制public/private/protected探讨