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

首先我们打开一个项目

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

导入资源

添加URP渲染管线

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

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

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

首先是Model

在这个资源对象的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循环的转换

运行即完成实现

相关推荐
阿蒙Amon42 分钟前
06. C#入门系列【自定义类型】:从青铜到王者的进阶之路
开发语言·c#
钢铁男儿4 小时前
C# 表达式和运算符(表达式和字面量)
开发语言·c#
林鸿群5 小时前
C#子线程更新主线程UI及委托回调使用示例
开发语言·c#
o0向阳而生0o5 小时前
63、.NET 异常处理
c#·.net·异常处理
SteveDraw7 小时前
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
开发语言·c++·c#·封装·动态链接库
心之所向,自强不息7 小时前
【Unity Shader编程】之让画面动起来
unity·游戏引擎
Kookoos8 小时前
性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
后端·c#·.net·abp vnext·miniprofiler
阿翰10 小时前
自动 GitHub Readme 20 种语言翻译平台 - OpenAiTx 开源免费
c#·.net
枫叶kx14 小时前
1Panel运行的.net程序无法读取系统字体(因为使用了docker)
c#
军训猫猫头19 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#