首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏AI -行为树

游戏AI -行为树
EN

Stack Overflow用户
提问于 2012-04-27 20:19:37
回答 2查看 1.5K关注 0票数 3

如何为游戏制作健壮的人工智能/脚本系统?

1)对于所有NPC的/环境/实体,您是否给它们一个单独的行为树(例如patrolBehavior、allyBehavior、vendorBehavior、doorBehavior)?如果屏幕上有500个单元,我应该在树上进行一次完整的传递(从根->节点/操作)还是为所有单元执行1节点进度?

2)我正在执行update()函数中的AI逻辑.但我听说有些游戏有各自独立的AI线,有什么想法吗?

3)我想知道如何把我的游戏分成几个部分/章节.我是否使用一个简单的变量(EVENT=的“任务3")来表示玩家的状态,并将其全部线性化?然后利用上面树中的变量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-24 09:35:57

  1. 每个NPC/Agent都有自己的行为树。树是更新的,它知道在哪里继续,所以效率通常是相当好的。
  2. AIs可以在主线程中更新,也可以在分离的头中更新。这取决于你。
  3. 这取决于你。

行为学是一个非常优秀的。

行为学支持行为树、有限状态机和分层任务网络。行为可以在设计器中进行设计和调试,由游戏导出和执行。

C++版本适合客户端和服务器端。

而且,它是开源的!

票数 0
EN

Stack Overflow用户

发布于 2012-05-23 08:38:09

我试着回答你的问题。

  1. 我在静态类中执行所有分支逻辑和行为树,例如: 公共静态类行为{//分支公共静态动作选择器( Func cond,Action ifTrue,Action ifFalse) {true () => { if (cond () ) { ifTrue ();}ifTrue( };};}公共静态动作Sequencer(操作a,操作b) {b() => { a();b();}//示例树公共静态ifPlayerIsInSight =() => {返回真;/*...true iff WorldState显示守卫可以看到玩家.*/ };公共静态动作shootAtPlayer = () => { /*...aim守卫的武器对玩家和火力.*/};公共静态/*...aim ifUnderFire = () => {返回真;/*...true iff WorldState显示守卫听到玩家的枪声.*/};公共静态动作takeCover = () => { /*...guard向最近的庇护所跑去.*/};公共静态行动walkBackAndForthGuardingDoorway = () => { /*...default警卫巡逻行为*/ };公共静态行动patrollingGuardBehaviour = Selector(Behavior.ifPlayerIsInSight,Behavior.shootAtPlayer,Selector(Behavior.ifUnderFire,Behavior.takeCover,Behavior.walkBackAndForthGuardingDoorway))};
代码语言:javascript
复制
1. Do it in LateUpdate() or last so it does not lag the main loop.
2. It is upto you. You could implement a "State" in each behavior tree or split it out and manage which get used at what time.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10357305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档