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

项目相关代码

代码仓库:https://gitee.com/nbda1121440/2DAdventure.git

标签:20240226_0927

posted @ 2024-02-26 09:54  hellozjf  阅读(144)  评论(0编辑  收藏  举报