3-6. 蜗牛-基本的移动逻辑和动画
动画相关
切割图片
将蜗牛的图片切割成动画
动画状态机
这里将蜗牛的移动分为 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 各个组件
Layer
Sprite Renderer
Rigidbody2D
Animator
PhysicsCheck
Snail
Character
Attack
BoxCollider2D
CapsuleCollider2D
绑定状态
Snail.Awake
在 Awake 的时候,初始化各个状态
SnailPatrolState.OnEnter
与野猪一样,设置变量、当前速度、动画变量
SnailPatrolState.LogicUpdate
与野猪一样,检查地面和是否撞墙,然后让蜗牛停下来还是继续走
Enemy.FixedUpdate
因为现在蜗牛不管是在什么状态,它都会向前移动。而我们希望蜗牛在 PreMove 的时候不要移动,在 Move 的时候才移动,所以我们就在 FixedUpdate 里面再增加一个判断
这段代码的意识是获取当前动画状态机第 0 层的状态,看看它的状态名字是否叫 snailPreMove