首先我们打开一个项目
在这个初始界面我们需要做一些准备工作
导入资源
添加URP渲染管线
在Window下的包管理器搜索Universal RP 点击安装
这样再将Model机器人拖拽至场景有是有颜色的了
下面对这个资源对象的Inspecter每一个属性进行介绍
在这个资源对象的Inspecter最下方可以用鼠标向上拉动获取这个模型场景
我们可以在这个场景中用鼠标左键移动观察这个模型
接下来是Rig :骨架配置的地方
在动画类型下选择最新班Humanoid
Legacy是旧版我们不用
利用新版Humanoid可实现动画的重定向
选择好之后可以点击配置configure
点击之后 进入 unity会自动匹配骨架系统
其中Mapping是动画骨骼绘制地图
而Muscles Settings 是 肌肉设定
了解之后我们开始做项目首先需要一些准备工作
将资源加载到场景中
将资源模型拖拽至场景 完全解压缩后改名为Player
将多种同一部位隐藏
留下一个打开渲染管线
相同操作完成
接下来我们找到手中的武器可以选择是否隐藏
在层级下输入Hand 选择后 按Esc 即可自动找到对应位置
左手也如此,的那这里我们还是将他们取消 因为我们想后期通过代码控制切换武器
接下来双击动画控制器
按住鼠标中键可移动动画单元
在这里我们想自己创建一个动画器 首先将动画器Animator Controller 设置成None
接下来我们在自定义创建的AnimatorController文件包下创建一个动画器
改名为PlayerAC(角色动画控制器)
接下来我们要实现:
按键1设置人物(按0(空手),1,2,3)可以切换武器,
按键2设置切换战斗状态,在战斗状态下可以奔跑,
按键3在战斗状态下设置攻击
我们屡以下逻辑,如想完成该动画器,可以需要三个按键:
int型WeaponID武器编号,
bool型isIdle是否闲置,
isTrigger是否触发攻击,
接着我们需要三个层级状态机:
0层根状态机,
需要一个【自定义空状态武器编号WeaponID】 指向 【自定义空手子状态】进入下层
1层状态机中间层状态机,
指向 闲置状态 指向 非战斗状态NonCombat 和 战斗状态Combat两种状态 进入下层状态机
同时因为夹在中间的1层状态机需要返回层级,则返回状态 指向 闲置状态
2层状态机非战斗状态,
指向 闲置状态 双向 行走状态,并且 闲置状态 和 行走状态 都 指向 退出
2层状态机战斗状态,
指向 闲置状态 双向 跑步状态 双向 攻击状态 ,并且 闲置状态 和 跑步状态 都 指向 退出
屡清逻辑我们开始实现
首先创建 自定义空状态 作为武器选择改名为WeaponID
创建 自定义子状态 作为空手状态,也就是没有武器状态
改名为UNArms
双击进入下一层状态机
选择已设状态动画UNIdle空手状态闲置状态 拖拽 至1层动画机
创建 自定义子状态 非战斗状态NonCombat
接下来应该设置 UNIdle 和 NonCombat的连线,但在设置线之前我们需要一个参数Parameters
来控制 UNIdle 和 NonCombat 之间的指向
添加参数 isCombat
接下来设置线
接下来点击线 线会变成蓝色
这样设置线表明UNIdle状态 在是否战斗状态为错下 指向非战斗状态
反之
同样方法做战斗状态
双击进入2层非战斗状态状态机
首先我们需要拖拽一个 已设状态动画UNIdle空手状态闲置状态 作为入口指向,
再拖拽 已设状态动画UNWalkF空手状态行走状态 等待双向切换,
对UNIdle状态 和 UNWalkF状态 设置线
在设置线前我们需要一个参数 bool类型的isIdle 是否闲置(闲置即为角色停止下的放松状态)
设置线
接下来 UNIdle状态 和 UNWalkF状态都需要连接 Exit退出状态才能返回上级完成循环
设置线
这里可以思考一下,现在是非战斗状态层级状态机 如果想退出该层级状态机,
只需要将线设置成 是否战斗状态为对 就可以
同样,
接下来我们进入2层战斗状态层级状态机
同样我们拖拽一个 已设状态动画UNIdle空手状态闲置状态
再拖拽 已设状态动画UNCombatRunF空手战斗状态奔跑状态
设置线
同样作为末尾层级需要连接Exit退出状态才可以返回上级完成循环
我们再将 已设状态动画 UNAttack空手攻击状态拖拽至场景
此时在设置线前我们需要添加一个参数 Trigger类型的Attack 触发攻击
设置线
回到根0层状态机
我们发现在设置线之前需要一个参数 int类型的WeaponID武器编号
我们回到1层状态机修改桥梁 已设状态动画UNIdle为Opt 作为选择时的已设闲置状态
回到0层状态机
设置线
接下来我们取消各个层级状态机所有连线的Has Exit Time退出时间
重点:除了攻击状态 指向 的连线
制作好状态机后将自定义状态机PlayerAC挂载到Player对象身上
修改2层级战斗状态状态机
运行即可完成空手状态下的任意姿势
同样操作我们加入武器1 Dual
同样过程我们可以将Dual武器的状态机做出来
那么这样还不能完成武器从0空手到1携带武器的跳转过程
我们需要:
进入0空手状态下的2层非状态层级状态机
设置线 在武器编号WeaponID不等于0的状态下 回到根页面
行走状态如果想在行走状态下可以切换武器那么就加这条线:
同样进入0空手状态层级2层战斗状态机
设置线
取消新添加线的退出时间
这样就完成了WeaponID由0到1的转换,但是却不能由1再返回0,所以我们需要在Dual的2层下继续添加线
进入Dual的2层非战斗状态状态机
设置线
同样
进入Dual的2层战斗状态状态机
设置线
也取消新添加线的退出时间
即完成了0转1转0循环的转换
运行即完成实现