当前位置: 首页 > article >正文

[Unity Demo]从零开始制作空洞骑士第三集之导入插件2D toolkit和使用playmaker制作敌人状态机以及扩展FSM脚本

当你看到我这段字的时候,说明我正在火车上用手机打字,因为我要回家过中秋了但我没带电脑。但我记忆又贼差,乘着我还记得我前几个小时都干了什么我先把记得的内容都写到这里,等过两天回去了我再把代码贴出来。

首先还是感谢你坚持到第三期,因为前期的准备工作还是挺混乱的 ,你能全部看懂前两期真的是神人了,请注意本期内容并不会比前面的简单!

 

为什么需要使用2D Toolkit?

当你看到这几个字时,你可能都不知道这是一个插件,没关系我一开始也不知道,因为它好像已经不支持新的更新了,基本上销声匿迹了。

要用它的原因是:首先我们的playmaker可以支持这个插件,说白了这个插件就是能用在playmaker上面,它可以放在fsm的action上面,所以贼好用

然后它用起来也简单了,而且它包含了sprite,animation,tilemap和UI方面的,可以完全平替unity的这些功能

导入插件:2d toolkit后,会发现有一些editor和application上的错误debug,这是因为它已经不支持新版的unity了,所以有一些unity自带的代码已经被弃用或者迭代了,如果被弃用了话我们就删除它,迭代的就用新迭代的方法。随便改改反正都是无关紧要的。

等到没有报错以后,我们就可以找到tk2droot文件夹了,把后缀带demo的文件夹都删掉,这些demo除非你还没搞懂可以点进去看看,如果你完全解读了就可以直接删掉了。

 

然后在asset搜索playmaker.package点击让它导入有关tk2d的playmakerfsm脚本,这些就都是可以用到fsm上的action行为

 

还有其他工作需要完成,比如用tk2dsprite代替sprite renderer,用tk2dspriteanimation代替animator,终于可以不用unity傻呗一样的animator了舒服。

asset文件夹空白处右键create,找到最底端的tk2d,点一下tk2dspritecollection,然后命名knight sprite collection,单击后点下open editor,然后就到了我们把小骑士的sprite拖入到左侧,点开右上角的setting照我下面设置(我图呢?我没电脑啊我不到啊)

 

设置完成后点一下apply,然后你就会发现好像生成了一个叫altas的图集还有一个material,然后我们就可以在小骑士身上用到了,删掉小骑士上面的sprite renderer,添加tk2dsprite,然后collection选择刚刚创建的knight。

然后我们就可以创建tk2dspriteanimation了,asset文件夹空白处右键create,找到最底端的tk2d,点一下tk2dspriteanimation,然后命名knight sprite animation,单击后点下open editor,左上角create 选择clip,然后命名为idle,点击下面的加号一个一个把有关idle的tk2dsprite添加到animation中 然后找到合适的targetframe一遍遍play找到合适的,run动画也是同理。完成后点击apply。

回到小骑士中,删掉上面的animator选择创建tk2danimation,现在idle作为初始动画,勾选play automaticlly

 

回到脚本中来,创建新的脚本.heroanimationcontroller.cs删掉原本的heroanimatorcontroller.cs,完成后点开,此后我们再也不需要使用animator了。(别急代码等我回去后贴)

 

完成以后我们打开herocontroller.cs更改错误debug

运行以后发现动画播放没有问题,接下来就可以制作enemy的行为状态机了。

 

这次我们项目的一个敌人就是大家在空洞遇到的第二个敌人蚊子buzzer,导入buzzer的素材,然后老办法给它一个tk2dsprite和tk2danimation

 

然后我们就可以用playmaker来控制这个敌人的行为了。

如果还没有导入playmaker可以现在导入,然后选择install now下载好后你会发现左上角有个playmaker,点开playmaker窗口你就可以看到一个界面,给buzzer一个playmaker名字就叫chaser,这个是控制buzzer追击玩家的。

既然要追击玩家就要我们collider2d了,给buzzer一个子对象alert range new,完成后给它circle collider2d,勾选是触发器,然后我们创建几个layer,player给小骑士,enemy给buzzer,hero detector给alert range new。创建脚本lineofsight detectors给buzzer,目的是检测应该检测的对象。

然后我就到了我们playmaker的扩展脚本了,那么为什么要扩展呢?肯定是原本的playmaker很多功能action无法满足特定需要啊,好在playmaker提供了自定义创建行为脚本的窗口,接下来我会一个个解释要创建的新自定义脚本

 

创建好后,我们就开始创建state和连线transition了

还需要添加必须的fsm event和fsm variable

 

我将一个个展示fsm的state状态

首先是initial状态

 

事件event是切换state状态的必需品,必须保证每一个state都至少有一个事件。

 

初始化结束后就进入idle状态

 

然后是startle状态

 

判断用的alert?状态,是的话直接进入alert状态

 

alert状态

 

还需要chase in sight

 

以及chase out of sight

 

至此一个循环就构成了完整的buzzer状态机

 

测试的时候我们将buzzer设置成远离玩家的位置,游戏刚开始时,buzzer会保持在idle状态,当玩家进入到circlecollider2d的区域内,状态机会经过一系列状态打到chase in sight状态,直到玩家走出circlecollider2d的区域。

 

至此我们迈出了非常重要的一步,其实很多敌人的行为都是类似的,我们可以在这些大同小异的敌人都用状态机来实现它们相似的行为。

 

所以下一期我打算稍微摆一摆,去创建更多的敌人enemy,让我们的场景更具有生机。

 

 

 

 

 

 

 

 

 

 

 

 

 


http://www.kler.cn/news/308074.html

相关文章:

  • CSP-J初赛每日题目2
  • 深度学习Day-33:Semi-Supervised GAN理论与实战
  • 【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑
  • 华为eNSP使用详解
  • 【编程底层原理】亿级数据表查询最后10条记录limit 99999990,10性能为啥特慢,而且数据库都被查宕机了
  • C语言中数据类型
  • PHP:强大的Web开发语言
  • nginx实现https安全访问的详细配置过程
  • Spring Boot-RESTful API相关问题
  • 开源 AI 智能名片链动 2+1 模式 O2O 商城小程序在社群活动中的应用与时机选择
  • 海外云手机怎么实现TikTok多账号防关联?
  • 【iOS逆向与安全】frida-trace命令大全
  • AI 时代程序员的应变之道
  • 数据分析-25-时间序列预测之基于keras的LSTM+注意力机制预测风速
  • MySQL —— 视图
  • Serverless 安全新杀器:云安全中心护航容器安全
  • 图神经网络模型扩展5--3
  • 完全背包问题(优化版二维)
  • 在 Red Hat 上安装 SQL Server 2022 并创建数据库
  • Java代码实现Httpclient调用-验证码登录拦截获取到列表数据写入数据库
  • 昇腾服务器(Atlas800系列)部署embedding和rerank模型
  • USBCANFD卡再汽车电子行业中得应用
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(三十二)
  • python学习第十节:爬虫基于requests库的方法
  • python开发目录扫描工具
  • Vue3.5+ 响应式 Props 解构
  • 响应式网站的网站建设,需要注意什么?
  • win11 运行vmware workstation 虚拟机很卡,解决办法
  • 应用程序已被 Java 安全阻止:Java 安全中的添加的例外站点如何对所有用户生效
  • Rust 常见问题汇总