【unity】学习制作类银河恶魔城游戏-5-

在-1---4-中,了解了unity的基础操作,从创建一个人物开始,通过状态机和代码完善人物的各种功能达到预期效果,随着功能的越来越多,状态机的处理也就越发麻烦,因此,从零开始设计一个合理的状态机很有必要

梦开始的地方

创建一个新的项目

修改舒服的布局


创建状态机,通过脚本控制状态机

创建脚本

编写PlayerStart脚本

编写PlayerStateMachine脚本

创建并编写PlayerIdleState脚本

alt + enter 快速生成构造函数

同理生成override


同理创建并编写PlayerMoveState

编写Player脚本

以上,状态机完成

导入素材

创建Animator controller,并导入

打开窗口

创建Player Idle动画

创建PlayerMove动画

创建转换条件Bool

状态树如下,设置条件和过渡时间

配置控制器

完善PlayerState代码

重构代码

#region #endregion 创建一片可折叠空间

作用:可以折叠起来,更整洁

移动和静止状态

创建一个平台

给人物创建刚体,创建碰撞体积,模型中心点对其,冻结Z轴

PayerStates

PlayerIdleState

PlayerMoveState

让他动起来

player


PlayerMoveState

将脚本应用给Player

人物成功动了起来,相比于之前的处理方式,这样代码逻辑更为简洁(学习难度也更高)

添加移动速度

应用移动速度

rb在player中定义,传值给Playerstate类,在子类PLayerMoverState中使用


新的状态PLayerGroundState

修改PlayerIdleState和playerMoveState的继承关系

创建新的动作


创建混合树


完善状态树,记得修改过度时间和判断条件

创建一个和PLayerGroundState相对的PlayerAirState,创建PlayerJumpState
同理继承框架

在Player中声明


编辑具体的跳跃代码

编译具体的Air代码

编译具体的Ground代码

Debug:前文中代码写错导致报错

修改,一定要注意大小写!!

Debug:PlayerStateMachine的命名不规范

修改,PLayerStateMachine继承错误,不能继承MonoBehaviour

Debug:错误的实例化对象

修改,在有rb的代码前面加上player就好了,推测原因是rb传参中出了问题
经检查是PLayerState中少了定义

现在将player.rb.简化为rb.成功运行

增加跳跃力量高度

应用

给状态机的yVelocity赋值

posted @ 2025-01-01 11:34  plusu  阅读(149)  评论(0)    收藏  举报