unity【动画】操作_角色动画控制器 c#

首先我们打开一个项目

在这个初始界面我们需要做一些准备工作

导入资源

unity【动画】操作_角色动画控制器 c#_第1张图片

unity【动画】操作_角色动画控制器 c#_第2张图片

添加URP渲染管线

在Window下的包管理器搜索Universal RP 点击安装

unity【动画】操作_角色动画控制器 c#_第3张图片

unity【动画】操作_角色动画控制器 c#_第4张图片

unity【动画】操作_角色动画控制器 c#_第5张图片

unity【动画】操作_角色动画控制器 c#_第6张图片

unity【动画】操作_角色动画控制器 c#_第7张图片

这样再将Model机器人拖拽至场景有是有颜色的了

unity【动画】操作_角色动画控制器 c#_第8张图片

下面对这个资源对象的Inspecter每一个属性进行介绍

首先是Modelunity【动画】操作_角色动画控制器 c#_第9张图片

在这个资源对象的Inspecter最下方可以用鼠标向上拉动获取这个模型场景

unity【动画】操作_角色动画控制器 c#_第10张图片

我们可以在这个场景中用鼠标左键移动观察这个模型

unity【动画】操作_角色动画控制器 c#_第11张图片

接下来是Rig :骨架配置的地方

unity【动画】操作_角色动画控制器 c#_第12张图片

在动画类型下选择最新班Humanoid

unity【动画】操作_角色动画控制器 c#_第13张图片

Legacy是旧版我们不用

unity【动画】操作_角色动画控制器 c#_第14张图片

利用新版Humanoid可实现动画的重定向

选择好之后可以点击配置configure

unity【动画】操作_角色动画控制器 c#_第15张图片

点击之后 进入 unity会自动匹配骨架系统

unity【动画】操作_角色动画控制器 c#_第16张图片

其中Mapping是动画骨骼绘制地图

而Muscles Settings 是 肌肉设定

unity【动画】操作_角色动画控制器 c#_第17张图片

unity【动画】操作_角色动画控制器 c#_第18张图片

了解之后我们开始做项目首先需要一些准备工作

unity【动画】操作_角色动画控制器 c#_第19张图片

将资源加载到场景中

unity【动画】操作_角色动画控制器 c#_第20张图片

将资源模型拖拽至场景 完全解压缩后改名为Player

unity【动画】操作_角色动画控制器 c#_第21张图片

将多种同一部位隐藏

unity【动画】操作_角色动画控制器 c#_第22张图片

留下一个打开渲染管线

unity【动画】操作_角色动画控制器 c#_第23张图片

相同操作完成

unity【动画】操作_角色动画控制器 c#_第24张图片

接下来我们找到手中的武器可以选择是否隐藏

在层级下输入Hand 选择后 按Esc 即可自动找到对应位置

unity【动画】操作_角色动画控制器 c#_第25张图片

unity【动画】操作_角色动画控制器 c#_第26张图片

左手也如此,的那这里我们还是将他们取消 因为我们想后期通过代码控制切换武器

unity【动画】操作_角色动画控制器 c#_第27张图片

接下来双击动画控制器

unity【动画】操作_角色动画控制器 c#_第28张图片

按住鼠标中键可移动动画单元

unity【动画】操作_角色动画控制器 c#_第29张图片

在这里我们想自己创建一个动画器 首先将动画器Animator Controller 设置成None

unity【动画】操作_角色动画控制器 c#_第30张图片

接下来我们在自定义创建的AnimatorController文件包下创建一个动画器

unity【动画】操作_角色动画控制器 c#_第31张图片

unity【动画】操作_角色动画控制器 c#_第32张图片

改名为PlayerAC(角色动画控制器)

unity【动画】操作_角色动画控制器 c#_第33张图片

unity【动画】操作_角色动画控制器 c#_第34张图片

接下来我们要实现:

按键1设置人物(按0(空手),1,2,3)可以切换武器,

按键2设置切换战斗状态,在战斗状态下可以奔跑,

按键3在战斗状态下设置攻击

我们屡以下逻辑,如想完成该动画器,可以需要三个按键:

int型WeaponID武器编号,

bool型isIdle是否闲置,

isTrigger是否触发攻击,

接着我们需要三个层级状态机:

0层根状态机,

需要一个【自定义空状态武器编号WeaponID】 指向 【自定义空手子状态】进入下层

1层状态机中间层状态机,

指向 闲置状态 指向 非战斗状态NonCombat 和 战斗状态Combat两种状态 进入下层状态机

同时因为夹在中间的1层状态机需要返回层级,则返回状态 指向 闲置状态

2层状态机非战斗状态,

指向 闲置状态 双向 行走状态,并且 闲置状态 和 行走状态 都 指向 退出

2层状态机战斗状态,

指向 闲置状态 双向 跑步状态 双向 攻击状态 ,并且 闲置状态 和 跑步状态 都 指向 退出

屡清逻辑我们开始实现

首先创建   自定义空状态   作为武器选择改名为WeaponID

unity【动画】操作_角色动画控制器 c#_第35张图片

创建   自定义子状态   作为空手状态,也就是没有武器状态

unity【动画】操作_角色动画控制器 c#_第36张图片

改名为UNArms

unity【动画】操作_角色动画控制器 c#_第37张图片

双击进入下一层状态机

unity【动画】操作_角色动画控制器 c#_第38张图片

选择已设状态动画UNIdle空手状态闲置状态 拖拽 至1层动画机

unity【动画】操作_角色动画控制器 c#_第39张图片

unity【动画】操作_角色动画控制器 c#_第40张图片

创建   自定义子状态   非战斗状态NonCombat

unity【动画】操作_角色动画控制器 c#_第41张图片

unity【动画】操作_角色动画控制器 c#_第42张图片

接下来应该设置 UNIdle 和 NonCombat的连线,但在设置线之前我们需要一个参数Parameters

来控制 UNIdle 和 NonCombat 之间的指向     

添加参数 isCombat

unity【动画】操作_角色动画控制器 c#_第43张图片

unity【动画】操作_角色动画控制器 c#_第44张图片

接下来设置线

unity【动画】操作_角色动画控制器 c#_第45张图片

unity【动画】操作_角色动画控制器 c#_第46张图片

接下来点击线 线会变成蓝色

unity【动画】操作_角色动画控制器 c#_第47张图片

这样设置线表明UNIdle状态 在是否战斗状态为错下 指向非战斗状态

反之

unity【动画】操作_角色动画控制器 c#_第48张图片

同样方法做战斗状态

unity【动画】操作_角色动画控制器 c#_第49张图片

双击进入2层非战斗状态状态机

unity【动画】操作_角色动画控制器 c#_第50张图片

unity【动画】操作_角色动画控制器 c#_第51张图片

首先我们需要拖拽一个   已设状态动画UNIdle空手状态闲置状态   作为入口指向,

unity【动画】操作_角色动画控制器 c#_第52张图片

unity【动画】操作_角色动画控制器 c#_第53张图片

再拖拽   已设状态动画UNWalkF空手状态行走状态   等待双向切换,

unity【动画】操作_角色动画控制器 c#_第54张图片

unity【动画】操作_角色动画控制器 c#_第55张图片

对UNIdle状态 和 UNWalkF状态 设置线

在设置线前我们需要一个参数   bool类型的isIdle   是否闲置(闲置即为角色停止下的放松状态)

unity【动画】操作_角色动画控制器 c#_第56张图片

unity【动画】操作_角色动画控制器 c#_第57张图片

设置线

unity【动画】操作_角色动画控制器 c#_第58张图片

unity【动画】操作_角色动画控制器 c#_第59张图片

接下来 UNIdle状态 和 UNWalkF状态都需要连接 Exit退出状态才能返回上级完成循环

设置线

unity【动画】操作_角色动画控制器 c#_第60张图片

这里可以思考一下,现在是非战斗状态层级状态机 如果想退出该层级状态机,

只需要将线设置成 是否战斗状态为对 就可以

同样,

unity【动画】操作_角色动画控制器 c#_第61张图片

接下来我们进入2层战斗状态层级状态机

unity【动画】操作_角色动画控制器 c#_第62张图片

unity【动画】操作_角色动画控制器 c#_第63张图片

同样我们拖拽一个   已设状态动画UNIdle空手状态闲置状态

unity【动画】操作_角色动画控制器 c#_第64张图片

unity【动画】操作_角色动画控制器 c#_第65张图片

再拖拽   已设状态动画UNCombatRunF空手战斗状态奔跑状态

unity【动画】操作_角色动画控制器 c#_第66张图片

unity【动画】操作_角色动画控制器 c#_第67张图片

设置线

unity【动画】操作_角色动画控制器 c#_第68张图片

unity【动画】操作_角色动画控制器 c#_第69张图片

同样作为末尾层级需要连接Exit退出状态才可以返回上级完成循环

unity【动画】操作_角色动画控制器 c#_第70张图片

我们再将   已设状态动画   UNAttack空手攻击状态拖拽至场景

unity【动画】操作_角色动画控制器 c#_第71张图片

此时在设置线前我们需要添加一个参数   Trigger类型的Attack   触发攻击

unity【动画】操作_角色动画控制器 c#_第72张图片

设置线

unity【动画】操作_角色动画控制器 c#_第73张图片

unity【动画】操作_角色动画控制器 c#_第74张图片

unity【动画】操作_角色动画控制器 c#_第75张图片

unity【动画】操作_角色动画控制器 c#_第76张图片

回到根0层状态机

unity【动画】操作_角色动画控制器 c#_第77张图片

我们发现在设置线之前需要一个参数 int类型的WeaponID武器编号

unity【动画】操作_角色动画控制器 c#_第78张图片

unity【动画】操作_角色动画控制器 c#_第79张图片

我们回到1层状态机修改桥梁   已设状态动画UNIdle为Opt   作为选择时的已设闲置状态

unity【动画】操作_角色动画控制器 c#_第80张图片

unity【动画】操作_角色动画控制器 c#_第81张图片

回到0层状态机

设置线

unity【动画】操作_角色动画控制器 c#_第82张图片

unity【动画】操作_角色动画控制器 c#_第83张图片

接下来我们取消各个层级状态机所有连线的Has Exit Time退出时间

重点:除了攻击状态 指向 的连线

unity【动画】操作_角色动画控制器 c#_第84张图片

unity【动画】操作_角色动画控制器 c#_第85张图片

制作好状态机后将自定义状态机PlayerAC挂载到Player对象身上

unity【动画】操作_角色动画控制器 c#_第86张图片

修改2层级战斗状态状态机

unity【动画】操作_角色动画控制器 c#_第87张图片

运行即可完成空手状态下的任意姿势

同样操作我们加入武器1   Dual

unity【动画】操作_角色动画控制器 c#_第88张图片

unity【动画】操作_角色动画控制器 c#_第89张图片

同样过程我们可以将Dual武器的状态机做出来

unity【动画】操作_角色动画控制器 c#_第90张图片

unity【动画】操作_角色动画控制器 c#_第91张图片

unity【动画】操作_角色动画控制器 c#_第92张图片

unity【动画】操作_角色动画控制器 c#_第93张图片

那么这样还不能完成武器从0空手到1携带武器的跳转过程

我们需要:

进入0空手状态下的2层非状态层级状态机

unity【动画】操作_角色动画控制器 c#_第94张图片

设置线 在武器编号WeaponID不等于0的状态下 回到根页面

unity【动画】操作_角色动画控制器 c#_第95张图片

行走状态如果想在行走状态下可以切换武器那么就加这条线:

unity【动画】操作_角色动画控制器 c#_第96张图片

unity【动画】操作_角色动画控制器 c#_第97张图片

同样进入0空手状态层级2层战斗状态机

unity【动画】操作_角色动画控制器 c#_第98张图片

设置线

unity【动画】操作_角色动画控制器 c#_第99张图片

unity【动画】操作_角色动画控制器 c#_第100张图片

unity【动画】操作_角色动画控制器 c#_第101张图片

unity【动画】操作_角色动画控制器 c#_第102张图片

取消新添加线的退出时间

这样就完成了WeaponID由0到1的转换,但是却不能由1再返回0,所以我们需要在Dual的2层下继续添加线

进入Dual的2层非战斗状态状态机

unity【动画】操作_角色动画控制器 c#_第103张图片

设置线

unity【动画】操作_角色动画控制器 c#_第104张图片

unity【动画】操作_角色动画控制器 c#_第105张图片

unity【动画】操作_角色动画控制器 c#_第106张图片

unity【动画】操作_角色动画控制器 c#_第107张图片

同样

进入Dual的2层战斗状态状态机

unity【动画】操作_角色动画控制器 c#_第108张图片

设置线

unity【动画】操作_角色动画控制器 c#_第109张图片

unity【动画】操作_角色动画控制器 c#_第110张图片

unity【动画】操作_角色动画控制器 c#_第111张图片

unity【动画】操作_角色动画控制器 c#_第112张图片

也取消新添加线的退出时间

即完成了0转1转0循环的转换

运行即完成实现

unity【动画】操作_角色动画控制器 c#_第113张图片

你可能感兴趣的:(unity,c#,游戏引擎)