jjzjj

ET介绍——单线程异步

单线程异步前面几个例子都是多线程实现的异步,但是异步显然不仅仅是多线程的。我们在之前的例子中使用了Sleep来实现时间的等待,每一个计时器都需要使用一个线程,会导致线程切换频繁,这个实现效率很低,平常是不会这样做的。一般游戏逻辑中会设计一个单线程的计时器,我们这里做一个简单的实现,用来讲解单线程异步。//example2_3classProgram{privatestaticintloopCount=0;privatestaticlongtime;privatestaticActionaction;staticvoidMain(string[]args){Console.WriteLine($

ET介绍——CSharp协程

什么是协程说到协程,我们先了解什么是异步,异步简单说来就是,我要发起一个调用,但是这个被调用方(可能是其它线程,也可能是IO)出结果需要一段时间,我不想让这个调用阻塞住调用方的整个线程,因此传给被调用方一个回调函数,被调用方运行完成后回调这个回调函数就能通知调用方继续往下执行。举个例子:下面的代码,主线程一直循环,每循环一次sleep1毫秒,计数加一,每10000次打印一次。privatestaticvoidMain(){intloopCount=0;while(true){inttemp=watcherValue;Thread.Sleep(1);++loopCount;if(loopCoun

ET介绍——C#更好的协程

更好的协程上文讲了一串回调就是协程,显然这样写代码,增加逻辑,插入逻辑非常容易出错。我们需要利用异步语法把这个异步回调的形式改成同步的形式,幸好C#已经帮我们设计好了,看代码//example2_2classProgram{privatestaticintloopCount=0;staticvoidMain(string[]args){OneThreadSynchronizationContext_=OneThreadSynchronizationContext.Instance;Console.WriteLine($"主线程:{Thread.CurrentThread.ManagedThre

ET介绍——更为便捷高效的AI框架-行为机(Behavior Machine)

什么是行为机顾名思义,类比状态机每个节点是一个状态,行为机每个节点是描述一种行为。行为机每个节点之间是互斥的,并且节点相互之间完全不用关心是怎么切换的。这里就不讲状态机跟行为树是怎么做ai的了,这里只讲用行为机怎么做一个ai。举个例子mmo中的小怪策划案,大致会这么写:小怪在出生点周围巡逻。发现周围有玩家则选择一个玩家做目标,追击该目标玩家,追到目标玩家则攻击目标玩家,发现距离出生点太远则返回,返回到出生点则继续巡逻1.定义ai的各种行为我们首先定义好怪物有哪些行为。很简单,我们直接根据策划案中的字面意思,怪物大致有这么几种行为:a.巡逻b.选择一个玩家追击并且攻击e.返回出生点。注意很多状态

ET介绍——浅谈AI框架

AI框架1.几种AI的设计AI在游戏中很多,但是为什么大家总是感觉ai编写起来十分困难,我后来思考了一番,主要原因是使用的方法不当。之前大家编写ai主要有几种方案:a.状态机我是不知道谁想出来这个做法的,真是无力吐槽。本来对象身上任何数据都是状态,这种方法又要把一些状态定义成一种新的节点,对象身上状态变化会引起节点之间的转换,执行对应的方法,比如OnEnterOnExit等等。这里以怪物来举例,怪物可以分为多种状态,巡逻,攻击,追逐,返回。怪物的状态变化有:巡逻->追逐巡逻状态发现远处有敌人变追逐状态巡逻->攻击巡逻发现可以攻击敌人变攻击状态攻击->追逐攻击状态发现敌人有段距离于是去追逐攻击-

【开源游戏】Legends-Of-Heroes 基于ET 7.2的双端C#(.net7 + Unity3d)多人在线英雄联盟风格的球球大作战游戏。

Legends-Of-HeroesFlameskyDexive/Legends-Of-Heroes:Abattleofballsgame,lolstyle.基于ET7.2的双端C#(.net7+Unity3d)多人在线英雄联盟风格的球球大作战。(github.com) 一个LOL风格的球球大作战游戏,基于ET7.2,使用状态同步 Main基于C#双端框架[ET7.2],同步到ET主干详情请看日志。(https://github.com/egametang/ET)注意:已经升级.Net7,请安装.Net7SDK.此游戏为ET7.2的一个实践项目demo,玩法主要是球球大作战类型的吃食物吃敌人/被

ET框架6.0分析三、网络通信

概述ET框架的消息机制贯彻始终,包含Entity消息(Awake,Update...),自定义(Customer)消息,网络消息等。而ET系统的进程包含了客户端、Gate等各种类型的服务器,进程包含各种服务器客户端之间通过网络消息进行通信进行工作。ET框架消息结构结构图为了更加明确整体关系,进行了一定程度的简化,剔除掉了一些消息解包等一些细节NetCompontent网络组件有Client客户端、Server服务器(Gate)、Inner内网服务等多态,进程业务使用网络组件进行通信,网络组件会对连接建立一个Secsiom会话对象,封装连接信息和相关操作Service和Channel实现负责Ne

记录:ET6 框架,由于 vs2019 不支持 .NET 6,在[生成解决方案]“Client-Server.sln“解决方案时会发生的报错

ET 自己的论坛 ET社区 中的帖子内容,百度好像不能直接找到结果。记录一下,便于搜索。首先,IDE选择哪个版本(大家强调很多次了)ET6依赖.NET6,IDE应当选择:VS2022或Rider2021.3.x(对应支持.NET6的版本,可以从 Rider官方文章得到相关信息)VS2019、Rider2021.1.x均不支持.NET6,因此都无法正常使用。VS2019只会在编译时报错,无法通过。Rider不支持.NET6的版本会自动提示"不完全支持.NET6″的提示。(这一点Rider做的比较好,问题明确)其次,VS2019的报错信息里能提炼出什么信息现在IDE,应该选择什么版本已经明确了。回

ET7.2+最新版本HybridCLR(huatuo、wolong)热更教程3

一、背景介绍上篇文章介绍使用ET的工作流接入HybridCLR,这篇文章再简单介绍使用HybridCLR的打包工作流接入方法。大家可以对比两种不同的接入HybridCLR的方式,感受不同的工作流程,对HybridCLR和ET有更深的了解。二、工程准备ET的工程下载和HybridCLR接入,具体操作可以参考上篇文章的详细介绍,目前最新的HybridCLR版本是0.10.3。三、热更DLL制作1.修改程序集的Platforms属性以Unity.Hotfix.Codes.asmdef为例,默认Unity.Hotfix.Codes的是Editor生效由于改热更dll采用HybridCLR的dll制作流

ios - 在 UILabel et.al 中使用 NSString 子类

我需要将额外的数据编码到NSString(说来话长,请不要问为什么...)我使用here中概述的方法对NSString进行了子类化:当我将这些子类之一指定为UILabel's文本时,我希望在询问标签文本时能取回它。但事实并非如此。(我得到一个NSString集群实例)MyString*string=[[MyStringalloc]initWithString:@"Somestring"];UILabel*l=[[UILabelalloc]initWithFrame:CGRectMake(0,0,100,100)];l.text=string;NSString*t=l.text;//no