ET框架解读其一

这篇具有很好参考价值的文章主要介绍了ET框架解读其一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 版本属于5.0
ECS?
  • 真正的ECS属于是entity-component-system
  • 组件里面只有数据没有方法,system里面是针对组件的方法,system通过查找只需要关注自己想关注的组件集合就可以。
  • 但是ET框架的代码在组件里面写满了方法,有数据又有方法的组件,随时可拆卸,像什么?没错
  • 是Unity的组件模式
  • 看这个资源组件
    ET框架解读其一
  • 而这种组件本质上相当于我们经常用的单例Manager,只不过他是属于系统层面的服务,所以全部挂载到Game这个实体上面了
  • 所以ET框架本身是一个杂糅的东西,他把Unity的组件模式和ECS式的东西混在了一起。
  • 真正的ECS框架可以看这个ECS框架
  • 他是为了用ECS而去用ECS,但本质上还是OOP那一套。
    ET框架解读其一
  • 另外,在我看来ECS其实是对MVC里面的Model业务模型进行了拆分,但是对于VC来说,该怎么写还是怎么写。
  • 当然有失偏颇,我可能看一些ECS的demo源码会有更深入理解
消息处理
  • 在消息处理这方面

  • 它的逻辑是这样的,在点击进入地图的按钮之后他会发送一个消息到服务器,服务器会发送一个玩家ID回来

  • 这个玩家ID就是客户端的唯一标识

  • 在收到服务器的回复消息时,再发送一个创建Unit的内部消息

  • 这个内部消息的处理者会创建这个Unit并进行广播,为什么要广播,不是很懂?为什么不用事件而要用内部消息也很奇怪?

  • 在创建Unit的时候在他身上挂载了寻路组件和移动组件。

  • 而游戏场景里面有一个OperaCompoent,这个组件会实时监听按键的点击并且将点击的位置发送给服务器,服务器再传送回客户端

  • 【这边也挺奇怪的,】

  • 客户端这边接收ClickMapActor消息后解析位置,调用unit的Path组件进行移动。大体流程就是这样。

  • 向服务器发送进入地图
    ET框架解读其一

  • 服务器收到消息后,向Map地图服务器发送信息创建单位
    ET框架解读其一

  • 地图服务器收到消息开始创建单位并添加一系列组件,然后广播给所有的客户端
    ET框架解读其一

  • 客户端收到消息后会检查本地是否存在单位并创建显示
    ET框架解读其一

  • opera组件监听鼠标点击事件并向服务器发送click位置消息
    ET框架解读其一

  • 在服务器接收消息的处理函数里面进行处理
    ET框架解读其一
    -UnitPathFind组件会广播移动信息到其它客户端,地图数据是放置到服务端的,服务端进行寻路,然后将寻路的结果广播给客户端进行移动
    ET框架解读其一

  • 可以看到寻路组件是在服务端的
    ET框架解读其一

ET框架解读其一
ET框架解读其一

  • 客户端收到消息找到对应id的unit开始移动
    ET框架解读其一

  • 但其实这样很不连贯,我发送一个消息,应该await等待获得消息,然后再做处理,这样就弄的很分散不够集中文章来源地址https://www.toymoban.com/news/detail-485133.html

事件处理
  • ET的所有逻辑全部用事件来处理了
  • 这带来一个坏处,就是没办法高内聚。
  • 本来属于一个业务模型里面的逻辑,通过事件分散到了两到三个脚本里面。增加了阅读难度和上下连贯性。
  • 单纯举例来说,游戏初始化后发送了InitScenFinish事件。
  • UI处理模块接收到事件创建UI物体并显示
  • 在各个UI单独的组件比如LoginCom和LobbyCom里面进行UI逻辑撰写即并绑定事件
  • 他把本属于Model层的代码全部写进了静态类Helper里面来调用。
  • 也就是说View层直接调用了Model层代码。其实这样就强耦合了。
  • 直接调用MapHelperET框架解读其一
  • 直接调用LoginHelper
    ET框架解读其一- 它的UI处理也很蹩脚,登录界面属于是LoginState里面,常规来说只需要这样,而我们只需要切换到EnterMapState的时候调用对应接口就行了。这样还上下文明显且连贯
class LoginState:State{
	
	void OnEnter(){
		UI.Show()
	}
	void OnLeave(){
		UI.Hide()
	}

}
  • 但是在它的代码中,在发送登录完成消息后是这样的
    ET框架解读其一
  • 因为他要关闭Login的UI,然后显示Lobby的UI
  • 但其实Login的加载和卸载明明放在一个脚本会更好
    ET框架解读其一

到了这里,关于ET框架解读其一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ET介绍——浅谈AI框架

    AI在游戏中很多,但是为什么大家总是感觉ai编写起来十分困难,我后来思考了一番,主要原因是使用的方法不当。之前大家编写ai主要有几种方案: 我是不知道谁想出来这个做法的,真是无力吐槽。本来对象身上任何数据都是状态,这种方法又要把一些状态定义成一种新的节

    2024年02月05日
    浏览(37)
  • 02-ET框架的ECS编程思想

    TIPS: 本系列贴仅用于博主学习ET框架的记录 今天来学习OOP以外的另一种编程思想—ECS。 ECS:实体(Entity)、组件(Component)、系统(System),同时在框架中(实体即组件、组件即实体)类似电脑是一个实体,键盘是电脑的一个组件,但同时键盘也是一个实体,因为其下面还有按键这种

    2024年02月08日
    浏览(37)
  • ET框架6.0分析二、异步编程

    ET框架很多地方都用到了异步,例如资源加载、AI、Actor模型等等。ET框架对C#的异步操作进行了一定程度的封装和改造,有一些特点: 显式的或者说强调了使用C#异步实现协程机制(其实C#的异步编程天生就能实现这种用法) 强制单线程异步 没有使用C#库的Task,自己实现了E

    2024年02月04日
    浏览(34)
  • ET框架6.0分析三、网络通信

    ET框架的消息机制贯彻始终,包含Entity消息(Awake,Update ...),自定义(Customer)消息,网络消息等。而ET系统的进程包含了客户端、Gate等各种类型的服务器,进程包含各种服务器客户端之间通过网络消息进行通信进行工作。 结构图为了更加明确整体关系,进行了一定程度的简化

    2024年02月08日
    浏览(36)
  • ET框架6.0分析一、ECS架构

    ET框架的ECS架构是从ECS原生设计思想变形而来的(关于ECS架构的分析可以参考跳转链接:《ECS架构分析》),其特点是: Entity:实体可以作为组件挂载到其他实体上,Entity之间可以有父子嵌套关系,和其他ECS架构一样,Entity只允许是纯数据的(除了基本接口) System:和其他

    2024年02月04日
    浏览(35)
  • ET介绍——更为便捷高效的AI框架-行为机(Behavior Machine)

    顾名思义,类比状态机每个节点是一个状态,行为机每个节点是描述一种行为。行为机每个节点之间是互斥的,并且节点相互之间完全不用关心是怎么切换的。这里就不讲状态机跟行为树是怎么做ai的了,这里只讲用行为机怎么做一个ai。举个例子 mmo中的小怪策划案,大致会

    2024年02月05日
    浏览(39)
  • ET7.2+最新版本HybridCLR(huatuo、wolong)热更教程2

    距离《ET7.0+HybridCLR(huatuo)热更教程》这篇教程时间过了两个多月了,特别HybridCLR版本迭代很快,ET官方也升级到最新的7.2版本了。很多工具流都变了,因此用最新的ET版本重新跑了接入HybridCLR流程,记录一些变动操作内容,文章结尾附带github完整的项目工程。 首先去官网下载最

    2023年04月10日
    浏览(34)
  • 【独立闯天下】Prime新传奇!💥原团队的Blazor版本迟迟无音,合并请求石沉大海。于是,我们决定单干!加入Prime Blazor版项目,一起开创崭新的旅程吧!🌟📚

    共建Prime的Blazor版:为开源社区注入新活力 Prime组件库作为一款广受欢迎的开源组件库,一直以来都备受开发者们的青睐。然而,随着技术的不断发展和更新,原团队的Blazor版本似乎已经逐渐失去了活力,长时间没有得到更新和维护。在这样的背景下,一群热爱开源、热衷于

    2024年02月03日
    浏览(78)
  • 如何正确查看pytorch运行时真正调用的cuda版本

    一般情况我们会安装使用多个cuda版本。而且pytorch在安装时也会自动安装一个对应的版本。 正确查看方式:  想要查看 Pytorch 实际使用的运行时的 cuda 目录,可以直接输出之前介绍的 cpp_extension.py 中的 CUDA_HOME 变量。 上面输出的 /usr/local/cuda 即为软链接的cuda版本。  不正确查

    2024年02月11日
    浏览(112)
  • 如何基于 Gin 封装出属于自己 Web 框架?

    在基于 Gin 封装出属于自己的 Web 框架前,你需要先了解 Gin 的基本用法和设计理念。 然后,你可以通过以下步骤来封装自己的 Web 框架: 封装路由:Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的,你可以根据自己的需求,封装出符合应用的业务需求的路由。你可以考虑将路

    2024年02月02日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包