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

【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.xdnf.cn/news/18046.html

相关文章:

  • 【前端面试题】JavaScript核心面试题解析
  • 计算机网络---跳板机与堡垒机
  • Pytorch模型复现笔记-VGG讲解+架构搭建(可直接copy运行)+冒烟测试
  • 三维重建-动手学计算机视觉19(完结)
  • openEuler等Linux系统中如何复制移动硬盘的数据
  • 豆包 Java的23种设计模式
  • 力扣3:无重复字符的最长子串
  • 【LeetCode题解】LeetCode 33. 搜索旋转排序数组
  • Java研学-SpringCloud(二)
  • 从零到一:打包并发布你的第一个MCP AI工具服务
  • DNS总结
  • 从CVPR到NeurIPS,可变形卷积+可变形空间注意力如何斩获最佳论文
  • python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建
  • 灰色预测模型
  • matlab tlc的文件、字符串操作
  • 【力扣热题100】双指针—— 接雨水
  • redis和cdn的相似性和区别
  • Android中切换语言的方法
  • Perf使用详解
  • 黑马商城day08-Elasticsearch作业(个人记录、仅供参考、详细图解)
  • 解决 SECURE_PCI_CONFIG_SPACE_ACCESS_VIOLATION蓝屏报错
  • 大模型提示词(Prompt)终极指南:从原理到实战,让AI输出质量提升300%
  • 为什么TCP连接是三次握手?不是四次两次?
  • ruoyi-vue(十一)——代码生成
  • ansible管理变量和事实
  • Chrome插件开发实战:todoList 插件
  • 影刀初级B级考试大题2
  • Java ArraysParallelSortHelpers 并行排序
  • PyTorch 面试题及详细答案120题(01-05)-- 基础概念与安装
  • 深度学习-计算机视觉-数据增广/图像增广