0%

一、概述

游戏开发中随机是一个常用的工具,游戏程序员需要常常和rand()函数打交道,但是很多效果其实是无法通过简单的rand()函数实现的,需要更高级的随机技术。以下简单整理了《游戏人工智能》《代码本色》中介绍的几种高级随机技术,主要有:

  • 高斯随机
  • 随机值筛选
  • 自定义分布的随机数
  • 柏林噪声
阅读全文 »

一、图的基本概念

  • 连通图/非连通图:图中任意一个节点都可以通过一条路径到达所有的其他节点即为连通图,否则为非连通图。
  • 带权图:图的边可以带权,用于描述从一个节点到另一个节点的开销。
  • 致密图/稀疏图:边与节点的比率决定一个图是稀疏的还是致密的。在设计算法时需要考虑图是稀疏图还是致密图。
  • 有向图/无向图:边是有方向的图即有向图。实际使用时,有时为了数据结构的统一,也会将无向图当作有向图处理(即每条边都是双向的)。
阅读全文 »

一、引言

之前项目中重构过AI的框架,基于NodeCanvas实现,不过现在项目已经无了,所以想总结下之前重构的思路,做个备忘。

二、设计目的

  • 实现行为树与客户端逻辑的解耦:作为Plugin,保证行为树框架层面没有客户端相关的逻辑和数据,即行为树只负责根据数据做决策,不知晓上层具体的游戏逻辑,可以实现行为树框架在不同游戏之间的移植。
阅读全文 »

一、引言

游戏中的人工智能指拥有决策能力的智能体,会对环境的改变作出相应的决策。其中,移动是智能体最基本也是最通用的行为。

智能体的移动可以分为三个环节:

  • 行为选择:该部分负责选定目标、制定计划。它来告诉我们“到这来”和“做好A、B,然后做C”。
  • 操控:该环节负责计算运动数据,根据选择的行为计算得到一个操控力,它决定智能体往哪儿移动以及如何快速移动。
  • 移动:主要表现智能体运动的机械因素,即控制智能体的移动方式。比如,人和汽车有不同的移动方式,虽然他们具有同样的意向,收到相同的操控力,但是最终的移动表现是完全不同的。
阅读全文 »

故事背景

最近在项目中负责任务系统相关的内容,刚重写了整个任务系统,趁热对过程中的心得做一点总结。

原任务系统——状态模式

原来的任务系统是一个多层状态机,第一层控制不同大类任务之间的切换(如主线任务、分支任务),第二层控制不同种类任务之间的切换(如刷怪任务、剧情任务),第三层控制一个任务下不同行为状态之间的切换(如跑到某地、刷怪、对话等行为)。三层状态机中,中间层使用了状态模式实现,其余两层使用判断进行状态切换。在游戏设计之初,这种设计方法可能可以满足策划的需求,但随着需求的增多,问题就逐渐暴露出来,大致可以总结出几个问题:

阅读全文 »

一 概述

NativeChannel提供Lua层通过反射调用C#层代码的机制,支持对静态类和非静态类中属性、方法、委托的调用,并支持在Lua层使用宏定义对代码进行隔离。通过NativeChannel可以不生成额外的wrap文件来达到Lua层访问C#层的效果,调用更加灵活,适合需要集成到Lua层但又要灵活增删的模块(如SDK)。

阅读全文 »