在-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赋值