Unity3D网络实战笔记-第四章

前言:

本章讲解了敌人AI的基础编写方法、结构设计以及导航组件的使用,这里打算根据我自己的需求来对AI功能进行修改和简化。

有限状态机人工智能:

在简单敌人AI中,将敌人的状态分为几个主要模式,普通巡逻、发现敌人后的攻击模式等,简单的状态可以通过ifelse语句来实现,复杂的情况则需要考虑设计模式。

现在暂时对敌人AI添加普通巡逻状态和发现玩家后的攻击状态

普通巡逻状态:

敌人在一定范围内随机移动。首先获取初始位置,随机在初始位置周围设置一个点,敌人走向设置的点,当敌人走到了设置的点后重新随机另一个点,敌人继续移动循环。

攻击状态:

当玩家进入敌人攻击范围时,停止随机移动,并且向玩家发射子弹。设计和编写此状态包含了查找物体以及创建预制体的内容。

寻路:

手动编写寻路方法:

定义路径点:可以用列表或者数组存储多个路径点,让敌人根据路径点进行移动。

设置移动方法:跟之前的随机移动类似,将随机的目标点改成路径点即可。

注:使用transform.childCount可以获得子物体数量

使用GetChild(index)可以按序号获取子物体(这个序号与层级界面中的排序有关)

使用NavMesh自动寻路:

文中也是简单介绍了一下,现在版本更新之后也不知道更改了多少方法,所以简单尝试一下暂时不用到项目里。

行为决策:

主要是定义敌人AI中状态如何转变,比如:

当玩家进入敌人周围一定范围时转变为攻击状态,玩家离开一定时间后恢复待机状态等,简单的行为转换使用ifelse语句即可实现,复杂的行为决策有专门的行为树插件提供解决方案,使用行为树能够构建诸如Boss战之类的敌人AI。

战场系统(单例模式游戏管理器)

文中通过单例模式的脚本来实现游戏的规则,这里就将这部分内容简化为单例模式的应用。

每个游戏都应该有一个GameManager,用于控制游戏的基本内容。

设置单例:

以及使用DontDestoryOnload来让游戏管理器在场景变更时不被销毁,保证场景里存在并且只有一个游戏管理器。

用简单的方法使用单例模式:

  1. 注册玩家,让其他脚本能够方便的获取玩家对象。

  1. 显示关卡时间、获取关卡内敌人数量、出生点等全局信息

  1. 判断玩家状态,确认失败或者胜利条件等。

总结:

文中以构建一个完整的大战场坦克游戏为模板进行开发,由于开发水平限制和时间限制,打算以其他简单休闲游戏模式来代替,因此上面的部分已完成内容可能会被更改,敌人AI等内容也会被简化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值