从零开始学习Unity学习笔记:Day16 巡逻敌人2:上下巡逻、脚本复用、预制件

本文介绍如何在Unity中创建游戏对象Eagle,并为其配置物理组件、动画及状态机,实现敌人的巡逻和死亡逻辑。通过复用现有脚本和状态机,简化开发流程。

对象创建

使用Eagle素材创建游戏对象Eagle,并类似为它创建父对象Enemy Eagle还有Point A和Point B来控制飞行范围。调整好Eagle对象的排序图层,为Point A和Point B设置好显示标签。将Eagle对象的Tag修改为Enemy。

物理组件设置

为对象Eagle添加碰撞器(这里采用圆形碰撞器Circle Collider 2D)、刚体。
要注意的是:设置刚体组件时,为了防止Eagle在上下飞行时受到重力的干扰而不能匀速一定,我们将Gravity Scale(重力系数)设置为0从而取消重力影响效果。

复用使玩家死亡的逻辑

要实现使玩家死亡的逻辑,在添加好Script Machine组件后,我们直接选择之前写好的Kill Player脚本就行。
我们希望让玩家在触碰老鹰碰撞体的上半部分时可以杀死老鹰,所以在Kill Player脚本中作微调如下:
原先的-0.5相当于触碰上方3/4的地方都会杀死老鹰。

动画设置:复用动画剪辑

添加Animator组件,创建Eagle的动画控制器。利用素材包的素材创建Eagle的默认飞行动画剪辑,设置好采样速率。
在Animator窗口中,我们需要再添加Eagle死亡的动画,之前说到这个死亡动画对所有敌人都是通用的,我们之前已经创建好了,直接将相应的动画剪辑文件从Project窗口中拖入Animator窗口即可。
接下来的操作和之前的类似,添加动画参数来表示死亡状态,然后创建好状态转移条件、关闭到自身的的转移设置即可。

设置与复用状态机

在Variable组件中照例添加Point A和Point B以及老鹰的垂直速度Vertical Speed作为对象变量。
添加State Machine组件,然后新建State Graph,删除掉默认的Start节点。

死亡状态的复用

我们还需要一个Dead状态,这个状态直接从之前Opossum的状态机中复制过来即可,然后创建好Super State和Dead状态之间的过渡,过渡条件也可以从Opossum的状态机复制过来:

巡逻状态的复用:过渡条件

类似之前的类似的操作创建一个Super State来管理巡逻逻辑并切换为Start,这里命名为Patrol(Vertical)。实际上,Patrol(Vertical)里的状态也可以从从Opossum的状态机复制过来,在其基础上修改。
因为我们放置Point A和Point B时,统一遵循了这一原则:
Point A在X/Y轴较小的位置,Point B则是较大的位置(这里是Point A放在下方,Point B放在上方)。
故这里判断超过这两个点的逻辑只需从比较X坐标切换到Y坐标就行,不然的话两个过渡方向的条件也需要交换一下。这里展示修改后的从To Point A切换到 To Point B状态的逻辑,反过来的逻辑修改的地方是一样的。
可以直接在节点上右击,选择Replace来替换节点,注意要选Vector 3版本的Get Y。

巡逻状态的复用:移动逻辑

接下来修改To Point A和To Point B状态里的内容。
之前Opossum的状态机中的这部分逻辑用到了一个单独的脚本Opossum Movement来根据给定的朝向控制移动方向与素材朝向。这里我们可以将其复制一份命名为Eagle Movement。
打开Eagle Movement脚本,需要将之前的水平移动变量修改为在Eagle对象上设置的Vertical Speed(垂直速度)。然后将朝向与速度乘积的结果从输出到X分量修改为输出到Y分量。由于老鹰只进行上下移动,不涉及移动朝向的问题,所以删除Set Flip节点以及相关的朝向判断。最终结果如下:
回到Eagle的状态机,修改To Point A状态:将原先的Opossum Movement节点删除,将刚才的Eagle Movement脚本拖入替代之前的Opossum Movement节点:
在To Point B状态中也是相同的操作。

封装为预制件

大多数情况下场景中会设计多个相同的敌人,如果采取复制制作好的敌人对象的方法,那么当后期修改了其中一个对象时,这些修改不会同步到其他的敌人身上,而需要手动每个都修改以便,不利于项目管理。
为了解决这一问题,我们可以将敌人对象打包封装为预制件(Prefab),这样修改其中的一个预制件对象就会将其所有的拷贝都修改了。
我们在项目窗口中新建一个名为Prefabs的文件夹,然后将要打包的对象从Hierarchy窗口直接拖入到这个文件夹中就封装成预制件了。
此时Hierarchy窗口的预制件会呈现蓝色。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值