动画相关
切割图片
将蜗牛的图片切割成动画
动画状态机
这里将蜗牛的移动分为 PreMove 和 Move 两个状态,希望在 PreMove 也就是蜗牛头还没有伸出去的时候不移动,等蜗牛头伸出去之后才移动
当 walk 为 true 的时候,从 snailIdle 立马进入 snailPreMove 状态
snailPreMove 完整播放一帧之后,进入 snailMove 状态
snailMove 完整播放一帧之后,进入 snailPreMove 状态
snailPreMove 和 snailMove 当 walk 为 false 的时候,立马进入 snaleIdle 状态
代码相关
修改父类代码
因为 Enemy 上面必然有 Rigidbody2D、Animator、PhysicsCheck 这三个组件,所以给它添加 RequireCompoent,这样 Snail 继承 Enemy 然后挂载到 Snail 对象上面之后,就会自动添加 Rigidbody2D、Animator、PhysicsCheck 这三个组件
创建蜗牛对象和脚本
用 walk 的第一帧作为蜗牛的默认图片并命名为 Snail,然后创建 Snail 脚本挂载到 Snail 对象上面。接着以此修改 Snail 各个组件
Sprite Renderer
Rigidbody2D
Animator
PhysicsCheck
Snail
Character
Attack
BoxCollider2D
CapsuleCollider2D
绑定状态
Snail.Awake
在 Awake 的时候,初始化各个状态
SnailPatrolState.OnEnter
与野猪一样,设置变量、当前速度、动画变量
SnailPatrolState.LogicUpdate
与野猪一样,检查地面和是否撞墙,然后让蜗牛停下来还是继续走
Enemy.FixedUpdate
因为现在蜗牛不管是在什么状态,它都会向前移动。而我们希望蜗牛在 PreMove 的时候不要移动,在 Move 的时候才移动,所以我们就在 FixedUpdate 里面再增加一个判断
这段代码的意识是获取当前动画状态机第 0 层的状态,看看它的状态名字是否叫 snailPreMove
项目相关代码
代码仓库:https://gitee.com/nbda1121440/2DAdventure.git
标签:动画,逻辑,Snail,状态,snailPreMove,移动,蜗牛 From: https://www.cnblogs.com/hellozjf/p/18033708