WEBVTT

1
00:00:00.001 --> 00:00:05.000
约束是装配过程中使用的宝贵工具。

2
00:00:05.000 --> 00:00:11.000
它们允许在骨骼之间和对象之间形成简单和复杂的关系。

3
00:00:11.000 --> 00:00:17.000
约束主要有两种类型：对象约束和骨骼约束。

4
00:00:17.000 --> 00:00:23.000
在大多数情况下，骨骼约束在功能上只是对象约束，但分配给骨骼。

5
00:00:23.000 --> 00:00:27.000
在本视频中，我们将讨论一些基本的对象约束，

6
00:00:27.000 --> 00:00:33.000
但请记住，本视频中的大多数概念和约束也适用于骨骼约束。

7
00:00:33.000 --> 00:00:37.000
现在让我们看一些约束示例以及如何使用它们。

8
00:00:37.000 --> 00:00:41.000
在本视频中，我们将讨论复制和限制变换约束。

9
00:00:41.000 --> 00:00:46.000
例如，这些包括复制和限制位置约束。

10
00:00:46.000 --> 00:00:54.000
复制位置约束是一个简单的约束，它作为一个对象复制另一个对象的位置值的一种方式而存在，

11
00:00:54.000 --> 00:00:57.000
同时忽略旋转和缩放。

12
00:00:57.000 --> 00:00:59.000
让我们看看这是如何工作的。

13
00:00:59.000 --> 00:01:06.000
我们要做的第一件事是添加一个猴子网格，这样我们就可以有一个明显的参考或目标对象。

14
00:01:06.000 --> 00:01:14.000
现在假设我们想让立方体沿着 X 和 Y 轴而不是 Z 轴复制猴子的位置。

15
00:01:14.000 --> 00:01:19.000
这样我们就可以让立方体跟随猴子四处走动，但不会离开地面。

16
00:01:20.000 --> 00:01:27.000
为此，只需选择一个立方体并转到“约束”选项卡，该选项卡由包裹在一起的两个对象的图标指示。

17
00:01:27.000 --> 00:01:31.000
从那里，打开下拉菜单并选择复制位置。

18
00:01:31.000 --> 00:01:38.000
这将创建复制位置约束并将其分配给您选择的活动对象。

19
00:01:38.000 --> 00:01:43.000
现在我们可以继续左键单击对象字段旁边的吸管工具。

20
00:01:43.000 --> 00:01:49.000
这将使用我们在视口中的下一次左键单击来识别我们要引用的对象。

21
00:01:49.000 --> 00:01:52.000
让我们左键单击猴子对象。

22
00:01:52.000 --> 00:01:57.000
正如您所看到的，立方体自己的位置精确地复制了猴子的位置。

23
00:01:57.000 --> 00:02:03.000
如果我们选择猴子，我们可以移动它来确认立方体确实限制在我们的猴子身上。

24
00:02:03.000 --> 00:02:06.000
但这并不完全是我们想要的。

25
00:02:07.000 --> 00:02:14.000
我们希望立方体不离开地面，但仍然沿着 X 和 Y 轴跟随猴子。

26
00:02:14.000 --> 00:02:19.000
为此，我们可以再次选择立方体并进入复制位置约束设置。

27
00:02:19.000 --> 00:02:26.000
在这里我们可以看到有如何解释目标对象的每个轴的位置数据的设置。

28
00:02:26.000 --> 00:02:34.000
让我们继续取消选中 Z 轴，因为我们知道我们希望立方体忽略猴子的 Z 轴位置。

29
00:02:34.000 --> 00:02:41.000
我们开始吧！如果我们现在移动猴子，我们可以看到立方体跟随猴子，同时保持在网格地板上。

30
00:02:41.000 --> 00:02:48.000
只是为了好玩，让我们继续看看反转复选框在复制位置约束中的作用。

31
00:02:48.000 --> 00:02:52.000
让我们重新检查 Z 轴，然后检查反转。

32
00:02:52.000 --> 00:02:55.000
看起来我们得到了非常酷的镜面效果。

33
00:02:55.000 --> 00:03:04.000
立方体被告知做与猴子的 Z 轴位置所说的相反的事情，沿着 Z 轴翻转它穿过原点。

34
00:03:04.000 --> 00:03:14.000
现在我提到复制位置约束忽略参考对象的旋转，但如果我们将世界空间更改为本地空间，则情况并不完全正确。

35
00:03:15.000 --> 00:03:25.000
此处的第一个下拉列表控制要从参考对象解释哪些轴数据，而第二个下拉列表控制要影响所选对象的轴数据。

36
00:03:25.000 --> 00:03:34.000
让我们将第一个下拉菜单从世界空间更改为本地空间，从而允许我们引用猴子的本地轴位置值。

37
00:03:35.000 --> 00:03:44.000
正如您所看到的，局部空间考虑了对象的旋转，因为对象的局部轴取决于它面向的方向。

38
00:03:44.000 --> 00:03:55.000
因为我们的猴子稍微旋转，所以如果我们沿着它的局部 X 轴移动猴子，立方体将沿着世界 X 轴移动，而不是完美地跟随它。

39
00:03:55.000 --> 00:03:58.000
请随意进一步尝试这些设置。

40
00:03:58.000 --> 00:04:07.000
更快速的一件事，假设我们再次将这两者更改为世界空间，现在我们非常喜欢立方体当前在该帧中位于猴子正下方的方式。

41
00:04:07.000 --> 00:04:12.000
但我们想要删除约束，以便我们可以在此框架之外自由地为其设置动画。

42
00:04:12.000 --> 00:04:21.000
好吧，让我们继续通过按属性编辑器约束选项卡中眼球图标旁边的 X 图标来删除约束。

43
00:04:21.000 --> 00:04:27.000
但正如您所看到的，如果我们这样做，由复制位置约束驱动的转换就会被忘记。

44
00:04:27.000 --> 00:04:33.000
这对我们来说并不理想，所以让我们用控制 Z 撤销它并尝试其他方法。

45
00:04:33.000 --> 00:04:38.000
也许我们可以将影响力降低到零？不，那行不通。

46
00:04:38.000 --> 00:04:41.000
但您可能会注意到影响滑块旁边的 X 图标。

47
00:04:41.000 --> 00:04:46.000
如果将鼠标悬停在其上，您会看到它显示“禁用并保持变换”。

48
00:04:46.000 --> 00:04:47.000
我们点击它。

49
00:04:47.000 --> 00:04:52.000
这将使影响滑块为零，但我们的立方体保持原状。

50
00:04:52.000 --> 00:05:00.000
这是因为它已用我们在单击按钮之前看到的约束驱动位置数据替换了立方体的原始位置数据。

51
00:05:00.000 --> 00:05:05.000
这也意味着我们实际上可以在不进行任何更改的情况下删除约束。

52
00:05:05.000 --> 00:05:09.000
位置并不是我们可以复制的唯一转换值。

53
00:05:09.000 --> 00:05:15.000
相同的概念适用于复制旋转、复制缩放和复制变换约束。

54
00:05:15.000 --> 00:05:19.000
那么限制转型呢？这很简单。

55
00:05:19.000 --> 00:05:26.000
与复制变换约束不同，限制变换约束实际上不需要参考对象。

56
00:05:26.000 --> 00:05:30.000
相反，它们使用用户输入的值。

57
00:05:30.000 --> 00:05:37.000
例如，假设我们再次有了猴子和立方体，但是我们的立方体被放大为某种房间。

58
00:05:37.000 --> 00:05:42.000
如果我们想要制作一些动画，让我们的猴子严格留在房间的墙壁内，

59
00:05:42.000 --> 00:05:46.000
我们可以通过限制位置约束很容易地做到这一点。

60
00:05:46.000 --> 00:05:50.000
为此，我们将进入线框模式，以便我们可以看到并选择我们的猴子。

61
00:05:50.000 --> 00:05:55.000
我们可以通过按 Z 并从饼图菜单中选择线框来做到这一点。

62
00:05:55.000 --> 00:05:59.000
让我们选择猴子并转到属性编辑器中的约束选项卡。

63
00:05:59.000 --> 00:06:03.000
从下拉菜单中，只需选择限制位置即可。

64
00:06:03.000 --> 00:06:08.000
起初，什么也没有发生，因为所有这些复选标记都被禁用。

65
00:06:08.000 --> 00:06:14.000
这些用于启用每个位置轴允许的最小值和最大值。

66
00:06:14.000 --> 00:06:22.000
只是为了演示，如果我们选中所有这些框，您会发现尝试移动猴子将不再起作用。

67
00:06:22.000 --> 00:06:29.000
但是，例如，如果您左键单击拖动最大 Z 值，您会注意到突然可以移动猴子，

68
00:06:29.000 --> 00:06:33.000
但仅限于您设置的最大 Z 值。

69
00:06:33.000 --> 00:06:37.000
像这样设置范围就是限制位置约束的工作原理。

70
00:06:37.000 --> 00:06:41.000
为了实现我们将猴子限制在立方体墙壁内的目标，

71
00:06:41.000 --> 00:06:45.000
我们可以反复试验，但我发现有一种方法是最快的。

72
00:06:45.000 --> 00:06:48.000
我将继续在 Z 轴上进行演示。

73
00:06:48.000 --> 00:06:53.000
我们要做的第一件事就是取消选中您要设置的轴限制的框。

74
00:06:53.000 --> 00:06:56.000
在本例中，我们将从 Z 最大值开始。

75
00:06:56.000 --> 00:07:00.000
通过取消选中此选项，我们可以将猴子沿 Z 轴移动到我们想要的距离。

76
00:07:00.000 --> 00:07:04.000
因此，我们将把猴子放置在我们大约想要的限制位置。

77
00:07:04.000 --> 00:07:07.000
放置后，再次选中该框。

78
00:07:07.000 --> 00:07:10.000
这将使猴子恢复到极限，

79
00:07:10.000 --> 00:07:17.000
但随后您可以左键单击拖动最大 Z 值，直到猴子移回您之前放置的位置。

80
00:07:17.000 --> 00:07:22.000
一旦猴子停止移动，你就会知道你把值增加太多了，

81
00:07:22.000 --> 00:07:27.000
因此，稍微调整一下，您应该能够将最大 Z 值与您希望猴子所在的位置相匹配。

82
00:07:27.000 --> 00:07:30.000
幸运的是，由于我们的立方体四周大小相同，

83
00:07:30.000 --> 00:07:37.000
我们可以复制所有最大值的这个值，并在所有最小值前面添加一个负号。
84
00:07:37.000 --> 00:07:42.000
但请记住，根据您认为合适的方式调整这些值以适应您自己的场景。

85
00:07:42.000 --> 00:07:44.000
我们就这样吧。

86
00:07:44.000 --> 00:07:51.000
正如您所看到的，当我们移动猴子时，立方体的墙壁似乎阻止了猴子在所有轴方向上的移动。

87
00:07:51.000 --> 00:07:54.000
但您可能会注意到有些奇怪的事情。

88
00:07:54.000 --> 00:07:59.000
如果我们将猴子明显移动到基于限制位置约束允许其移动的位置，

89
00:07:59.000 --> 00:08:05.000
然后我们尝试将它移动到另一个方向，看起来猴子需要一段时间才能对我们的动作做出反应。

90
00:08:05.000 --> 00:08:10.000
这是因为猴子实际上还在计算它的真实位置，

91
00:08:10.000 --> 00:08:14.000
如果约束未激活，它应该位于的位置。

92
00:08:14.000 --> 00:08:21.000
事实上，如果我们打开右侧的快速菜单并转到项目，我们就可以直观地看到这一点。

93
00:08:21.000 --> 00:08:25.000
这将显示我们所选对象的位置数据。

94
00:08:25.000 --> 00:08:29.000
正如我们所看到的，当我们将猴子移过约束的极限时，

95
00:08:29.000 --> 00:08:32.000
它的真实位置价值不断变化。

96
00:08:32.000 --> 00:08:36.000
为了让它明显地开始再次向相反方向移动，

97
00:08:36.000 --> 00:08:42.000
其位置数据的值必须落在限制位置约束的范围内。

98
00:08:42.000 --> 00:08:48.000
要防止这种不可见的转换，只需选中此转换框即可。

99
00:08:48.000 --> 00:08:53.000
现在，正如您所看到的，即使您尝试将猴子移动到明显超过限制的位置，

100
00:08:53.000 --> 00:08:57.000
它会立即对朝相反方向移动做出反应。

101
00:08:57.000 --> 00:09:01.000
我们可以通过再次检查该物体的位置数据来进一步确认这一点。

102
00:09:01.000 --> 00:09:07.000
正如您所看到的，真实位置现在与约束的限制相匹配。

103
00:09:07.000 --> 00:09:13.000
现在让我们快速讨论一下使用骨骼和对象的约束之间的区别。

104
00:09:14.000 --> 00:09:19.000
骨骼约束的工作方式与我刚刚向您展示的对象约束非常相似。

105
00:09:19.000 --> 00:09:22.000
事实上，它们的工作原理完全相同。

106
00:09:22.000 --> 00:09:27.000
但我应该告诉您一些有关骨骼和约束的重要信息。

107
00:09:27.000 --> 00:09:33.000
首先也是最重要的，您可以将骨骼设置为对象约束的目标对象。

108
00:09:33.000 --> 00:09:35.000
你怎么做到这一点？

109
00:09:35.000 --> 00:09:39.000
好吧，让我们继续在场景中添加一个骨架对象。

110
00:09:39.000 --> 00:09:45.000
正如您所记得的，这些是由骨骼组成的，我们可以通过进入编辑模式添加更多骨骼。

111
00:09:45.000 --> 00:09:51.000
我将在编辑模式下选择主骨骼，右键单击并选择细分。

112
00:09:51.000 --> 00:09:53.000
这会给我们两根骨头。

113
00:09:53.000 --> 00:09:58.000
现在建议养成清晰命名骨骼的好习惯，

114
00:09:58.000 --> 00:10:03.000
因此，让我们继续选择每个骨骼并进入绿色骨骼图标选项卡，

115
00:10:03.000 --> 00:10:06.000
这是属性编辑器中的骨骼属性。

116
00:10:06.000 --> 00:10:10.000
在顶部，我们可以左键单击将骨骼重命名为我们想要的任何名称。

117
00:10:10.000 --> 00:10:15.000
我将把顶部骨骼称为顶部，将底部骨骼称为底部。

118
00:10:15.000 --> 00:10:21.000
假设我们想要猴子对象复制顶部骨​​骼的旋转。

119
00:10:21.000 --> 00:10:26.000
如果我们执行复制旋转约束并将目标设置为顶部骨骼，

120
00:10:26.000 --> 00:10:30.000
你可以看到它实际上并没有记录顶部骨骼，

121
00:10:30.000 --> 00:10:33.000
而是将目标设置为骨架对象。

122
00:10:34.000 --> 00:10:40.000
那是因为我们的骨骼不是一个物体，而是存在于骨架物体中，

123
00:10:40.000 --> 00:10:45.000
类似于顶点和面不是对象，而是存在于网格对象中。

124
00:10:45.000 --> 00:10:49.000
不幸的是，目标对象必须是一个对象。

125
00:10:49.000 --> 00:10:53.000
然而，当我们选择骨架作为目标对象时，

126
00:10:53.000 --> 00:10:57.000
下面将出现一个骨骼参数，并标有该骨骼图标。

127
00:10:57.000 --> 00:11:02.000
我们可以在此处从下拉菜单中选择顶部骨骼。

128
00:11:03.000 --> 00:11:06.000
这就是为什么明确命名骨骼很重要的原因之一，

129
00:11:06.000 --> 00:11:10.000
因为我们没有适用于此领域的吸管工具。

130
00:11:10.000 --> 00:11:13.000
如果我们现在选择骨架并进入姿势模式，

131
00:11:13.000 --> 00:11:19.000
我们可以旋转骨骼并确认猴子确实在复制骨骼的旋转。

132
00:11:19.000 --> 00:11:22.000
那么，如果我们想翻转它怎么办？

133
00:11:22.000 --> 00:11:26.000
假设我们希望骨骼复制猴子对象的旋转。

134
00:11:26.000 --> 00:11:27.000
这很简单。

135
00:11:28.000 --> 00:11:30.000
让我们删除猴子的复制旋转约束

136
00:11:30.000 --> 00:11:35.000
然后返回姿势模式并选择我们的骨架对象。

137
00:11:35.000 --> 00:11:38.000
一旦我们选择了想要约束的骨骼，

138
00:11:38.000 --> 00:11:43.000
我们可以通过属性编辑器中的约束选项卡添加复制旋转约束。

139
00:11:43.000 --> 00:11:45.000
除非，当我们这样做时，

140
00:11:45.000 --> 00:11:49.000
看起来猴子的旋转实际上驱动了整个骨架对象的旋转

141
00:11:49.000 --> 00:11:52.000
而不仅仅是我们选择的骨头。

142
00:11:52.000 --> 00:11:57.000
这是因为我们添加的是对象约束，而不是骨骼约束。

143
00:11:57.000 --> 00:12:02.000
要添加骨骼特定约束，您必须进入骨骼约束选项卡，

144
00:12:02.000 --> 00:12:06.000
由蓝色图标表示，看起来像包裹在另一个对象上的骨头。

145
00:12:06.000 --> 00:12:12.000
到了这里，我们就可以正确地将复制旋转骨骼约束添加到我们选择的骨骼中

146
00:12:12.000 --> 00:12:15.000
并将我们的目标对象设置为猴子。

147
00:12:15.000 --> 00:12:20.000
正如您所看到的，骨骼现在正确复制了猴子的旋转。

148
00:12:20.000 --> 00:12:25.000
还有一些变换约束，例如维持体积约束

149
00:12:25.000 --> 00:12:29.000
以及极限距离约束，我建议您自行尝试。

150
00:12:29.000 --> 00:12:32.000
但我们也会在另一个视频中讨论这些内容。

151
00:12:32.000 --> 00:12:36.000
我希望这能让您很好地了解约束的工作原理

152
00:12:36.000 --> 00:12:38.000
以及如何在您的项目中使用它们。
