xna - 游戏 AI - 行为树

标签 xna artificial-intelligence behavior-tree

如何为游戏制作强大的 AI/脚本系统?

1) 对于所有 NPC/环境/实体,您是否为他们提供单独的单一行为树(例如 patrolBehavior、allyBehavior、vendorBehavior、doorBehavior)?如果屏幕上有 500 个单元,我应该对树进行完整遍历(从根 -> 节点/操作)还是应该对所有单元进行 1 节点处理?

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

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

最佳答案

我会尽量回答你的问题。

  1. 我在静态类中执行所有分支逻辑和行为树,例如:

     public static class Behavior
    {
        //Branch
        public static Action Selector(Func<bool> cond, Action ifTrue, Action ifFalse) {
            return () => { if (cond()) { ifTrue(); } else { ifFalse(); } };
            }
        public static Action Sequencer(Action a, Action b) {
              return () => { a(); b(); }
            }
    
        //Example trees
        public static Func<bool> ifPlayerIsInSight = () => { return true; /*...true iff WorldState shows guard can see player...*/};
    
        public static Action shootAtPlayer = () => { /*...aim guard's weapon at player and fire...*/ };
    
        public static Func<bool> ifUnderFire = () => { return true; /*...true iff WorldState shows guard hears player gunfire...*/};
    
        public static Action takeCover = () => { /*...guard runs for nearest shelter... */};
    
        public static Action walkBackAndForthGuardingDoorway = () => { /*...default guard patrol behaviour...*/ };
    
        public static Action patrollingGuardBehaviour =
          Selector(Behavior.ifPlayerIsInSight, Behavior.shootAtPlayer,
            Selector(Behavior.ifUnderFire, Behavior.takeCover,
              Behavior.walkBackAndForthGuardingDoorway));
    }
    
    1. 在 LateUpdate() 或最后执行,这样它就不会滞后于主循环。

    2. 这取决于你。您可以在每个行为树中实现一个“状态”,或者将其拆分并管理在什么时间使用哪些行为。

关于xna - 游戏 AI - 行为树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357305/

相关文章:

algorithm - 行为树实现

android - 行为树与状态机

c# - XNA - 关于本地(改变)船轴的 3D 旋转 - 我错过了什么?

c# - .NET : How to get time for keypress as precisely as possible?

Xamarin使用跨平台3D引擎

c# - 不在 C# 中处理的随机对象

machine-learning - 神经网络 - 如何最好地处理可变数量的输入

search - 一致和可接受的启发式

artificial-intelligence - 网格世界中策略迭代背后的直觉

lua - 我可以使用 Lua 的 require 来设置调用文件的环境吗?