黑神话:悟空中的AI行为树设计

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 【8月更文第26天】在《黑神话:悟空》这款游戏中,NPC(非玩家角色)的智能行为对于创造一个富有沉浸感的游戏世界至关重要。为了实现复杂的敌人行为模式,游戏开发团队采用了行为树作为NPC决策的核心架构。本文将详细介绍《黑神话:悟空》中NPC AI的设计原理,特别关注行为树的设计与实现。

在《黑神话:悟空》这款游戏中,NPC(非玩家角色)的智能行为对于创造一个富有沉浸感的游戏世界至关重要。为了实现复杂的敌人行为模式,游戏开发团队采用了行为树作为NPC决策的核心架构。本文将详细介绍《黑神话:悟空》中NPC AI的设计原理,特别关注行为树的设计与实现。

行为树概述

行为树是一种用于实现复杂决策逻辑的结构化方式。它由一系列节点组成,每个节点代表一个任务或者一个决策点。节点之间通过分支和序列连接起来,形成一棵树状结构。行为树的基本节点类型包括:

  • Action Node(动作节点):执行具体的动作。
  • Condition Node(条件节点):检查某个条件是否满足。
  • Composite Node(复合节点):组合多个子节点,例如Sequence(顺序)、Selector(选择器)等。

NPC AI行为树设计

1. 敌人行为树基础结构

在《黑神话:悟空》中,敌人的行为树通常包含以下部分:

  • Root Node(根节点):所有行为树的起点。
  • Selector Node(选择器节点):尝试按顺序执行子节点,直到有一个成功。
  • Sequence Node(顺序节点):按顺序执行所有子节点,必须全部成功才能视为成功。
  • Condition Node(条件节点):检查特定条件是否满足。
  • Action Node(动作节点):执行具体的行为动作。

示例行为树结构

+-------------+
| Root Node   |
+-----+-------+
      |
      v
+-------------+
| Selector    |
+-----+-------+
      |       |
      v       v
+-------------+ +-------------+
| Sequence A  | | Sequence B  |
+-----+-------+ +-----+-------+
      |       |       |
      v       v       v
+-------------+ +-------------+ +-------------+
| Condition 1 | | Condition 2 | | Condition 3 |
+-----+-------+ +-----+-------+ +-----+-------+
      |       |       |       |
      v       v       v       v
+-------------+ +-------------+ +-------------+ +-------------+
| Action 1A   | | Action 1B   | | Action 2    | | Action 3    |
+-------------+ +-------------+ +-------------+ +-------------+

2. 具体节点实现

示例代码:Condition Node

class ConditionNode : public BehaviorTreeNode {
   
public:
    virtual ~ConditionNode() {
   }

    virtual BehaviorStatus Execute(EnemyAI* enemy) override {
   
        if (CheckCondition(enemy)) {
   
            return BehaviorStatus::SUCCESS;
        }
        return BehaviorStatus::FAILURE;
    }

private:
    bool CheckCondition(EnemyAI* enemy) {
   
        // 检查条件,例如敌人是否能看到玩家
        return enemy->CanSeePlayer();
    }
};

示例代码:Action Node

class ActionNode : public BehaviorTreeNode {
   
public:
    virtual ~ActionNode() {
   }

    virtual BehaviorStatus Execute(EnemyAI* enemy) override {
   
        // 执行具体动作,例如攻击玩家
        enemy->Attack();
        return BehaviorStatus::SUCCESS;
    }
};

3. 实现复合节点

示例代码:Sequence Node

class SequenceNode : public BehaviorTreeNode {
   
public:
    virtual ~SequenceNode() {
   }

    virtual BehaviorStatus Execute(EnemyAI* enemy) override {
   
        for (auto& child : children) {
   
            auto status = child->Execute(enemy);
            if (status == BehaviorStatus::FAILURE) {
   
                return BehaviorStatus::FAILURE;
            } else if (status == BehaviorStatus::RUNNING) {
   
                return BehaviorStatus::RUNNING;
            }
        }
        return BehaviorStatus::SUCCESS;
    }
};

示例代码:Selector Node

class SelectorNode : public BehaviorTreeNode {
   
public:
    virtual ~SelectorNode() {
   }

    virtual BehaviorStatus Execute(EnemyAI* enemy) override {
   
        for (auto& child : children) {
   
            auto status = child->Execute(enemy);
            if (status != BehaviorStatus::FAILURE) {
   
                return status;
            }
        }
        return BehaviorStatus::FAILURE;
    }
};

4. 敌人行为树实例

假设我们有一个简单的敌人行为树,其目标是让敌人寻找并攻击玩家:

+-------------+
| Root Node   |
+-----+-------+
      |
      v
+-------------+
| Selector    |
+-----+-------+
      |       |
      v       v
+-------------+ +-------------+
| Sequence A  | | Sequence B  |
+-----+-------+ +-----+-------+
      |       |       |
      v       v       v
+-------------+ +-------------+ +-------------+
| CanSeePlayer| | IsHurt      | | IsLowHealth|
+-----+-------+ +-----+-------+ +-----+-------+
      |       |       |       |
      v       v       v       v
+-------------+ +-------------+ +-------------+ +-------------+
| Attack      | | Flee        | | Heal        | | Idle       |
+-------------+ +-------------+ +-------------+ +-------------+

伪代码实现

// 假设这是敌人AI类的一部分
void EnemyAI::UpdateBehaviorTree() {
   
    behaviorTree->Execute(this);
}

// 假设这是行为树的根节点
class EnemyBehaviorTree : public BehaviorTreeNode {
   
public:
    virtual ~EnemyBehaviorTree() {
   }

    virtual BehaviorStatus Execute(EnemyAI* enemy) override {
   
        // 选择器节点
        auto selector = new SelectorNode();

        // 序列节点A
        auto sequenceA = new SequenceNode();
        sequenceA->AddChild(new ConditionNode([](EnemyAI* e) {
    return e->CanSeePlayer(); }));
        sequenceA->AddChild(new ActionNode([](EnemyAI* e) {
    e->Attack(); }));

        // 序列节点B
        auto sequenceB = new SequenceNode();
        sequenceB->AddChild(new ConditionNode([](EnemyAI* e) {
    return e->IsHurt(); }));
        sequenceB->AddChild(new ActionNode([](EnemyAI* e) {
    e->Flee(); }));

        // 序列节点C
        auto sequenceC = new SequenceNode();
        sequenceC->AddChild(new ConditionNode([](EnemyAI* e) {
    return e->IsLowHealth(); }));
        sequenceC->AddChild(new ActionNode([](EnemyAI* e) {
    e->Heal(); }));

        // 序列节点D
        auto sequenceD = new SequenceNode();
        sequenceD->AddChild(new ActionNode([](EnemyAI* e) {
    e->Idle(); }));

        selector->AddChild(sequenceA);
        selector->AddChild(sequenceB);
        selector->AddChild(sequenceC);
        selector->AddChild(sequenceD);

        return selector->Execute(enemy);
    }
};

结论

通过上述例子可以看出,《黑神话:悟空》中的NPC AI行为树不仅能够实现复杂的决策逻辑,而且还可以轻松地扩展和维护。行为树的设计让开发者能够清晰地组织和管理NPC的行为,从而创造出更加生动和互动的游戏体验。

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
深度强化学习在异构环境中AI Agent行为泛化能力研究
随着人工智能技术的迅猛发展,AI Agent 在游戏、智能制造、自动驾驶等场景中已逐步展现出强大的自适应能力。特别是深度强化学习(Deep Reinforcement Learning, DRL)的引入,使得智能体能够通过与环境的交互,自动学习最优的行为策略。本文将系统性地探讨基于深度强化学习的AI Agent行为决策机制,并结合代码实战加以说明。
深度强化学习在异构环境中AI Agent行为泛化能力研究
|
5月前
|
人工智能 搜索推荐
「社会实验室」成真!SocioVerse:复旦联合小红书开源社会模拟世界模型,用AI预演群体行为
SocioVerse是由复旦大学联合小红书等机构开源的社会模拟框架,基于大语言模型和千万级真实用户数据构建,能精准模拟群体行为并预测社会事件演化趋势。
337 2
「社会实验室」成真!SocioVerse:复旦联合小红书开源社会模拟世界模型,用AI预演群体行为
|
7月前
|
传感器 人工智能 机器人
【01】人形机器人研究试验-被有些网友痛骂“工业垃圾”“人工智障”上春晚的人形AI机器人-宇树科技机器人到底怎么样??-本系列优雅草卓伊凡亲自尝试下人形机器人的制造-从0开始学习并且制作机器人-可以跟随卓伊凡
【01】人形机器人研究试验-被有些网友痛骂“工业垃圾”“人工智障”上春晚的人形AI机器人-宇树科技机器人到底怎么样??-本系列优雅草卓伊凡亲自尝试下人形机器人的制造-从0开始学习并且制作机器人-可以跟随卓伊凡
391 1
【01】人形机器人研究试验-被有些网友痛骂“工业垃圾”“人工智障”上春晚的人形AI机器人-宇树科技机器人到底怎么样??-本系列优雅草卓伊凡亲自尝试下人形机器人的制造-从0开始学习并且制作机器人-可以跟随卓伊凡
|
7月前
|
机器学习/深度学习 人工智能 监控
AI监控智能化客户行为轨迹分析技术
本方案通过目标跟踪技术(如DeepSORT)和多摄像头协作,实时分析顾客在商场内的行为路径,识别高频活动区域,优化商场布局与商品陈列,提供个性化营销服务。基于深度学习与时序数据分析,精准捕捉顾客动线,提升购物体验与销售转化率。
367 2
|
8月前
|
机器学习/深度学习 存储 人工智能
淘天算法工程师玩转《黑神话》,多模态大模型如何成为天命AI
淘天集团未来生活实验室的算法工程师们以ARPG游戏《黑神话:悟空》为平台,探索多模态大模型(VLM)在仅需纯视觉输入和复杂动作输出场景中的能力边界。他们提出了一种名为VARP的新框架,该框架由动作规划系统和人类引导的轨迹系统组成,成功在90%的简单和中等难度战斗场景中取得胜利。研究展示了VLMs在传统上由强化学习主导的任务中的潜力,并提供了宝贵的人类操作数据集,为未来研究奠定了基础。
|
机器学习/深度学习 人工智能 数据处理
AI计算机视觉笔记一:YOLOV5疲劳驾驶行为检测
如何使用云服务器AutoDL进行深度学习模型的训练,特别是针对YOLOV5疲劳驾驶行为训练检测
|
人工智能 数据挖掘 数据库
客户在哪儿AI的企业全历史行为数据与企业信息查询平台上的数据有何区别
客户在哪儿AI的企业全历史行为数据 VS 企业信息查询平台上的数据。
|
人工智能 定位技术 图形学
【unity实战】制作敌人的AI,使用有限状态机、继承和抽象类多态 定义不同状态的敌人行为
【unity实战】制作敌人的AI,使用有限状态机、继承和抽象类多态 定义不同状态的敌人行为
578 1
|
人工智能 数据可视化 程序员
【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树
【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树
902 0
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
AIGC技术深度解析:生成式AI的革命性突破与产业应用实战
蒋星熠Jaxonic,AI技术探索者,深耕生成式AI领域。本文系统解析AIGC核心技术,涵盖Transformer架构、主流模型对比与实战应用,分享文本生成、图像创作等场景的实践经验,展望技术趋势与产业前景,助力开发者构建完整认知体系,共赴AI原生时代。
40 1