3D Game Programming & Design:游戏智能

本文介绍了游戏智能的概念,包括拟人化、可玩性和趣味性,并详细阐述了“感知-思考-行为”模型在游戏NPC中的应用。讨论了感知、思考和行动的实现,如视觉、听觉、嗅觉的模拟,以及规则推理引擎、状态机引擎和决策树。同时,文章讲解了Unity 3D的导航与寻路系统,包括NavMesh和NavMesh Agent组件。最后,提到了编程实践中的坦克对战游戏AI设计,包括坦克运动控制、AI坦克的寻路和射击行为以及玩家交互的实现。
摘要由CSDN通过智能技术生成

游戏智能概述

游戏智能是指:

在游戏规则约束下,通过适当的 算法 使得游戏中 NPC(Non-Player Character) 呈现为具有一定人类智能行为的 博弈对手,让游戏玩家面临不间断的挑战,并在挑战中有所收获,包括知识和技能等。

游戏智能需要具备以下几个性质:

  • 拟人化。游戏智能更注重游戏对象行为结果类似(模拟)人,既能做出令人惊讶的有效行为,也会犯各种愚笨的错误,从而与现实世界中不同的人匹配。而人工智能通常是超人设计,追求最佳结果。
  • 可玩性。游戏智能并不意味着高大上的算法,它更注重针对不同类型的玩家设计不同能力的 NPC,例如:“小怪物”,“大boss”等等,通常用等级这个参数来表达游戏智能 agent 的能力。
  • 趣味性。游戏智能设计注重娱乐,而不只是算法研究。因此,算法会集合一些特效,让人感到愉悦。

模型、方法与常用算法

“感知-思考-行为”模型

“sense-think-act” paradigm(范式) 是构造 agent、robot、NPC(Non-Player Character) 的基础概念。自从上世纪80年代提出以来,我们使用 Sense-Think-Act 范例思考机器人如何工作,并设计它们。

1、感知(Sense)

感知是 agent 接收世界信息的行为,其获取的数据将是思考的输入。这里主要要考虑的问题是如何限制信息获取是设计不同级别 agent 的核心问题。

在游戏中,定义获取信息能力通常可以从视觉、听觉和嗅觉等渠道去考虑:

  • 视觉(Vision)

    识别“敌人”的位置和属性 识别“障碍物”及其范围

  • 听觉(Sound)

    识别事件的方向和距离

  • 嗅觉(Smell)

    获得玩家/事件的痕迹

使用距离、角度、障碍物限制 agent 发现玩家位置等信息,或者使用干扰影响信息的准确性,这些是设计游戏 agent 常见的手段。如果 agent 都拥有玩家位置和导航地图,结果就是一窝蜂的现象,这是没有趣的事情。合适的限制,将使得 agent 在相同的决策算法下,呈现丰富的行为。

一种简单的方法就是 agent 结合不同类型的触发器、探头,构造不同的获取信息的场景。最后将感知的结果放在一个数据结构中(类似 UnityEngine.EventSystems.PointerEventData)

在 Agent Thinking 时,不可获取感知以外的数据信息。

2、思考(Think)

Think 就是算法,它的输入是感知的数据,输出是行为(behaviours)。 思考的算法,通常就是我们所说的游戏规则的一部分,即 agent 能做什么,该做什么。 游戏 agent 的思考类似人脑的决策过程,建立符合游戏玩家难度曲线,可以控制、且符合社会准则的行为。另一个相关问题,玩家难度曲线在编程阶段是未知的,依赖众多玩家与 agent 的操作与对抗结果。它在游戏测试和运维过程中存在巨大不确定性。因此将 agent 决策过程用 If … Then … 硬编码写入程序逻辑是不可行的!

目前主要的方法有:

规则推理引擎

规则推理引擎(Rule-based Inference Engine)也叫产生式系统或推理模型(inference model),是由基于规则的专家系统发展而来。基于规则的专家系统,基本概念包括:

  • 事实(facts): 事实是用来表示已知的数据或信息。
  • 规则(Rules): 即产生式规则,用来表示系统推理的有关知识。
    规则由条件和动作组成,格式一般为:IF 条件 Then 动作,例如 Rule1: Human(x) => Mortal(x)
    (一阶谓词逻辑,离散数学)

状态机引擎

有限状态自动机(Finite State Machine / FSM)是可以图形化的自动执行工具。在 unity 中,它是标准化的 agent(NPC) 动作自动控制工具。定义一个状态机主要工作包括:

  • 状态:该组件定义了一组状态,一个游戏实体或NPC可以选择(巡逻、追逐和射击)
  • 转移:该组件定义了不同状态之间的关系
  • 规则:该组件用来触发状态转移(玩家在视线范围内、距离足够攻击、丢失/杀死玩家)
  • 事件:该组件用于触发检查规则(守卫的可见区域、与玩家的距离等)

决策树

决策树(Decision Trees)又称为行为树(Behaviour Trees)。

3、行动(Act)

行动(Act)将思考(Think)的结果作为输入,该部分的任务就是使得 agent 行为更符合物理世界的规律,使得“心想事成”这样理想的结果变得不确定。

通常需要考虑的要素包括:

  • 准备时间。在准备时间通过光、声等方式提示对手
  • 动作时间。从动作开始到结束是一个序列
  • 干扰因素。利用风、地形、随机数使炮弹有一定偏差

Unity 3D 导航与寻路

Unity 导航系统允许创建给游戏角色导航的游戏世界。游戏角色可以在蓝色联通的网格上,找到去任意一点最短的路径,且具有一定爬坡、跳沟壑的能力。

  • NavMesh (Navigation Mesh) 是一种数据结构,它描述了游戏对象可行走的表面。通过三角网格,计算其中任意两点之间的最短路径,用于游戏对象的导航。它是根据场景几何结构自动创建或烘焙构建。
  • NavMesh Agent组件创建具有寻路能力的角色。Agent 使用NavMesh 推理,避免彼此以及移动障碍物。
  • Off-Mesh Link组件允许将不连接的块之间建立“传送门”。例如,跳过沟渠或围栏,或在穿过它之前打开门,都可以被描述为 Off-Mesh Link。
  • NavMesh 障碍 组件允许您描述 agent 在移动时应避免的移动障碍。由物理系统控制的桶或箱子就是很典型的障碍。在障碍物移动的过程中,Agent 尽力避开它,但一旦障碍物变得静止,它将在导航网格上开一个洞,以便 Agent 可以改变他们的路径以绕过它,或者静止的障碍物阻塞路径,使得 Agent 找到其他路线。

编程实践

作业要求

本次作业基本要求是三选一,我选择的是第二个:坦克对战游戏 AI 设计。

具体如下:

从商店下载游戏:“Kawaii” Tank 或 其他坦克模型,构建 AI 对战坦克。具体要求

  • 使用“感知-思考-行为”模型,建模 AI 坦克
  • 场景中要放置一些障碍阻挡对手视线
  • 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位
  • AI 坦克必须在有目标条件下使用导航,并能绕过障碍。(失去目标时策略自己思考)
  • 实现人机对战

本次作业参考和使用了Unity3D官方教程的Tanks! Tutorial里面的模型进行构建。同时参考了博客Unity 3D官方教程——Tanks!学习记录来对各项参数进行配置。

代码分析

添加文本实现坦克的各种运动,打开Scripts下Tank下TankMovement脚本并编辑。这里实现了血量的初始化和控制坦克在被子弹击中后的血量变化以及发射子弹的操作。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tank : MonoBehaviour {
   
    private float hp =1000.0f;
    // 初始化
    public Tank()
    {
   
        hp = 1000.0f;
    }

    public float getHP()
    {
   
        return hp;
    }

    public void setHP(float hp)
    {
   
        this.hp = hp;
    }

    public void beShooted()
    {
   
        hp -= 100;
    }
    
    public voi
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
3D游戏引擎编程-3D.Game.Engine.Programming.pdf,作者:Stefan Zerbst & Oliver Duvel,本书是英文版,大小 271 MB,被压缩成两部分分别上传。这是第一部分,第二部分下载地址:http://download.csdn.net/source/2697012。 IT业中游戏业最吃香?为什么呢?大家说有多少网民没有玩过游戏?不过中国游戏人才也是缺啊!看看盛大为了招收人才自己到各个大学去招收计算机本科生啊!中国最大的游戏公司竟然自己去招收人才,可想而知啊!!中国游戏人才到底缺多少!我们缺的不是玩游戏的,而是做游戏的!大家想必都有过要自己做游戏的梦想吧?为什么没有实现呢?因为觉得自己办不到?错!你能办到!从现在开始吧!我们一起将韩国泡菜赶出国门!一起努力实现中国第一个暴雪公司!创造中国自己畅销全世界的游戏!以中国的武侠魅力去震撼世界!我们不要让外国人牵着鼻子走! 我们技术上比不过美国,美工上比不过日本,创意上比不过韩国!我们有什么可以自豪的呢?中国游戏产业的振兴就靠我们这一代,不要让我们的下一代都只玩美国的XBOX,日本的PS,韩国的传奇!我们看到了中国游戏业这块大蛋糕已经让外国瓜分的剩不下多少了!中国的公司为了代理外国的一个游戏争的头破血流!这样的事情不要让他们再一次次重演了! 游戏开发职业虽然含金量较高,但从业门槛也高高在上,因此,学习前一定要先看看自己是否适合这一职业。判断标准主要有以下七点:一看学历,一般需有大专以上的教育背景;二看年龄,游戏业是年轻人的行业,18-35岁是最佳年龄段;三看逻辑性,从业人员除具备IT基本知识外,还要有相当强的逻辑能力,否则将难以担当复杂的编程工作;四看知识面,游戏软件开发设计编剧、美术、音乐、动画、程序等诸多方面,知识面宽泛;五看创新能力,游戏开发需要经常翻花头,对开发者创新能力的要求较高;六看合作能力,游戏软件开发往往由一个小组负责,需要开发者有团队合作精神;七看兴趣,游戏开发是一项异常枯燥的工作,如果对此没有足够的兴趣,将很难做好。 发布的这些书都是原版的英文书籍,没有中文的,因为中文翻译的慢!大家如果想从事游戏开发,我真的建议大家先学英语,英语是你一切的一切的基础!大家也可以下载一个金山词霸来边翻译边看!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值