[Unity] 使用 Animation Rigging 制作瞄准 IK 1

1. 安装 Animation Rigging Package

官方的,直接在 package manager 里面就能看到

2. 配置 Rig

先点击角色 Perfab

在这里插入图片描述

打开 Perfab

在这里插入图片描述

点击菜单栏中的 Animation Rigging - Rig Setup,给这个 Perfab 配置 Rig

在这里插入图片描述

这时,Perfab 身上会多出一个 Rig Builder 组件
Rig Builder 用于与 Animator 配合,所以要和 Animator 在同一个 GameObject 上

在这里插入图片描述

同时 Perfab 里面也会多出一个 Rig

Rig 用于收集其子物体的 Rig Constraints 并生成列表,然后交给 Rig Builder
Rig 要与骨骼的根节点同一层级

在这里插入图片描述

为了方便看,在 Perfab 中点击 菜单栏 - Animation Rigging - Bone Renderer Setup,显示骨骼

在这里插入图片描述

在 Perfab 中就会显示 Bone Render 组件

在这里插入图片描述

3. 添加约束

在 Rig 底下添加一个空物体,然后在这个空物体上添加 Multi - Aim Constraint
在这里插入图片描述

把武器挂在一只手上

在这里插入图片描述

为了好看,还是先将枪调整一下,看上去好像是手握着一样

在这里插入图片描述

然后对于 Rig 底下新建的空物体的 Multi - Aim Constraint 组件,将挂着武器的手作为 Constraint Object

在这里插入图片描述

为了继续配置这个 Multi - Aim Constraint 组件的 Aim Axis 和 Up Axis,要在局部坐标系下看手部的向上的参考轴
为了让局部坐标系的原点落在手部基点,要选择 Pivot 模式,同时为了显示局部坐标系,要选择 Local 模式

在这里插入图片描述

Aim Axis 指向被瞄准的物体,因此对于我这个手,就是这个绿色的 Z 轴的负方向
Up Axis 指向上方向,因此这里就是 Y 轴负方向

配置为

在这里插入图片描述

哦……后面调试出来我这轴搞错了
原来绿色的是 Y 轴啊……

在这里插入图片描述

为了继续配置 Source Objects,需要一个可以瞄准的物体
计划是使用子弹落点作为瞄准点
但是作为测试可以新建一个小球,然后使用这个小球作为瞄准目标

在这里插入图片描述

4. 处理报错 Transform ‘XXX’ not found in HumanDescription.

测试的时候出了这个报错

在这里插入图片描述

Transform ‘Weapon_AK12’ not found in HumanDescription.

System.InvalidOperationException: The TransformStreamHandle cannot be resolved.
This Exception was thrown from a job compiled with Burst, which has limited exception support. Turn off burst (Jobs -> Burst -> Enable Compilation) to inspect full exceptions & stacktraces

我找到了一个具有相同问题的
https://forum.unity.com/threads/issues-with-adding-weapons-to-a-character-using-animation-rigging.951957/
但是我这个枪并没有相同名字的子物体……

然后我又找到一个解答
https://forum.unity.com/threads/animation-rigging-weapon-attachment.920021/
他要我使用 rigbuilder 的 build 方法,再启用 animator

一开始我是使用不了 using UnityEngine.Animations.Rigging;
我还以为是我 package 没装好
一看有一个验证的问题

在这里插入图片描述

但是试验之后这个是我 Unity 账号许可证过期了而已
重新登陆 Unity 账号,获取许可证就好了

但是还是用不了 using UnityEngine.Animations.Rigging;

后来想到我用了一个 Assembly
向 Assembly 里面添加 UnityEngine.Animations.Rigging 就好了

在这里插入图片描述

然后按照那个解答中 unity 官方的意思就是这样写

        private void Start()
        {
    
    
            RigBuilder rigBuilder = GetComponent<RigBuilder>();
            rigBuilder.Build();
            Animator animator = GetComponent<Animator>();
            animator.enabled = true;
        }

如果是要 wait 的话,我也测试过

		private void Start()
        {
    
    
            StartCoroutine(SetRig());
        }

        private IEnumerator SetRig()
        {
    
    
            yield return new WaitForSeconds(1);
            RigBuilder rigBuilder = GetComponent<RigBuilder>();
            rigBuilder.Build();
            Animator animator = GetComponent<Animator>();
            animator.enabled = true;
            yield return null;
        }

但是这都不行,报错还是一样的

不把这个武器绑在手上,绑在任意骨骼上,都会有问题
给这个武器添加了 Rig Transform 也有问题

总的来看
如果没有配置 Animation Rigging 的话,那么可以随便在 Perfab 骨骼层级中挂东西
如果配置了 Animation Rigging,那么 Perfab 的骨骼层级中不能加任何多余的东西
这就很奇怪

草……后来发现真的是我有相同命名的物体的问题
我靠……没想到啊

没事了……

5. 身体-手部-头部

单纯一个手部是这样

请添加图片描述

为身体添加了更多约束之后

请添加图片描述

要注意挂着 Multi - Aim Constraint 的 GameObject 的层级关系从上到下,是骨骼关系中从根到子的顺序

在这里插入图片描述

6. 双手持枪

新建一个 GameObject 用来放双手持枪的约束
添加 Two Bone IK Constraint 组件

在这里插入图片描述

先把左手拖进来

在这里插入图片描述

右键组件,点击 Auto Setup From Tip Transform

在这里插入图片描述

自动配好

在这里插入图片描述

添加 Two Bone IK Constraint 组件之后,这个 GameObject 底下会自动新建两个 GameObject
一个作为目标,一个用来辅助调整姿态

在这里插入图片描述

可以把它们都拖到右手下面
武器是可能从角色身上解绑销毁的,所以不放在武器下面

在这里插入图片描述

在运行模式下一点点调这两个物体的 transform,调完了之后复制 transform,退出运行模式,在编辑模式下粘贴回去

效果是这样

请添加图片描述

猜你喜欢

转载自blog.csdn.net/PriceCheap/article/details/124262797