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

这篇具有很好参考价值的文章主要介绍了ET介绍——更为便捷高效的AI框架-行为机(Behavior Machine)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是行为机

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

小怪在出生点周围巡逻。发现周围有玩家则选择一个玩家做目标,追击该目标玩家,追到目标玩家则攻击目标玩家,发现距离出生点太远则返回,返回到出生点则继续巡逻

1.定义ai的各种行为

我们首先定义好怪物有哪些行为。很简单,我们直接根据策划案中的字面意思,怪物大致有这么几种行为:
a.巡逻
b.选择一个玩家追击并且攻击
e.返回出生点。

注意很多状态机会把移动作为一种状态,这在行为机中是不对的,因为巡逻,追击,返回都会有移动,移动只是玩家行为节点中的一个部分,移动跟巡逻,追击,返回并不是互斥的。

节点不要拆的太细,因为每个行为是个协程,我们可以在行为节点中写十分复杂的逻辑,比如有些同学可能会把 选择一个玩家追击并且攻击 这一个节点拆成 a 选择目标 b 追击目标 c 攻击目标.

甚至还有人会把巡逻拆的更细,拆成a.寻找一个点 b.移动 c.等待一定时间。这都是状态机跟行为树的思维,因为状态机跟行为树可能希望移动节点可以共用。这都是增加了麻烦,不合理,不要用状态机跟行为树的思维去想行为机。行为机中,节点只是描述一种行为,并不需要共用,共用的永远是各种函数。

2.填充满足行为的条件

我们把每个行为确定好对应的条件,一旦条件满足则会进入该行为,取消上一个行为(协程)
a. 巡逻的条件:身上没有玩家目标,周围没有玩家,距离出生点 < 10米
b. 选择一个玩家追击并且攻击: 周围有玩家,距离出生点 < 10米
c. 返回出生点: 距离出生点 > 20米
其实条件一旦列出,那么节点中的Check方法自然也就实现了

3.实现行为

a. 巡逻的伪代码:

while (true)
{
    pos = 出生点周围找一个点
    bool ret = await MoveToAsync(pos,cancelToken);
    if (!ret) // false表示协程取消, 则需要return,停止整个协程
    {
        return;
    }
    // 移动到了,随机等待2-4秒
    randomTime = RandomHelper.Random(2000, 4000);
    bool ret = await TimeComponent.Instance.Wait(randomTime, cancelToken)
    if (!ret) // false表示协程取消, 则需要return,停止整个协程
    {
        return;
    }
}

 

这样,如果b c条件不满足的话,怪物就永远在巡逻节点协程中,不停的找一个点移动,等待,移动,等待

b. 选择目标追击并且攻击目标节点的伪代码:

while (true)
{
    target = SelectTarget()
    while (true)
    {
        while (true)
        {
            // 追击目标
            pos = 计算离目标0.2米的一个点
            // 这里不能以目标作为移动目标,因为怪物要距离玩家稍远一点
            await MoveToAsync(pos, cancelToken);
            if (!ret) // false表示协程取消, 则需要return,停止整个协程
            {
                return;
            }
            // 距离玩家 < 0.5米,表示追到了玩家,就不需要追了
            if (距离玩家<0.5米)
            {
                break;
            }            
        }
        // 追击到了,攻击玩家
        while (true)
        {
            // 
            spellId = SelectSpell();
            if (spellId == 0) // 可能技能在cd,等待500ms再试
            {
                bool ret = await TimeComponent.Instance.Wait(500, cancelToken)
                if (!ret) // false表示协程取消, 则需要return,停止整个协程
                {
                    return;
                }
                continue;
            }
            await CastSpell(target);
            // 攻击完成后停止一段时间
            bool ret = await TimeComponent.Instance.Wait(1000, cancelToken)
            if (!ret) // false表示协程取消, 则需要return,停止整个协程
            {
                return;
            }

            // 距离玩家 > 0.5米, 距离玩家远了,break攻击循环,继续追击
            if (距离玩家<0.5米)
            {
                break;
            }    
        }
    }
    

    // 这里加个time,防止上面两个while循环没有进入,结果就会导致一直执行 target = 选择一个目标 这句话,会导致死循环
    bool ret = await TimeComponent.Instance.Wait(100, cancelToken)
    if (!ret) // false表示协程取消, 则需要return,停止整个协程
    {
        return;
    }
}

 

c. 返回出生点伪代码:

while (true)
{
    // 整个返回过程是无敌的
    using (Buff buff = AddBuff(无敌))
    {
        pos = 找到离出生点10米的点
        bool ret = await MoveToAsync(pos,cancelToken);
        if (!ret) // false表示协程取消, 则需要return,停止整个协程
        {
            return;
        }
        // 移动到了, buff会删除,或者切换成其它状态,协程退出也会删除无敌buff
    }
}

 

其实巡逻跟返回两个节点也可以合并成一个节点,这个大家自己去尝试尝试。可以看出,行为机编写是非常简单,代码是非常易读的。就这么一个怪物的逻辑,用行为树来编写,节点就很多了,而且并不好阅读跟重构。整个逻辑可能还有些瑕疵,不过意思应该很明白了。文章来源地址https://www.toymoban.com/news/detail-451250.html

总结

  1. 行为机节点并不需要共用,行为机的节点只是表示一段逻辑,可以做的非常非常非常庞大,比如做机器人的时候,一个做任务,只有一个节点。里面代码调用了无数的协程方法。
  2. 行为机共用的是函数,不是节点,不要想着这个节点应该抽出来共用,这个想法是错误的。
  3. 行为机永远只关注当前行为,永远不需要关心上一个行为,当满足行为条件就直接打断上个协程,执行当前节点的协程即可。所以只需要定义好玩家有哪些行为,ai自然而然的就写出来了。
  4. 节点不要拆的太细,没有必要

    ET开源地址地址:egametang/ET: Unity3D Client And C# Server Framework (github.com)   qq群:474643097

到了这里,关于ET介绍——更为便捷高效的AI框架-行为机(Behavior Machine)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • AI图片物体移除器:高效、便捷的AI照片物体擦除工具

    在我们的日常生活中,照片是一种重要的记录和表达方式。然而,有时候我们会遇到需要将照片中的某些物体和元素去除的情况。这时候,传统的图像处理软件可能过于复杂,让人望而却步。为了解决这个问题, AI图片物体移除器 的软件应运而生。这款软件是一款Windows平台

    2024年01月23日
    浏览(47)
  • 高效便捷的远程管理利器——Royal TSX for Mac软件介绍

    Royal TSX for Mac是一款功能强大、操作便捷的远程管理软件。无论是远程桌面、SSH、VNC、Telnet还是FTP,用户都可以通过Royal TSX轻松地远程连接和管理各种服务器、计算机和网络设备。 Royal TSX for Mac提供了直观的界面和丰富的功能,让用户能够快速便捷地管理和组织远程连接。用

    2024年01月17日
    浏览(42)
  • 手机AI便捷高效 三星Galaxy S24系列开启移动办公新体验

    在当今快节奏的工作当中,高效的沟通和信息处理能力是成功的关键。随着生成式AI技术的飞速发展,很多职场人已经开始借助AI的力量提升基础工作的效率。全新的三星Galaxy S24系列搭载一系列强大的AI应用,提供无缝、高效、实用的办公体验,让用户无需复杂设置也能尽享

    2024年04月15日
    浏览(94)
  • 行为树(Behavior Trees)

    行为树(Behavior Trees)是一种在游戏开发中广泛使用的AI设计模式,主要用于描述AI的行为和决策过程,实现更加智能和自然的游戏AI。它由多个节点组成,每个节点代表一个行为或决策,按照特定的方式连接在一起,形成一个树状结构。 在行为树中,根节点是AI的起点,通过

    2024年01月19日
    浏览(39)
  • [Unity] Unity 插件Behavior Designer行为树使用

    在Tools - Behavior Designer - Editor中打开行为树编辑编辑窗口 选择一个游戏物体 在Behavior Designer中右键Add Behavior Tree 2.1 Parallel 组件下方的行为会平行执行 分别为下方的三个组件添加了三个输出到Console的Action,可以发现Console中在同一时间做了三个输出 2.2 Sequence 组件下方的行为会

    2024年02月11日
    浏览(36)
  • 公开 学生课堂行为数据集 SCB-Dataset Student Classroom Behavior dataset

    公开 学生课堂行为数据集 SCB-Dataset Student Classroom Behavior dataset b站:https://www.bilibili.com/video/BV1Fv4y1H7sa/ arxiv: https://arxiv.org/pdf/2304.02488.pdf github: https://github.com/Whiffe/SCB-dataset 百度云:https://pan.baidu.com/s/1y3lGEYd-I-jxZKyAyw4MPw?pwd=zdbg extraction code: ZDBG

    2024年02月12日
    浏览(41)
  • AGI之Agent:《Generative Agents: Interactive Simulacra of Human Behavior生成代理:人类行为的交互模拟》翻译与解读

    AGI之Agent:《Generative Agents: Interactive Simulacra of Human Behavior生成代理:人类行为的交互模拟》翻译与解读 目录 《Generative Agents: Interactive Simulacra of Human Behavior》翻译与解读 Figure 1: Generative agents are believable simulacra of human behavior for interactive applications. In this work, we demonstrate generat

    2024年01月25日
    浏览(43)
  • 【威胁情报挖掘-论文阅读】学习图表绘制 基于多实例学习的网络行为提取 SeqMask: Behavior Extraction Over Cyber Threat Intelligence

    🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 前些天发现了一个人工智能学习网站,内容深入浅出、易于理解。如果对人工智能感兴趣,不妨点击查看。 论文涉及7位专家的评估,不方便模仿

    2024年03月20日
    浏览(52)
  • 最新开源方案!Cocos Creator 写一个ECS框架+行为树,实现格斗游戏 AI

    引言: 实现游戏 AI 的方式有很多,目前最为常用的主要有有限状态机和行为树。和有限状态机相比,行为树有更好的可扩展性和灵活性,能实现更复杂的 AI 需求。开发者  honmono 在 Cocos Creator 中用一个  ECS + BehaviorTree 框架 实现了一个格斗 AI Demo,一起来看看他的方案。 De

    2024年02月12日
    浏览(50)
  • 高效便捷构造 Http 请求

    对于Get请求: 地址栏直接输入 点击收藏夹 html 中的 link script img a… form 标签 这里我们重点强调 form 标签构造的 http请求 使用 form 标签构造http请求. form 的重要参数: action: 构造 http 请求的 URL 是什么 method:构造 http 请求的方法是 GET 还是 POST(form 仅支持 GET 和 POST) input 的重要参数

    2023年04月14日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包