﻿1
00:00:04,350 --> 00:00:04,760
‫你好, 我是

2
00:00:04,800 --> 00:00:05,190
‫欢迎光临｡

3
00:00:05,190 --> 00:00:09,750
‫在这节课中, 我们将使抓取器更加可靠｡

4
00:00:09,750 --> 00:00:19,890
‫我们还将使它能够放下一个抓取的组件, 这样我们就可以把它扔来扔去, 通常会让它更有用一些｡

5
00:00:19,920 --> 00:00:21,870
‫让我们深入了解一下这是如何实现的｡

6
00:00:22,850 --> 00:00:28,430
‫现在,

7
00:00:28,430 --> 00:00:35,990
‫我们经常不能拿起这个石像鬼的原因是, 为了性能目的而模拟物理的组件在静止一定时间后会进入睡眠状态｡

8
00:00:35,990 --> 00:00:37,310
‫这就是我们所看到的｡

9
00:00:37,310 --> 00:00:45,290
‫这个石像鬼物理模拟将进入睡眠状态, 当我们用物理句柄连接到它时, 它不会被唤醒｡

10
00:00:45,290 --> 00:00:51,400
‫所以我们需要学习的是当我们用球体轨迹击中它时唤醒它｡

11
00:00:51,410 --> 00:00:56,420
‫现在, 让我们来看看我们已经看到的基本组件文档｡

12
00:00:56,420 --> 00:01:03,260
‫you原语组件是我们的命中结果返回的东西, 但实际上是一个原语组件｡

13
00:01:03,440 --> 00:01:10,010
‫因此, 在文档中这里说, 基本体组件是一个场景组件,

14
00:01:10,010 --> 00:01:16,160
‫它包含或生成某种几何体, 并被渲染或用作碰撞数据｡

15
00:01:16,160 --> 00:01:21,770
‫所以一般来说, 基本组件是可以模拟物理的组件｡

16
00:01:22,130 --> 00:01:27,830
‫所以我们可以期望在这里找到一些物理模拟的方法｡

17
00:01:27,830 --> 00:01:32,030
‫我要找的是一个包含关键字wake的函数.

18
00:01:32,060 --> 00:01:37,820
‫我们将浏览几个函数, 直到找到一个可以唤醒所有刚体的函数｡

19
00:01:38,270 --> 00:01:43,610
‫刚体本质上是一个物理学术语, 用于表示模拟物理学的对象｡

20
00:01:43,610 --> 00:01:44,780
‫所以你可以看到它有一个空洞｡

21
00:01:44,780 --> 00:01:46,700
‫返回类型不接受任何参数｡

22
00:01:46,700 --> 00:01:52,010
‫所以当我们试图连接到它的时候, 我们应该可以调用它｡

23
00:01:52,010 --> 00:01:58,610
‫所以如果我们在if语句中抓取一个CP, 我们已经找到了这个组件, 我们就要抓取它了｡

24
00:01:58,610 --> 00:02:04,550
‫我们首先要做的是, 创建一个变量来存储这个原始组件｡

25
00:02:04,550 --> 00:02:15,170
‫所以我们有一个你的原语组件指针, 叫做hit component set, 它等于hit result.

26
00:02:15,470 --> 00:02:17,990
‫get组件.

27
00:02:18,530 --> 00:02:29,690
‫然后使用这个点击组件指针, 我们可以用箭头唤醒所有刚体, 然后把括号和分号放在最后｡

28
00:02:29,690 --> 00:02:35,900
‫所以这应该只是给予那个组件一个踢, 唤醒它, 让它响应物理句柄｡

29
00:02:35,930 --> 00:02:39,160
‫现在, 让我们替换一下我们已经完成的点击结果｡

30
00:02:39,200 --> 00:02:46,400
‫不要在物理句柄调用中获取组件来获取组件位置, 因为我们现在有了一个变量, 当完成时,

31
00:02:46,400 --> 00:02:49,460
‫让我们重新编译｡

32
00:02:49,460 --> 00:02:56,480
‫让我们继续, 点击播放, 让石像鬼坐在地板上一点点, 现在让它去睡觉,

33
00:02:56,480 --> 00:02:58,910
‫然后尝试拿起它｡

34
00:02:58,910 --> 00:03:05,120
‫你会注意到, 我们没有问题, 拿起它, 让它躺在地板上, 无论什么｡

35
00:03:05,120 --> 00:03:13,910
‫它会很好, 唤醒那些物理刚体, 开始模拟它们, 这样它就可以被举起和抓住｡

36
00:03:13,910 --> 00:03:18,560
‫现在,

37
00:03:18,560 --> 00:03:23,300
‫你可能已经注意到, 我们目前还不能释放物理句柄, 所以这将是你在释放函数中的挑战｡

38
00:03:23,360 --> 00:03:26,570
‫所以你要调用物理句柄上的release组件｡

39
00:03:26,570 --> 00:03:29,660
‫这是物理句柄指针上的一个函数｡

40
00:03:29,840 --> 00:03:34,910
‫你要先检查我们是否有被抓的组件｡

41
00:03:34,910 --> 00:03:40,040
‫所以如果你得到一个grab组件, 它返回一个指向grab组件的指针, 如果物理句柄当前没有抓取任何东西,

42
00:03:40,040 --> 00:03:43,010
‫那么指针将为空.

43
00:03:43,010 --> 00:03:48,530
‫所以你可以用它来检查我们是否有任何东西, 只有当我们正在抓取东西的时候才释放｡

44
00:03:48,530 --> 00:03:53,090
‫作为奖励, 你可以去看看我们是否能重新设定目标｡

45
00:03:53,090 --> 00:03:58,070
‫只有当我们抓住的东西, 但看视频, 并有一个去｡

46
00:04:01,590 --> 00:04:02,470
‫欢迎回来｡

47
00:04:02,490 --> 00:04:06,090
‫所以我们进去喝杯酒吧｡

48
00:04:06,230 --> 00:04:10,490
‫即将进入释放功能并删除释放日志｡

49
00:04:10,500 --> 00:04:18,360
‫在这里我们要放一个if语句, 我们要说, 现在我们要掌握物理句柄｡

50
00:04:18,360 --> 00:04:25,650
‫首先, 我们要做一个物理句柄组件指针, 我们称之为物理句柄,

51
00:04:25,650 --> 00:04:31,410
‫并将其设置为等于物理句柄｡

52
00:04:31,590 --> 00:04:40,770
‫如果物理句柄等于空指针, 我们就继续返回, 因为我们不能做任何事情,

53
00:04:40,770 --> 00:04:44,400
‫释放任何东西｡

54
00:04:44,400 --> 00:04:52,650
‫如果我们根本没有物理句柄, 那么我们要检查当前是否持有任何具有物理句柄的东西｡

55
00:04:52,650 --> 00:05:03,390
‫如果, 比如说, 如果物理句柄箭头被抓住了, 组件括号不等于空指针,

56
00:05:04,080 --> 00:05:09,420
‫那么在if语句的主体中,

57
00:05:09,420 --> 00:05:17,730
‫意味着我们已经抓住了一些东西, 那么我们要做一个物理句柄箭头释放组件, 它会释放它, 顾名思义｡

58
00:05:17,730 --> 00:05:24,450
‫有一件事我在这里的代码中没有做, 但它可能值得添加到你的代码中, 那就是在我们发布组件之前,

59
00:05:24,450 --> 00:05:32,160
‫值得继续调用get grab components, 然后添加弱的所有刚体,

60
00:05:32,160 --> 00:05:36,180
‫就像我们在抓取组件之前所做的那样｡

61
00:05:36,180 --> 00:05:41,520
‫因为如果我们要增长一个组件, 而一小段时间不到处移动, 它也可能进入休眠状态｡

62
00:05:41,520 --> 00:05:43,470
‫所以释放它也无济于事｡

63
00:05:43,470 --> 00:05:51,300
‫因此, 这是值得添加的, 因为它会捕捉到这种情况,

64
00:05:51,300 --> 00:05:56,790
‫如果我们有一个当前没有抓取任何内容的物理句柄, 我们不想设置tick中的目标位置｡

65
00:05:56,790 --> 00:06:02,190
‫在tick组件中, 我们将放置一个if语句, 它将完全相同｡

66
00:06:02,190 --> 00:06:11,730
‫它会说物理句柄箭头被抓取的组件不等于空指针｡

67
00:06:11,760 --> 00:06:22,380
‫然后在if语句的主体中, 我们将把目标位置的计算和设置目标位置也放在那个物理句柄中｡

68
00:06:22,380 --> 00:06:24,330
‫让我们重新编译并测试一下｡

69
00:06:24,330 --> 00:06:26,070
‫我们继续按播放键｡

70
00:06:26,970 --> 00:06:28,920
‫试着抓住石像鬼｡

71
00:06:28,920 --> 00:06:33,420
‫然后如果我放开鼠标, 它又会掉到地板上｡

72
00:06:33,420 --> 00:06:39,000
‫所以, 它似乎不受它是醒着还是睡着的影响｡

73
00:06:39,000 --> 00:06:43,610
‫我们似乎在唤醒它, 无论我们是否每次都在拿起它, 本质上｡

74
00:06:43,620 --> 00:06:46,950
‫所以这似乎是完全按照我希望的那样工作｡

75
00:06:46,950 --> 00:06:47,910
‫它没有卡住｡

76
00:06:47,910 --> 00:06:49,950
‫感觉刚刚好｡

77
00:06:49,980 --> 00:06:59,550
‫唯一有点奇怪的是, 当我进入它的时候, 你可以看到它在奇怪地抖动因为它实际上是在和播放器碰撞.

78
00:06:59,550 --> 00:07:06,840
‫现在, 我们可以稍微修复这个问题, 方法是在细节窗格中转到我们的石像鬼,

79
00:07:06,840 --> 00:07:15,510
‫选择所有类别, 向下滚动到碰撞, 然后查看我们的自定义碰撞预设, 再向下查看对象响应｡

80
00:07:15,510 --> 00:07:17,760
‫稍后我们将对此进行详细介绍｡

81
00:07:17,760 --> 00:07:20,910
‫有一个兵对象响应｡

82
00:07:20,910 --> 00:07:25,650
‫这基本上就是说, 我应该和棋子相撞还是怎么着？

83
00:07:25,680 --> 00:07:27,570
‫我应该如何应对典当？

84
00:07:27,570 --> 00:07:31,740
‫我要把它设置成与兵重叠｡

85
00:07:31,740 --> 00:07:36,690
‫这意味着如果它与我碰撞, 它基本上只是忽略它｡

86
00:07:36,690 --> 00:07:43,890
‫还有一件事我们要做的是因为这实际上是由两个静态网格组成的, 它们有自己的碰撞设置｡

87
00:07:43,890 --> 00:07:46,320
‫我要去土墩那儿｡

88
00:07:46,320 --> 00:07:48,720
‫那是在滴水嘴下面的东西｡

89
00:07:49,110 --> 00:07:52,350
‫这里我想把事情简单化｡

90
00:07:52,350 --> 00:07:57,480
‫我打算让土堆部分, 没有碰撞｡

91
00:07:57,490 --> 00:08:00,300
‫所以我要把它切换到无碰撞预设｡

92
00:08:00,510 --> 00:08:05,250
‫然后我会继续按播放, 从地板上抓起石像鬼｡

93
00:08:05,250 --> 00:08:09,540
‫现在你可以看到,

94
00:08:09,540 --> 00:08:14,730
‫当我运行它的时候, 没有任何奇怪的小故障, 因为它没有试图与玩家碰撞网格碰撞｡

95
00:08:14,760 --> 00:08:15,540
‫好东西｡

96
00:08:15,540 --> 00:08:23,790
‫在这节课中, 我们学习了如何使抓取器更加可靠, 以及如何释放抓取组件｡

97
00:08:23,790 --> 00:08:24,510
‫好东西｡

98
00:08:24,510 --> 00:08:26,190
‫我们下节课再见｡

