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

1. 安装 Animation Rigging Package

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

2. 配置 Rig

先点击角色 Perfab

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第1张图片

打开 Perfab

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第2张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第3张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第4张图片

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

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第5张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第6张图片

在 Perfab 中就会显示 Bone Render 组件

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第7张图片

3. 添加约束

在 Rig 底下添加一个空物体,然后在这个空物体上添加 Multi - Aim Constraint
[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第8张图片

把武器挂在一只手上

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第9张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第10张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第11张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第12张图片

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

配置为

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第13张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第14张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第15张图片

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

测试的时候出了这个报错

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第16张图片

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] 使用 Animation Rigging 制作瞄准 IK 1_第17张图片

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

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

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第18张图片

然后按照那个解答中 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 组件

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第19张图片

先把左手拖进来

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第20张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第21张图片

自动配好

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第22张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第23张图片

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

[Unity] 使用 Animation Rigging 制作瞄准 IK 1_第24张图片

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

效果是这样

你可能感兴趣的:(Unity,TPS,IK,Animation,Rigging)