Xna 游戏AI-行为树
如何为游戏制作一个健壮的AI/脚本系统 1)对于所有NPC/environment/entities,您是否为其提供单独的单一行为树(例如patrolBehavior、allyBehavior、vendorBehavior、doorBehavior)?如果屏幕上有500个单位,我应该在树上做一个完整的过程(从根->节点/操作),还是应该对所有单位进行单节点进度 2)我正在更新()函数中执行AI逻辑。。。但我听说有些游戏有各自的AI线程,有什么想法吗Xna 游戏AI-行为树,xna,artificial-intelligence,behavior-tree,Xna,Artificial Intelligence,Behavior Tree,如何为游戏制作一个健壮的AI/脚本系统 1)对于所有NPC/environment/entities,您是否为其提供单独的单一行为树(例如patrolBehavior、allyBehavior、vendorBehavior、doorBehavior)?如果屏幕上有500个单位,我应该在树上做一个完整的过程(从根->节点/操作),还是应该对所有单位进行单节点进度 2)我正在更新()函数中执行AI逻辑。。。但我听说有些游戏有各自的AI线程,有什么想法吗 3)我想知道如何将我的游戏划分为几个部分/章节
3)我想知道如何将我的游戏划分为几个部分/章节。。。我是否使用一个简单的变量(EVENT=“Mission 3”)来表示玩家的表现,并使其线性化?然后利用上面树中的变量?我将尝试回答您的问题
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));
}
公共静态类行为
{
//分支机构
公共静态操作选择器(funct-cond、Action-ifTrue、Action-ifFalse){
return()=>{if(cond()){ifTrue();}else{ifFalse();};
}
公共静态动作定序器(动作a、动作b){
return()=>{a();b();}
}
//示例树
公共静态函数ifPlayerIsInSight=()=>{return true;/*…true iff WorldState显示守卫可以看到玩家…*/};
公共静态动作射击玩家=()=>{/*…将守卫的武器瞄准玩家并开火…*/};
公共静态函数ifUnderFire=()=>{返回真;/*…真iff WorldState显示守卫听到玩家枪声…*/};
公共静态动作takeCover=()=>{/*…守卫跑向最近的避难所…*/};
公共静态动作walkback和forthguardingdouthood=()=>{/*…默认警卫巡逻行为…*/};
公共静态行动巡逻警卫行为=
选择器(Behavior.ifPlayerIsInSight、Behavior.shootAtPlayer、,
选择器(Behavior.ifUnderFire、Behavior.takeCover、,
行为。回退和守卫门口);
}
C++版本适用于客户端和服务器端。
而且,它是开源的 这是一个非常广泛的问题。如果您开始实施您的AI系统,或者开始阅读,然后带着特定的技术问题回来,您可能会得到更好的答案。通过阅读源引擎AI系统的工作原理,您还可以学到很多东西: