当前位置: 首页 > news >正文

【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身

今天是“角色拔枪”的第二篇文章,我将会告诉大家,如何实现角色的“上身动画”和“下身动画”分开,也就说上身执行拔枪、射击和换弹等动作,而下身则独立进行移动动画。这种分离式动画控制不仅增强了动画的灵活性,还为玩家带来更好的游戏体验。完整的拔枪功能:

(1)首篇文章:如何实现动态创建武器和角色拔枪的动画,大家可以参考《【Unity3D实例-功能-拔枪】角色拔枪(一)动态创建武器》。

(2)末篇文章:如何使用IK来让角色持枪的双手更加贴合武器,显得更加平滑而真实,大家可以参考《【Unity3D实例-功能-拔枪】角色拔枪(三)IK的使用-紧握武器》

目录:

1.创建动画器

2.配置拔枪动画

3.创建和设置Avatar Mask

4.Avatar Mask挂载到图层

5.测试和运行

--------------------

一.创建动画器

在 Unity 的“项目”面板中,点击鼠标右键,在弹出的菜单中,接着选中“Create”,点击“Animator Controller”创建动画器,然后把动画器拖拉到角色上进行绑定。

二.配置拔枪动画

1.(可选)第一步如果大家是按照我上一篇文章《【Unity3D实例-功能-拔枪】角色拔枪(一)动态创建武器》来配置拔枪动画的话,点击打开动画器,把拔枪的动画和过渡线删掉,我们重新设置动画。

2.第二步打开动画器,点击选择“Layers”面板。在面板中,点击“+”添加一个新的动画图层,我这里它命名为“Weapon Layer”,然后把“RifleIdle”(站立动画)和“GrabRifleFromBehind”(拔枪动画)拖拉到动画器的“Weapon Layer”的动画图层中。

3.第三步我们选中“Weapon Layer”图层,我们点击“Any State”(任何状态下),右键选择“Make Transition”创建过渡线,我们需要把“Any State”的节点与“GrabGun”(拔枪动画)的节点通过过渡线连接起来,然后再把“GrabGun”(拔枪动画)和“Idle”(站立动画)也连接起来。

4.第四步在《【Unity3D实例-功能-拔枪】角色拔枪(一)动态创建武器》文章中,已经创建好了触发变量“grab”,如果没有创建的小伙伴。可以选择动画器中“Parameters”面板,点击“+”,添加一个Trigger的触发变量。

5.第五步选中“Any State”(站立动画)与“GrabGun”(拔枪动画)之间的过渡线,然后在右侧面板中,点击“Conditions”列表旁边的“+”按钮,在触发变量下拉框中选择“grab”变量,用于激活拔枪动画。记得取消勾选“Has Exit Time”,因为拔枪操作可以根据玩家输入随时触发。

6.第六步选中“GrabGun”(拔枪动画)和“Idle”(站立动画)之间的过渡线,这里需要保持“Has Exit Time”的勾选状态是选中的,因为我们希望在拔枪动画完全播放结束后才进行过渡。接着点击“Settings”,将“Transition Duration”的过渡时长设置为1秒,使得拔枪动画结束后,角色能更平滑地切换到Idle站立状态。

三.创建和设置Avatar Mask

1.在 Unity 的“Projects”面板中,点击鼠标右键,在呼出的菜单中选择“Create”,点击“Avatar Mask”创建一个头像面具(我这边把Avatar Mask的名称命名为“UpperBody”)。

2.选中创建完成后的Avatar Mask,在右侧的面板中,点击展开“Humanoid”选项,把“人物”中的下身全部点击禁用掉。

四.Avatar Mask挂载到图层

打开动画控制器,选择动画器的“Layers”面板,点击“Weapon Layer”动画面板旁边的“齿轮”按钮,打开Mask设置。接着需要把“Weight”权重调到1。再点击“Mask”选项,选择刚刚我们创建的Avatar Mask。

五.测试与运行

亲测过程:进入 Play Mode 进行测试。当玩家按下拔枪键(我这里设置为“空格”键)触发拔枪动画时,同时按下WSAD角色移动按键,角色上身成功播放拔枪动画,下身仍然保持奔跑的动画。这时角色的手部位置还不能紧贴武器,没关系。在末篇文章《【Unity3D实例-功能-拔枪】角色拔枪(三)IK的使用-紧握武器》中,我将会分享给大家IK的使用。

http://www.dtcms.com/a/336136.html

相关文章:

  • vue封装请求拦截器 响应拦截器
  • 定时器输出PWM波配置(呼吸灯)
  • 平行双目视觉-动手学计算机视觉18
  • C++ Building Blocks 构建块 Or 构件块
  • SVN客户端下载与安装
  • 「数据获取」《中国教育统计年鉴》(1949-2023)(获取方式看绑定的资源)
  • 【嵌入式基础知识梳理#11】Modbus-RTU工业总线协议
  • Spring IOC 学习笔记
  • Canny边缘检测
  • Python异步编程实战:爬虫案例
  • 【Python】-- 机器学习项目 - 基于KNN算法的鸢尾花分类
  • 【自动化运维神器Ansible】Playbook中的when条件判断:精细化控制任务执行
  • 【Linux系列】常见查看服务器 IP 的方法
  • Python 基本语法(二)
  • 数据结构初始知识
  • 利用标准IO实现寻找文件中字符出现最多次数
  • 问津集 #5:Crystal: A Unified Cache Storage System for Analytical Databases
  • 6-服务安全检测和防御技术
  • gitee SSH配置
  • 探索分子世界:结构、性质、反应与前沿进展
  • 编程算法实例-求一个整数的所有因数
  • 力扣 hot100 Day76
  • WPFC#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
  • 代码随想录刷题——字符串篇(四)
  • 深度学习之优化器
  • 自然语言处理NLP---预训练模型与 BERT
  • Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
  • Git 入门指南:核心概念与常用命令全解析
  • 「数据获取」《中国文化文物与旅游统计年鉴》(1996-2024)(获取方式看绑定的资源)
  • 链式前向星、vector存图