游戏引擎中ECS架构及内存布局

一.ECS

     E:Entity-游戏世界中的人,房子等实际物体,这些物体可能由不同的MetaMesh,ParticleSys组成

     C:Component-组成实际物体的MetaMesh,ParticleSys,也可以是一个实际物体

     S:System-游戏引擎,负责完成实际物体的初始化,内存管理,帧同步,线程同步等核心功能

二.ECS内存布局

     1.创建GameSystem,维护Entities列表

public class GameSystem
{public List<GameEntity> entities = new List<GameEntity>;
}

     2.创建GameSystem引擎回调接口,帧渲染回调,实例创建回调,物理检测回调等

public abstract class GameSystemCallback
{public virtual void OnEntityInit();public virtual void OnGameSystemTick();public virtual void OnEntityDeInit();
}int main()
{while(true){for(GameEntity entity: entities){#FPS游戏帧同步回调GameEntityComponent scriptComponent = entity.getScript()scriptComponent.OnGameSystemTick();}}
}

     3.创建实际的Entity,可能是一个人

public class Agent: GameEntity
{public int age;public int health;public int height;
}

     4.创建对应Entity下的Component,人具备技能,人具备盔甲,人具备AI三种不同的Component

public SkillComponent : GameEntityComponent
{public override void OnFrameTick(){//释放技能按键,业务逻辑}
}public AIComponent : GameEntityComponent
{public override void OnFrameTick(){//人物AI行为}
}public ArmorComponent : GameEntityComponent
{public override void OnFrameTick(){//人物盔甲挂载和卸下}
}

     5.将三种不同的Component添加至Entity中,检测人是否具备了技能,盔甲等特性

Agent agent = new GameEntity();
agent.addComponent(skillComponent);
agent.addComponent(armorComponent);
agent.addComponent(aiComponent);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python包以及异常、模块、包的综合案例(较难)

1.自定义包 python中模块是一个文件&#xff0c;而包就是一个文件夹 有这个_init_.py就是python包&#xff0c;没有就是简单的文件夹 包的作用&#xff1a;当我们的模块越来越多时&#xff0c;包可以帮助我们管理这些模块&#xff0c;包的作用就是包含多个模块&#xff0c;但包…

基于JSP的校园宿舍电费缴纳系统【附源码】

基于JSP的校园宿舍电费缴纳系统 效果如下&#xff1a; 系统首页界面 学生登录界面 公告栏页面 在线留言页面 个人中心界面 管理员登录界面 管理员功能界面 宿舍信息管理界面 余额管理界面 使用电量管理界面 余额提醒管理界面 学生功能界面 研究背景 随着网络的高速发展&…

【Python】相等性比较运算(==, is)的学习笔记

1. 相等性比较运算&#xff1a; & is Python中有两种比较运算符和is&#xff1b; 和 is 的主要区别在于它们比较的对象属性不同&#xff1a; 运算符&#xff1a; 比较对象的值或内容是否相等。调用对象的 __eq__() 方法来进行比较。可以被重载&#xff08;在自定义类中重…

使用休眠的方式来解决电脑合盖后偶尔不能正常睡眠的问题

背景描述 用过Windows笔记本电脑的用户应该都偶尔遇到过这样的一个问题&#xff0c;就是电脑直接合上盖后放在包里&#xff0c;按道理来说应该会自动进入睡眠模式&#xff0c;但是等电脑再从包里拿出来时发现电脑很烫&#xff0c;并且已经没电了&#xff0c;似乎并没有进入到休…

【乐企文件生成工程】关于乐企文件生成工程的详细介绍

发票文件生成方式有两种思路&#xff1a; 1、根据已有的OFD模板&#xff0c;动态替换ofd模板内容&#xff1b;之后将ofd转pdf&#xff08;局限&#xff1a;单行问题不大&#xff09; 可在【乐企】专栏查看详细代码详情可以在此处了解【乐企】有关乐企能力测试接口对接-基础版&a…

Web,RESTful API 在微服务中的作用是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Web&#xff0c;RESTful API 在微服务中的作用是什么&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Web&#xff0c;RESTful API 在微服务中的作用是什么&#xff1f; 在微服务架构中&#xff0c;Web 和 RESTful …

Python语法结构(三)(Python Syntax Structure III)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Python编程基础入门:从风格到数据类型再到表达式

前期已经详细介绍了环境搭建&#xff1a;PycharmPython、VsCodePython Python编程基础入门&#xff1a;从风格到数据类型再到表达式 在编写Python程序时&#xff0c;理解其基础结构和语法是每个初学者的必修课。这篇文章将带你深入了解Python的基本编程风格、数据类型、类型转…

【功能安全】相关项定义item definition

目录 01 item definition定义 02 相关项组成 03 相关项最佳实践 📖 推荐阅读 01 item definition定义 概念阶段的开发是以相关项定义(Item Definition)开始的,相关项定义是对系统的描述,此系统也是标准中安全要求应用的对象。 相关项定义目的: a) 在整车层面对相关…

【跑酷项目02】实现触发并在前方克隆金币

完整代码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CoinColoneManager : MonoBehaviour {// 这个脚本用来检测金币触发区&#xff0c;一旦触发就在前方指定位置克隆金币// 首先做触发检测 OnEnterTrigger(), // 用克隆函…

如何打包和分发 Python 应用程序

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 所有使用包管理器&#xff08;例如 pip&#xff09;下载的 Python 库&#xff08;即应用程序包&#xff09;都是使用专门执行此任务…

rootless模式下istio ambient鉴权策略

环境说明 rootless模式下测试istio Ambient功能 四层鉴权策略 这里四层指的是网络通信模型的第四层&#xff0c;主要的传输协议为TCP和UDP。 用于限制服务间的通信&#xff0c;比如下面的策略应用于带有 app: productpage 标签的 Pod&#xff0c; 并且仅允许来自服务帐户 clus…

js动态生成二维码

html&#xff1a; <script type"text/javascript" src"js/qrcode.min.js"></script>&#xff08;资源里可下载&#xff09; <div class"tan_ma" style"width:100%; height:100%; position:fixed; left:0; top:0; backgrou…

云计算第四阶段: cloud二周目 07-08

cloud 07 一、k8s服务管理 创建服务 # 资源清单文件 [rootmaster ~]# kubectl create service clusterip websvc --tcp80:80 --dry-runclient -o yaml [rootmaster ~]# vim websvc.yaml --- kind: Service apiVersion: v1 metadata:name: websvc spec:type: ClusterIPselector…

速盾:免费cdn加速节点是什么?

免费CDN加速节点是指一种提供免费的内容分发网络&#xff08;CDN&#xff09;服务的网络节点。CDN是一种通过将网站的静态内容分布到全球各个节点上&#xff0c;从而加快网站访问速度的技术。免费CDN加速节点是免费提供这种服务的节点&#xff0c;在全球范围内分布着许多这样的…

ChatTTS在Windows电脑的本地部署与远程生成音频详细实战指南

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章主要介绍如何快速地在Windows系统电脑中本地部署ChatTTS开源文本转语音项目&#xff0c;并且我们还可以结合Cpolar内网穿透工具创建公网地址&#xff0c;随时随…

面试头棒-Java如何判断两个对象是否相等

在Java中&#xff0c;判断两个对象是否相等通常涉及两个层面的比较&#xff1a;引用相等&#xff08;也称为身份相等&#xff09;和内容相等&#xff08;也称为值相等&#xff09;。 引用相等&#xff08;Identity Equality&#xff09;&#xff1a; 使用 运算符。如果两个引…

react里实现左右拉伸实战

封装组件&#xff1a; 我自己写的一个简单的组件&#xff0c;可能有bug。不想自己写&#xff0c;建议用第三方库实现。 新建一个resizeBox.tsx文件写上代码如下&#xff1a; import React, { ReactNode, useState, useEffect, useRef } from react; import styles from &quo…

【中危】Oracle TNS Listener SID 可以被猜测

一、漏洞详情 Oracle 打补丁后&#xff0c;复测出一处中危漏洞&#xff1a;Oracle TNS Listener SID 可以被猜测。 可以通过暴力猜测的方法探测出Oracle TNS Listener SID&#xff0c;探测出的SID可以用于进一步探测Oracle 数据库的口令。 建议解决办法&#xff1a; 1. 不应该使…

大数据治理的关键技术:构建稳固的数据基石

在这个信息爆炸的时代&#xff0c;数据已经成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的爆炸性增长&#xff0c;如何有效治理这些数据成为了一个巨大的挑战。今天&#xff0c;我们就来聊聊大数据治理的关键技术&#xff0c;看看如何构建一个稳固的数据基石&#xf…