10 2021 档案

摘要:16、测试行为树 在播放游戏前,重新调整玩家的位置让它不会立刻被AI发现。开始游戏后,在内容浏览器中打开行为树,找到工作栏中的下拉菜单,它当前显示“没有选中调试对象“,点击它并选中”AIC Third PersonCharacter“,现在我们可以看到行为树的执行流程。 选中随即漫游事件的等待节点, 阅读全文
posted @ 2021-10-21 23:24 achevery 阅读(994) 评论(0) 推荐(1)
摘要:15、追逐玩家 现在我们的AI无法做出任何决策,它总是执行相同的决策。我们先把感知系统中的相关信息提供给AI,让AI知道如何做出决策,然后我们会修改行为树。我们首先需要创建新的黑板键,这样我们就能在行为树上保存这些信息。打开”BB_EnenmyAI “,在左侧的“黑板”选项卡中,点击“新建”按钮,选 阅读全文
posted @ 2021-10-21 23:10 achevery 阅读(880) 评论(1) 推荐(1)
摘要:解释行为树原理,并建立行为树 阅读全文
posted @ 2021-10-21 21:59 achevery 阅读(1047) 评论(0) 推荐(0)
摘要:为了让AI能够对我们添加的视觉感官作出反应,我们需要在AI看见某个对象时,从感知系统中收集一些信息。为此我们将用到“On Target Perception Updated”事件,来捕获并存储AI感知的信息以及它感知信息的方式。最后,我们会在事件上设置一个断点,以便逐步进行调试并查看捕获到的信息。 阅读全文
posted @ 2021-10-21 21:50 achevery 阅读(1166) 评论(0) 推荐(0)
摘要:建立AI感知、AI感知和Gameplay调试器 阅读全文
posted @ 2021-10-20 22:23 achevery 阅读(1220) 评论(0) 推荐(0)
摘要:寻路网格体和Gameplay调试器、AI感知原理 阅读全文
posted @ 2021-10-20 22:20 achevery 阅读(721) 评论(0) 推荐(0)
摘要:接上一节 6、 寻路网格体代理 通过允许配置多个“代理”,虚幻引擎使得用户能够轻松为大小各异的AI创建寻路网格体。首先,选中世界大纲视图中的“RecastNavMesh”,找到细节面板中的“生成”分段,如下图所示。这里的几个选项都与代理相关,分别是“代理半径”(Agent radius)、“代理高度 阅读全文
posted @ 2021-10-08 16:30 achevery 阅读(775) 评论(0) 推荐(0)
摘要:接上一节 4、 寻路原理 在场景中进行寻路是AI的基本功能,但这种寻路并非简单地从A点移动到B点。寻路有两个关键部分:计算路径和躲避障碍。在本模块中,我们将假设对象是静态的。如果要让AI在场景中移动,就需要用到寻路网格体。寻路网格体用于帮助AI在场景中进行寻路。网格体由大量凸多边形组成,规定了AI可 阅读全文
posted @ 2021-10-07 18:45 achevery 阅读(630) 评论(0) 推荐(0)
摘要:1、 创建项目和场景 首先,新建第三视角的蓝图项目,然后根据自己需求设置障碍物。 (1) 将障碍物放置在地面的快捷操作:首先选中障碍物,将其移至地面上方,然后按“End”键,实现障碍物放置在地面。 (2) 复制障碍物的快捷操作:选中障碍物,在障碍物处于移动状态,按住“Alt”键,实现复制。 2、 A 阅读全文
posted @ 2021-10-06 17:13 achevery 阅读(950) 评论(0) 推荐(0)
摘要:下面用生产者和消费者问题来展示协程如何解决软件架构中“谁拥有主循环”的问题。在一种设计中,程序通过调用消费者启动。当消费者需要新值时就唤醒生产者,生产者向消费者返回新值后挂起,直到消费者再次将其唤醒。因此,我们将这种设计称为消费者驱动( consumer-driven)式的设计。 同时,我们可以使用 阅读全文
posted @ 2021-10-05 19:55 achevery 阅读(142) 评论(0) 推荐(0)
摘要:Lua的协程很像系统中的线程,也是一个独立的执行线。不同之处是,线程是并行执行的,而协程是协作式的,即同一时刻只有一个协程在执行,并且只有它自己显式请求挂起时,执行权才会转换。协程是一系列的可执行语句,拥有自己的栈、局部变量和指令指针,同时协程又与其他协程共享了全局变量和其他几乎一切资源。Lua语言 阅读全文
posted @ 2021-10-05 18:29 achevery 阅读(456) 评论(0) 推荐(0)
摘要:Lua具有自动内存回收机制,但是垃圾收集器只能回收那些它认为是垃圾的东西,不会回收那些用户认为是垃圾的东西。比如将一个对象放在一个数组中但没有用时,它就无法被回收,这是因为即使当前没有其他地方在使用它,但数组仍引用着它,除非用户告诉Lua这项引用不应该阻碍此对象的回收,否则Lua是无从得知的。 Lu 阅读全文
posted @ 2021-10-04 19:26 achevery 阅读(872) 评论(0) 推荐(0)
摘要:Lua中没有类,即没有在对象生成中有模子的概念,但是有原型的概念。基于原型的语言(prototype-based language)中,每个对象可以有一个原型(prototype)。原型也是一种普通的对象,当对象(类的实例)遇到一个未知操作时会首先在原型中查找。类和原型都是一种组织多个对象间共享行为 阅读全文
posted @ 2021-10-04 16:20 achevery 阅读(337) 评论(0) 推荐(0)
摘要:面向对象有三个核心特征:类,继承,私有性。基于这三方面,介绍Lua的面向对象的编程和实现原理(没介绍的会在之后的随笔介绍)。从很多意义上讲,Lua语言中的一张表就是一个对象。使用参数self是所有面向对象语言的核心点。 先看下一段代码,这是一个简单表达账户储存和提取的代码: Account = {b 阅读全文
posted @ 2021-10-04 15:24 achevery 阅读(125) 评论(0) 推荐(0)
摘要:元表和元方法:对于表,我们可以使用元表和对应的元方法来定义表之间的操作,如算术操作、关系操作等等。Lua在创建表时,默认不带元表,可以使用函数setmetatable 来设置或修改任意表的元表,使用函数getmetatable来查看表: t1 = {} setmetatable(t, t1) pri 阅读全文
posted @ 2021-10-01 20:17 achevery 阅读(133) 评论(0) 推荐(0)