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循环的转换

运行即完成实现

相关推荐
浅陌sss18 分钟前
Unity性能优化 --- 减少OverDraw
unity·性能优化·游戏引擎
滴_咕噜咕噜25 分钟前
学习笔记 --C#基础其他知识点(持续更新)
笔记·学习·c#
工业甲酰苯胺2 小时前
聊一聊 C#线程池 的线程动态注入
java·开发语言·c#
向宇it2 小时前
【从零开始入门unity游戏开发之——C#篇30】C#常用泛型数据结构类——list<T>列表、`List<T>` 和数组 (`T[]`) 的选择
java·开发语言·数据结构·unity·c#·游戏引擎·list
keep-learner2 小时前
Unity Dots理论学习-2.ECS有关的模块(1)
学习·unity·游戏引擎
虾球xz2 小时前
游戏引擎学习第62天
学习·游戏引擎
我曾经是个程序员4 小时前
使用C#生成一张1G大小的空白图片
java·算法·c#
pchmi5 小时前
C# OpenCV机器视觉:漫水填充
opencv·c#·机器视觉
小码编匠6 小时前
C# 实现多线程启动停止暂停继续
后端·c#·.net
唐沢7 小时前
Unity 读Excel,读取xlsx文件解决方案
unity·excel