﻿1
00:00:04,370 --> 00:00:05,360
‫你好, 欢迎｡

2
00:00:05,360 --> 00:00:11,450
‫在这堂课中, 我们将学习如何在Blueprint中从C++创建新节点,

3
00:00:11,450 --> 00:00:17,180
‫这样我们就可以在Blueprint中调用C++功能｡

4
00:00:17,180 --> 00:00:18,770
‫让我们来看看它是如何完成的｡

5
00:00:18,920 --> 00:00:27,260
‫现在, 我可以使用蓝图来调用蓝图节点, 但我实际上想从这张蓝图中激活我们的抓取器,

6
00:00:27,260 --> 00:00:32,300
‫而不是打印一些字符串｡

7
00:00:32,300 --> 00:00:34,670
‫那我该怎么做呢？

8
00:00:34,970 --> 00:00:43,520
‫好吧, 幸运的是, 我们可以很容易地将C++类中的函数公开到蓝图中｡

9
00:00:43,520 --> 00:00:46,160
‫我们这样做的方式如下｡

10
00:00:46,160 --> 00:00:48,560
‫所以我们要创建一个新的公共函数｡

11
00:00:48,560 --> 00:00:52,520
‫我将转到tick组件下面的public部分｡

12
00:00:52,520 --> 00:00:58,250
‫这里我将创建一个新的函数, 返回类型为void, 叫做release｡

13
00:00:58,250 --> 00:01:03,830
‫稍后我们会用到grab, 但现在我们只调用一个release函数.

14
00:01:03,920 --> 00:01:07,790
‫如何在Blueprint中提供此功能？

15
00:01:07,790 --> 00:01:10,850
‫我需要把它变成U函数｡

16
00:01:10,850 --> 00:01:13,370
‫所以你已经得到了变量的属性｡

17
00:01:13,370 --> 00:01:20,570
‫你的函数相当于让一个函数在蓝图中基本可见｡

18
00:01:20,570 --> 00:01:23,210
‫但我们并没有止步于此, 就像新的财产｡

19
00:01:23,210 --> 00:01:31,580
‫我们必须在这里用u函数使它成为edit anywhere, 我们必须使它成为bluepire可调用的,

20
00:01:31,580 --> 00:01:38,330
‫顾名思义, 这意味着这个函数现在变成了bluepire可以访问的节点｡

21
00:01:38,330 --> 00:01:42,530
‫现在, 让我们获取一个CP, 并为此创建一个实现｡

22
00:01:42,530 --> 00:01:44,480
‫返回类型为void｡

23
00:01:44,480 --> 00:01:45,500
‫它将是一个U｡

24
00:01:45,530 --> 00:01:50,720
‫抓取器, 结肠, 结肠释放, 无参数｡

25
00:01:50,720 --> 00:01:57,350
‫我们会放一个函数体, 我会在里面放一个u log,

26
00:01:57,380 --> 00:02:05,600
‫然后我会给予出消息, 像这样释放抓取器, 然后我们可以编译, 然后在哔声中返回｡

27
00:02:05,600 --> 00:02:17,060
‫我将删除print字符串节点然后把released从这里拖走然后在这里搜索release函数.

28
00:02:17,060 --> 00:02:19,130
‫现在让我们去四处看看｡

29
00:02:19,130 --> 00:02:23,090
‫目前没有显示任何内容, 因为我需要在抓取器上执行此操作｡

30
00:02:23,090 --> 00:02:34,360
‫我们将抓取器组件拖到事件图中, 创建一个抓取器变量, 然后将其拖离并搜索release｡

31
00:02:34,370 --> 00:02:36,680
‫现在, 你注意到在这个例子中也没有出现任何东西｡

32
00:02:36,680 --> 00:02:44,180
‫这是因为我们使用了实时编码, 有时在实时编码中编译的内容不会显示在编辑器中｡

33
00:02:44,180 --> 00:02:50,210
‫我们要做的是关闭编辑器, 关闭实时编码窗口, 然后在Visual Studio代码中,

34
00:02:50,210 --> 00:02:57,410
‫点击控制键B, 使用Crypt Raider编辑器win 64 Development Build进行构建｡

35
00:02:57,410 --> 00:03:03,650
‫等待该操作成功, 然后从新的项目文件重新启动编辑器｡

36
00:03:03,650 --> 00:03:10,640
‫现在, 如果我们重新打开BP播放器, 现在拖动抓取器, 我们搜索释放｡

37
00:03:10,640 --> 00:03:13,850
‫您可以看到, 现在有一个名为release的节点｡

38
00:03:13,850 --> 00:03:17,930
‫实际上, 所有这些都是以C++的形式调用｡

39
00:03:17,930 --> 00:03:28,730
‫因此, 您可以看到如何通过将C++的内容公开到Blueprint世界中, 真正地将Blueprint和C++紧密协作起来｡

40
00:03:28,730 --> 00:03:33,170
‫现在, 我将把发布执行引脚连接到发布节点｡

41
00:03:33,380 --> 00:03:38,630
‫我们要进入我们的地牢, 我们要点击播放｡

42
00:03:39,320 --> 00:03:46,940
‫现在如果我抓取然后释放, 你看不到任何东西, 因为它在输出日志中｡

43
00:03:46,940 --> 00:03:52,430
‫因此, 让我们打开输出日志并将其停靠到布局, 然后再次单击播放｡

44
00:03:53,360 --> 00:03:57,860
‫现在, 当我们抓取然后释放时, 你可以看到那里有一个简短的消息｡

45
00:03:57,860 --> 00:04:04,340
‫它滚动得非常快, 因为我们每做一个滴答声都是在打石像鬼状态雕像｡

46
00:04:04,340 --> 00:04:09,530
‫但是如果你停下来回头看, 你可以看到它说释放抓取器｡

47
00:04:09,530 --> 00:04:12,980
‫因此, 我们的C++代码正在执行｡

48
00:04:13,010 --> 00:04:19,280
‫好的, 现在我想让你把扫描代码移到一个抓取函数中｡

49
00:04:19,280 --> 00:04:22,340
‫因此, 您将创建一个抓取函数, 并从Blueprint中调用它｡

50
00:04:22,340 --> 00:04:25,010
‫你要用和我刚才释放函数一样的方法来做｡

51
00:04:25,160 --> 00:04:29,630
‫但是当你创建grab函数的主体而不是仅仅打印任何东西时,

52
00:04:29,630 --> 00:04:36,500
‫让我们把扫描代码和if语句以及所有的prep变量从TIC中移走, 这样它就不会这样做了｡

53
00:04:36,500 --> 00:04:43,100
‫每当我们调用抓取函数时, 当我们按下鼠标按钮或按下控制器上的触发器时,

54
00:04:43,100 --> 00:04:49,970
‫我们都会重新编译并检查日志, 以确保确实只有当您按下按钮时才会发生这种情况,

55
00:04:49,970 --> 00:04:54,800
‫暂停视频并开始操作｡

56
00:04:58,180 --> 00:04:59,140
‫欢迎回来｡

57
00:04:59,170 --> 00:05:03,850
‫让我们进入C++, 然后进入头文件｡

58
00:05:03,850 --> 00:05:07,390
‫我将在此处和以上版本中关闭编译窗口｡

59
00:05:07,390 --> 00:05:17,920
‫我将创建一个新的U函数蓝图, 可调用的, 它将是一个空的, 叫做grab,

60
00:05:17,920 --> 00:05:20,590
‫我们将在C++中实现它｡

61
00:05:20,590 --> 00:05:22,600
‫所以, 这又是一个空白｡

62
00:05:22,600 --> 00:05:28,540
‫你抓一个冒号, 冒号抓括号, 然后大括号｡

63
00:05:28,840 --> 00:05:36,130
‫我将把所有这些代码从TIC组件中移走, 因为我们要设置起始向量和所有类似的东西｡

64
00:05:36,280 --> 00:05:42,940
‫让我们一路向下, 把它剪下来, 粘贴到grab中, 而不是它应该在的地方｡

65
00:05:42,940 --> 00:05:43,810
‫挺好的

66
00:05:43,810 --> 00:05:50,120
‫现在, 让我们看看实时编码是否会在BP播放器中实现该功能｡

67
00:05:50,140 --> 00:05:55,150
‫让我们转到哔声播放器, 删除print字符串, 然后拖动它｡

68
00:05:55,150 --> 00:05:58,600
‫抓取一个节点, 看看是否能找到抓取函数｡

69
00:05:58,600 --> 00:06:02,170
‫好的, 这次我们可以使用抓取功能｡

70
00:06:02,170 --> 00:06:02,860
‫那太好了｡

71
00:06:02,860 --> 00:06:09,610
‫现在, 让我们连接按下的执行引脚, 转到我们的地牢, 点击播放,

72
00:06:09,610 --> 00:06:11,410
‫并确保我们向下滚动到输出日志的底部｡

73
00:06:11,440 --> 00:06:17,530
‫右键单击我的视口, 看看四周, 然后按左键｡

74
00:06:17,530 --> 00:06:22,150
‫它说没有演员击中, 然后立即释放抓取器, 所以没有演员击中｡

75
00:06:22,150 --> 00:06:24,550
‫然后我松开钥匙, 没有释放抓取器｡

76
00:06:24,550 --> 00:06:26,770
‫现在如果我走到我的石像鬼那里, 我会看一看｡

77
00:06:26,800 --> 00:06:31,450
‫我按下它, 它说演员击中石像鬼雕像, 然后我可以释放抓钩｡

78
00:06:31,570 --> 00:06:38,770
‫所以现在我们已经有了合适的建筑来抓住这个石像鬼｡

79
00:06:38,770 --> 00:06:42,760
‫接下来, 我们需要处理此设置的物理部分｡

80
00:06:42,880 --> 00:06:44,290
‫我们下节课再见｡

