Unity 一种灵活的武器系统实现方式 您所在的位置:网站首页 3dmax武器模型绑定 Unity 一种灵活的武器系统实现方式

Unity 一种灵活的武器系统实现方式

2023-12-19 13:58| 来源: 网络整理| 查看: 265

在一些ARPG类的游戏中,主角常常手里都会持有武器,使用武器对目标造成伤害,我在之前的学习过程中,看到有这样几类做法: ​

在主角的手部骨骼下面绑定一把武器,然后在主角施法时,通过自身的骨骼动画去带动武器的运动,这样可以达到挥砍攻击的效果。但是这样也会造成一些问题,如果武器是有自身的动画的,比如在《只狼》里面,主角的义手武器都是含有从小到大展开的动画的,那么如果单一的将武器直接绑定在人物模型下面,会造成武器动画在人物动画的影响下会发生一些位置偏差,比如你绑定的是手掌的骨骼,可能最终的效果看起来像是绑定在肘部一样(之前的某次测试结果是这样)。并且分开去播主角动画和武器动画的话,也会显得有些麻烦。 5ef972fe6678e525bcbd9f19be216b1c54ad3247.png@759w_425h_progressive.webp 直接就在3d软件里面将武器作死在人物骨骼下面,这样的好处是人物骨骼和武器骨骼是一体的,但坏处是不可以动态的增加武器,比如在项目初期定的是3把武器,但是在项目开发后期如果要增加武器,那么人物骨骼就要变动,这样带来的结果是可能所有的人物动画都要重新一遍设置某些参数。这里针对这种情况举出一种相对方便的解决方式,能够在播放主角自动动画的时候,武器的动画也会自动播放,并且可以实时的加载武器以及卸载武器。

3dMax部分

首先需要让你的动画师按这样的规格进行制作:

准备一个主角模型,包含主角自身的骨骼;准备一把武器的模型,包含武器自身的骨骼(武器含有骨骼,是可以做武器变形动画使用) 如果是制作常规不含武器的动画,比如主角走路,就按照常规做法做,不需要武器参与。也只需要用到主角自身的骨骼即可。 如果是制作攻击动画,需要用到武器,并且武器也含有变形动画,那么需要先将主角和武器一起拖进3d软件中,将武器的骨骼链接到主角身上,然后开始制作动画(这个动画包含主角骨骼如何移动,武器骨骼如何移动,得到会是一个完整的主角攻击动作+武器变形动作)。完成之后需要一起导出动画,不要选择模型(因为在unity里面使用humanoid,只要使用原始的skin的avatar数据就可以了),那么这个动画就完成了。注意,最终我们将该动画导入到unity里面去的时候,如果unity里面没有这把武器的模型跟骨骼,不要忘了将武器的单独的模型和骨骼也一起导入进去。

66c970ef24cfc0907c07054e35f7340965523f5d.png@551w_891h_progressive.webp 武器骨骼链接主角骨骼_1 ​

000875fa79202b0604950866d5ea06a4b0e13809.png@941w_633h_progressive.webp 武器骨骼链接主角骨骼关系 e740c9ee74021dfcfd1b9ecc302de4d43ab9fe8f.png@932w_461h_progressive.webp 导出设置 ​

Unity部分

这里我们将3个素材导入到unity里:主角skin模型,主角的攻击动画,武器的模型,导入之后我们要对主角模型进行一些设置: 首先是要将主角模型类型改为用humanoid类型的骨骼 81c603ca3ede3a331fb9650bc8e3bd892f4a5ab6.png@536w_365h_progressive.webp 主角骨骼設置 武器的骨骼不用做设置,保持为Generic就可以 971bccdeccff9115764cd14fa0b93ac630dc1934.png@536w_318h_progressive.webp 武器的模型设置 接下来对导入进来的人物攻击动画进行一些设置,首先将人物攻击动画也用humanoid类型,avatar用主角skin的 d5142254f48e6b24b8d6607b0a67818465814479.png@540w_501h_progressive.webp Rig设置 然后在Animation一栏下面做如下设置: 48c7d804cc78b1f3e3c5e7ec3cda3450f872499f.png@551w_1422h_progressive.webp 主角攻击动画设置 将Mask设置为Create From this Model,然后展开下面的所有骨骼,然后选中所有的骨骼全部勾选上,然后点击apply按钮应用,所有导入的主角的动画都是这样设置。这一步的目的是将人物攻击动画下面的武器的骨骼开启显示可用。 接下来我们就可以在场景里面测试了,将主角模型skin和武器模型都拖到场景里面,然后在主角模型上面加Animator组件,创建一个AnimatorController托给主角,然后将主角的攻击动画拖到状态机作为初始的动画,接下来很重要的一步:我们先检查一下武器的骨骼,记住它的根骨骼: 6801a3980e8c66d433b010753a8d5e2946e663d7.png@942w_552h_progressive.webp 武器模型组成 我们查看上面的“主角攻击动画设置”这张图,发现武器的根骨骼在主角的骨骼Bip001 R Forearm下面: 0be8c0ffb5c882241ba3181e02c5fbecb541111c.png@548w_849h_progressive.webp 武器骨骼与主角骨骼关系 因此要想让主角攻击动画播放时武器也能正常出现并播放武器动画时,我们也需要在游戏里保持这个关系,这里为了简单我们直接手动将武器的骨骼拖到主角对应骨骼下面去: 27b99d19a250c44d08427317463ea5cb1a183c54.png@942w_680h_progressive.webp 游戏内骨骼设置 这时候武器上面不需要做任何处理,我们运行游戏,主角的攻击动画播放时,就可以带动武器的动画播放了。 然后在实际游戏中,我们应该是需要将武器加载到主角下面的,而不是一开始就拖在场景里,因此

第一步你需要用代码将武器加载到主角模型下面,这里你可以直接在主角的模型下面设置一个Slot空物体,用来存放所有的武器 第二步将武器的骨骼设置到主角对应的骨骼下面去, 第三步最重要的也是坑了我好久的一步,需要调用Rebind()重新绑定一下骨骼。 comp.bone.transform.SetParent(weaponBoneTrans,false);//设置武器骨骼到主角某个骨骼下面 hero.GetBody().Animator.Rebind();//重新绑定一次 作者:LemonInCup https://www.bilibili.com/read/cv13830327?spm_id_from=333.999.0.0 出处:bilibili


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有