【Unity3D实例-功能-拔枪】角色拔枪(一)动态创建武器

简介: 本文详细讲解了Unity射击游戏中角色拔枪功能的实现方法,包括动态创建武器、设置拔枪动画、角色手部挂载点配置及动画器逻辑搭建,完整呈现拔枪动作的制作流程。

4.png

我们在游戏中,经常看到游戏的角色在面对敌人时都会拿出自己心爱的武器。今天,我们就一起来探讨一下,在射击游戏中角色拔枪的功能,它到底是如何实现的。避免文章篇幅冗长,关于拔枪的案例我将会连载三篇文章进行分享。
(1)首篇文章:如何实现动态创建武器和角色拔枪的动画。
(2)次篇文章:如何把角色“上身动画”和“下身动画”分开,让角色上身在播放其它动画(如:拔枪,射击,换弹等)时,下身怎样可以保持移动动画的播放。
(3)末篇文章:怎样使用IK,使角色持枪的双手更加贴合武器,显得更加平滑和真实。

目录:

1.创建动画器
2.设置拔枪动画
3.为角色手部设置挂载点
4.编写动态创建武器的代码
5.测试和运行


一.创建动画器

在 Unity 的 “Project” 窗口中,点击鼠标右键菜单,然后选中“Create”,点击“Animator Controller”。创建一个 Animator 的动画组件,并且把组件拖拉到角色上进行绑定。
585a0d71-a38a-46bb-b1b2-eb7dcf17a4f6.png

二.设置拔枪动画

1.第一步我们选中“拔枪动画”,然后点击右侧面板中的“Rig”页签,接着我们把选项“Animation Type”的值,切换成“Humanoid”,最后点击“Apply”应用按钮即可。
221f4b5b6305a84dd4d1bd54654ae38d.png

2.第二步打开角色动画器,先把“拔枪动画”拖拉到动画器上。然后点击左侧菜单的新增变量的按钮“+”号,创建一个Trigger类型的触发变量(我这里命名为“grab”)。
1f688d33824ea2a99cb8fa82537884a2.png

3.第三步我们需要创建过渡线。把“Any State”(任何状态下)的节点与“GrabGun”(拔枪动画)连接起来,然后再把“GrabGun”(拔枪动画)和“Idle”(站立动画)也连接上。
4.第四步选中“Any State”(任何状态下)的节点与“GrabGun”(拔枪动画)之间的过渡线,随后右侧菜单中,点击“Conditions”列表下的“+”号,添加“grab”变量来触发拔枪动画。最后记得把“Has Exit Time”的勾选去掉,因为拔枪动作可以随时发生。
4eb190494ccef536caf3bf60d4e0670c.png

5.第五步选中“GrabGun”(拔枪动画)和“Idle”(站立动画)之间的过渡线,这里需要把“Has Exit Time”的选项勾选上,因为我们需要等待拔枪动画播放完毕。然后点击“Setting”,把“Transition Duratior”的过渡时间设置1秒,可以让拔枪动画播放完后,更加平滑地过渡到站立动画。
2cab6dc6b14af55082c1bd90dd9a1515.png

三.为角色手部设置挂载点

1.首先点击角色对象,我们需要找到角色右手的骨络模型的位置,然后我们需要在右手的位置下创建一个空对象(该空对象非常重要,在文章末篇我将会分享IK的使用,那时也会用上它),接着我们来到场景中,把空对象移到角色右手上。
f0ed4a371a8953c680fcdbb44ba7e736.png

四.编写动态创建武器的代码

1.在 "Assets" 文件夹中新建一个名为 "Scripts" 的文件夹(你可以根据自己的喜好来命名),然后在该文件夹里创建一个新的 C# 脚本文件。接着将它拖拉到角色上。
de90619ea1d84809b3f15042bdc650c6.png
2.编写动态创建武器的代码
代码、模型和动画都已经上传到我的个人博客了,大家可以自行下载。
原创来源于-谷宇博客:https://www.biguyu.top/home

3.回到Unity,点击选中角色对象,然后把角色右手下的空物体和武器模型的预制体拖拉到角色脚本的“Right Hand Position”变量和“Weapon Prefab”变量上,为其赋值即可。

536929857ac1efae107a07dca31d46b4.png

五.测试与运行

亲测过程:进入 Play Mode 进行测试。玩家按下拔枪键(我这里设置为“空格”键),角色平滑过渡到“GrabGun”(拔枪动画)。动画播放完成后,角色也自然回到“Idle”站立动画。测试过程中,角色没有出现卡顿或不连贯的现象。关于角色手部位置不贴合武器的现象,现在先不用管。在末篇文章《【Unity3D实例-功能-拔枪】角色拔枪(三)IK的使用-紧贴武器》。
1a66f7a876664782b7e6f7ec4ad740f6.gif

目录
相关文章
|
2月前
|
C# 图形学 开发者
【Unity3D实例-功能-移动】角色行走和奔跑的相互切换
本文介绍了如何在Unity中实现角色行走与奔跑的切换功能,涵盖动画器创建、动画设置、角色移动代码编写及测试运行,帮助开发者提升角色移动的灵活性与操作体验。
74 0
|
监控 前端开发 JavaScript
不了解 QPS、TPS、RT、并发数、吞吐量,劝你简历别写熟悉高并发
分布式、微服务、Service Mesh目前都是大家耳熟能详的词语了,现在随便一个互联网公司说出来大家都是在搞微服务。 但我们搞来搞去,怎么样来衡量一个应用当前的状态到底是怎么样的?到底需不需要扩容?是需要横向扩容还是进行项目重构?
10491 2
|
2月前
|
人工智能 运维 Cloud Native
阿里云Serverless计算产品入选Gartner®报告「领导者」象限!
近日,Gartner® 发布了 2025 年度全球《云原生应用平台魔力象限》报告,阿里云凭借 Serverless 应用引擎 SAE(以下简称 SAE)和函数计算 FC,成为亚太地区唯一入选「领导者象限」的科技公司。
215 16
|
2月前
|
人工智能 Kubernetes Cloud Native
MSE Nacos Controller:为 Kubernetes 生态构建配置管理与服务发现的桥梁
在企业云原生转型过程中,如何实现传统微服务与 Kubernetes 服务的配置统一管理、服务互通及协议转换成为关键挑战。MSE Nacos Controller 应运而生,作为连接 Kubernetes 与 Nacos 的桥梁,支持 ConfigMap 与 Nacos 配置双向同步、服务自动注册发现,并助力 Higress 等 MCP 网关实现 REST API 向 AI 可调用 MCP 服务的转换,全面提升系统治理能力与智能化水平。
249 32
|
4月前
|
SQL JSON 前端开发
较为完整的SpringBoot项目结构
本文介绍了SpringBoot项目的分层结构与目录组成。项目分为四层:**controller层**(前端交互)、**service层**(业务逻辑处理)、**dao层**(数据库操作)和**model层**(实体类定义)。分层设计旨在实现关注点分离,降低耦合度,提高系统灵活性、可维护性和扩展性。此外,还详细说明了项目目录结构,包括`controller`、`service`、`dao`、`entity`、`param`、`util`等子目录的功能划分,便于团队协作开发。此架构有助于前后端分离,明确各模块职责,符合高内聚低耦合的设计原则。
2234 1
|
2月前
|
C# 图形学 开发者
【Unity3D实例-功能-镜头】俯视角
本文介绍了Unity中常用的俯视角镜头实现方法,涵盖模型添加、角色Tag设置、摄像机脚本编写及测试运行,帮助开发者快速掌握俯视角在策略与模拟类游戏中的应用技巧。
213 0
|
3月前
|
C# 图形学 开发者
【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
本文介绍了如何在Unity中使用Rigidbody组件实现角色自由移动,包括模型准备、组件添加、脚本编写与测试运行,帮助开发者快速掌握基础角色控制技巧。
165 0