﻿1
00:00:04,830 --> 00:00:05,820
‫你好, 欢迎｡

2
00:00:05,820 --> 00:00:12,150
‫在这节课中, 我们将学习对象,

3
00:00:12,150 --> 00:00:16,170
‫以及如何使用对象的功能和数据来创建有趣的程序｡

4
00:00:16,170 --> 00:00:17,700
‫我们开始吧｡

5
00:00:18,910 --> 00:00:24,430
‫所以让我们从引入一个新概念开始这堂课, 物体的概念｡

6
00:00:24,430 --> 00:00:27,670
‫它对很多编程语言都是至关重要的｡

7
00:00:27,940 --> 00:00:37,120
‫所以一个物体本质上是你想要代表的东西, 就像在一个游戏中你可能有一个冒险家｡

8
00:00:37,120 --> 00:00:46,600
‫他是你世界里的一个物体, 他可能有一些数据, 代表他是什么, 比如他是什么, 比如经验值,

9
00:00:46,600 --> 00:00:51,490
‫或者他的等级, 他是一个二级冒险者.

10
00:00:51,490 --> 00:00:57,520
‫这些都是构成冒险家的数据, 但这并不是冒险家的全部｡

11
00:00:57,520 --> 00:01:06,670
‫一个冒险者也是有些功能的, 比如能够发射箭矢, 比如能够跳跃等等｡

12
00:01:07,210 --> 00:01:09,130
‫还有其他东西可以成为对象｡

13
00:01:09,130 --> 00:01:15,310
‫例如, 我们可以在计算机中表示真实的世界中的事物,

14
00:01:15,310 --> 00:01:23,980
‫比如玩家, 我们可以存储玩家的相关属性, 比如玩家使用的是控制器, 玩家是1号还是2号？

15
00:01:24,010 --> 00:01:29,680
‫那些种类的数据块和相关的功能例如获得它们的当前输入｡

16
00:01:29,890 --> 00:01:35,380
‫他们是不是按住空格键, 比如说, 得到玩家的技能等级然后你就可以有完全抽象的对象,

17
00:01:35,380 --> 00:01:38,650
‫比如列表之类的东西｡

18
00:01:38,650 --> 00:01:43,210
‫所以你可以有一个列表, 其中有项目一, 二, 三, 四, 或者它可以有任何项目,

19
00:01:43,210 --> 00:01:44,470
‫你喜欢在它｡

20
00:01:44,470 --> 00:01:52,630
‫数据可以更改, 但也可能具有某些功能, 例如从列表中删除最后一项或添加到列表末尾｡

21
00:01:52,630 --> 00:01:55,180
‫所以你可以看到物体非常非常灵活｡

22
00:01:55,180 --> 00:01:58,660
‫它们可以用来代表无数不同的事物｡

23
00:01:58,660 --> 00:02:08,410
‫您会注意到, 这些对象底部的功能实际上就是Blueprint中的这些节点或许多节点｡

24
00:02:08,410 --> 00:02:15,100
‫因此, 他们开始在对象和功能之间建立一点映射｡

25
00:02:15,490 --> 00:02:15,760
‫好吧, 我会的

26
00:02:15,760 --> 00:02:17,950
‫所以我们引入了一系列新概念｡

27
00:02:17,950 --> 00:02:19,810
‫让我们稍微回顾一下｡

28
00:02:19,810 --> 00:02:24,550
‫我们说过, 对象是数据和功能的集合｡

29
00:02:24,940 --> 00:02:28,930
‫我们可能没有意识到的是, 行动者实际上是物体｡

30
00:02:28,930 --> 00:02:31,930
‫执行元是可以进入某个级别的对象｡

31
00:02:31,930 --> 00:02:36,790
‫如果您进入您的级别, 选择多维数据集,

32
00:02:36,790 --> 00:02:39,820
‫您可以看到详细信息窗格中有一大堆数据｡

33
00:02:39,820 --> 00:02:45,370
‫稍后我们将看到, 蓝图中的节点表单中也有大量功能｡

34
00:02:46,090 --> 00:02:47,380
‫然后是组件｡

35
00:02:47,380 --> 00:02:50,800
‫我们以前没有详细介绍过这些组件, 但现在都在这里了｡

36
00:02:51,070 --> 00:02:57,610
‫它们是可以放在参与者上的对象, 而参与者放在层级上, 组件放在参与者本身上｡

37
00:02:57,610 --> 00:03:04,180
‫因此, 选中Cube后, 您可以在详细信息窗格的顶部看到这个静态网格组件｡

38
00:03:04,540 --> 00:03:11,080
‫如果您真的单击它, 您将看到详细信息窗格获得一组有限的详细信息｡

39
00:03:11,080 --> 00:03:19,240
‫它并不是向您显示Cube

40
00:03:19,240 --> 00:03:28,090
‫actor上可用的所有属性, 而是仅显示属于静态网格组件的属性子集, 该组件主要负责告诉我们如何绘制立方体｡

41
00:03:28,360 --> 00:03:34,330
‫现在, 这些对象通常会有比这更多的数据,

42
00:03:34,330 --> 00:03:40,600
‫这意味着它们会变得非常繁重, 很难被你的计算机操作, 当然, 如果它必须复制这些对象的话｡

43
00:03:40,720 --> 00:03:47,080
‫所以我们不用这么做, 而是使用一个叫做引用的聪明结构,

44
00:03:47,080 --> 00:03:55,690
‫它本质上就是一个地址, 或者我该去哪里, 在计算机内存中找到这个对象, 这样我就不用一直移动这个对象了？

45
00:03:55,690 --> 00:04:04,150
‫我们在学习C++时会详细介绍它在内存中是如何工作的, 但现在, 知道它只是一个地址就足够了｡

46
00:04:04,720 --> 00:04:09,730
‫所以我们能做的, 比如说, 让我们深入到虚幻中｡

47
00:04:09,730 --> 00:04:17,110
‫如果我们在主级别中, 并且希望在立方体上使用一些功能, 那么我可以在场景中选择立方体,

48
00:04:17,110 --> 00:04:22,300
‫然后转到我的级别蓝图并右键单击,

49
00:04:22,300 --> 00:04:27,790
‫然后单击创建对立方体的引用, 这将创建一个新节点｡

50
00:04:27,850 --> 00:04:29,230
‫那是干什么的？

51
00:04:29,230 --> 00:04:33,010
‫这基本上就是告诉我们这就是魔方的地址

52
00:04:33,010 --> 00:04:35,980
‫如果你想用立方体做点什么, 这里就是你找到它的地方｡

53
00:04:36,220 --> 00:04:41,260
‫在Blueprint中, 当你运行这个游戏的时候, 它会去找到那个立方体｡

54
00:04:41,260 --> 00:04:48,760
‫然后您可以提出问题或使用立方体上的功能, 例如说, 嘿, 您的静态网格组件在哪里？

55
00:04:48,760 --> 00:04:51,280
‫他说, 好的, 静态网格组件在那边｡

56
00:04:51,280 --> 00:04:57,370
‫我们找到静态网格组件, 然后我们可以问这个问题, 它会说, 嘿, 你叫什么名字？

57
00:04:57,370 --> 00:04:58,600
‫静态网格组件｡

58
00:04:58,600 --> 00:05:01,540
‫静态网格组件可以说, 嘿, 我的名字是鲍勃｡

59
00:05:01,540 --> 00:05:09,610
‫这就是我们如何使用这些引用和使用多个不同对象的功能来到达我们想要去的地方｡

60
00:05:09,610 --> 00:05:17,770
‫我们已经说过, 引用是查找对象的位置, 现在需要指出的是数据引脚｡

61
00:05:17,770 --> 00:05:18,250
‫到底是一个｡

62
00:05:18,590 --> 00:05:21,320
‫这个立方体引用实际上有一个｡

63
00:05:21,320 --> 00:05:26,650
‫右手边的这个蓝色的小东西是一个数据引脚｡

64
00:05:26,660 --> 00:05:31,220
‫我们以前在打印字符串节点上见过这些, 在左手, 它们是紫色的｡

65
00:05:31,370 --> 00:05:37,430
‫这些与我们看到的其他类型的引脚, 这些白色引脚, 有什么不同？

66
00:05:37,580 --> 00:05:42,680
‫数据引脚是节点的数据输入或输出｡

67
00:05:42,680 --> 00:05:47,840
‫所以一个节点, 如果它在左手, 它就是输入, 它是节点可以处理的数据｡

68
00:05:47,870 --> 00:05:52,100
‫如果它在右侧, 则它是Node生成的数据｡

69
00:05:52,100 --> 00:06:00,650
‫因此, 在多维数据集的情况下, 此节点生成对多维数据集参与者的引用, 然后执行固定｡

70
00:06:00,650 --> 00:06:06,530
‫这些实际上是那些白色引脚的真正名称, 以区分它们与数据引脚,

71
00:06:06,530 --> 00:06:09,710
‫它们仍然是运行节点的时间｡

72
00:06:09,710 --> 00:06:12,440
‫因此, 数据引脚是运行节点的引脚｡

73
00:06:12,440 --> 00:06:14,840
‫执行引脚是何时运行它｡

74
00:06:14,840 --> 00:06:21,470
‫有了所有这些信息, 让我们稍微使用一下这些对象的功能｡

75
00:06:21,470 --> 00:06:23,360
‫这样我们就得到了立方体引用｡

76
00:06:23,360 --> 00:06:30,290
‫如果我们拖动立方体参考针, 您可以使用该立方体具有的所有功能｡

77
00:06:30,290 --> 00:06:38,390
‫正如我所说的, 我们在立方体上有一个称为静态网格组件的组件, 我想继续并获得对它的引用｡

78
00:06:38,390 --> 00:06:47,030
‫因此, 我们将查找“获取静态网格”组件, 最下面的项是“获取静态网格”组件｡

79
00:06:47,030 --> 00:06:48,050
‫我可以点击它｡

80
00:06:48,050 --> 00:06:56,480
‫我们得到一个新节点, 输入是一个立方体引用, 输出是对它的静态网格组件的引用｡

81
00:06:56,480 --> 00:07:01,700
‫因此,

82
00:07:01,700 --> 00:07:11,330
‫如果我们将其拖离, 则可以请求静态网格组件的功能, 如获取显示名称, 这将获取静态网格组件引用的输入,

83
00:07:11,330 --> 00:07:20,330
‫它将使用其获取显示名称的功能, 然后返回一个字符串或文本值, 我们可以使用打印字符串节点打印该字符串或文本值｡

84
00:07:20,330 --> 00:07:26,270
‫我们可以拖动它, 输入print string, 然后连接执行节点,

85
00:07:26,270 --> 00:07:30,680
‫这样它就可以在其他两个print string之后开始播放了.

86
00:07:31,010 --> 00:07:33,710
‫您会注意到, 其中一些节点没有执行引脚｡

87
00:07:33,710 --> 00:07:34,730
‫这可能会让人困惑｡

88
00:07:34,730 --> 00:07:35,870
‫他们什么时候开始跑步？

89
00:07:35,870 --> 00:07:45,050
‫只要蓝图认为合适, 它们就会运行, 基本上只要有执行引脚的节点需要它们｡

90
00:07:45,050 --> 00:07:50,090
‫如果我们继续点击播放, 您可以看到它弹出一个名称为cube static mesh component

91
00:07:50,090 --> 00:07:51,170
‫zero或类似的内容｡

92
00:07:51,170 --> 00:07:52,400
‫这是一个比特编程树｡

93
00:07:52,430 --> 00:07:56,210
‫不是, 不是鲍勃比那更复杂.

94
00:07:56,210 --> 00:08:02,240
‫但是你可以看到我们基本上已经把我幻灯片上的一系列问题编好了｡

95
00:08:02,390 --> 00:08:09,200
‫所以我想请你们继续, 并得到我们的静态网格组件的质量｡

96
00:08:09,200 --> 00:08:11,270
‫我们在过去已经配置了它｡

97
00:08:11,270 --> 00:08:15,950
‫如果您进入该级别并查看详细信息窗格, 您可以看到其中一个物理属性是质量,

98
00:08:15,950 --> 00:08:20,540
‫我们已将其配置为静态网格组件上的一段数据｡

99
00:08:20,660 --> 00:08:26,540
‫如果删除get display

100
00:08:26,540 --> 00:08:33,470
‫name节点并拖动静态网格组件, 您应该能够搜索get mass, 这样就可以获得静态网格组件上的数据,

101
00:08:33,470 --> 00:08:39,920
‫然后看看是否可以使用print string节点打印该值｡ 暂停视频, 开始操作｡

102
00:08:43,330 --> 00:08:43,930
‫好吧, 我会的

103
00:08:43,930 --> 00:08:44,800
‫欢迎回来｡

104
00:08:44,830 --> 00:08:53,680
‫因此, 如果我们返回蓝图, 只需删除显示名称, 拖动静态网格组件并搜索“获取质量”｡

105
00:08:53,890 --> 00:08:55,990
‫然后我们就能把那个节点拉进来｡

106
00:08:55,990 --> 00:09:00,640
‫这里有一个返回值, 这就是质量值｡

107
00:09:00,640 --> 00:09:05,350
‫你可以看到如果你把鼠标悬停在上面, 它会返回这个组件的质量, 单位是千克｡

108
00:09:05,350 --> 00:09:08,470
‫顺便说一下, 返回值只是指输出数据｡

109
00:09:08,530 --> 00:09:14,590
‫然后我们可以将该节点拖到print字符串的in字符串中｡

110
00:09:14,590 --> 00:09:17,800
‫你可以看到它创建了一个小的转换节点｡

111
00:09:17,800 --> 00:09:22,900
‫它将这个值转换成打印字符串可以接受的值｡

112
00:09:22,900 --> 00:09:30,970
‫我们可以点击“播放”, 您会看到我们得到的值为1000, 我们知道这是我们配置的质量, 或者您实际配置的任何质量｡

113
00:09:30,970 --> 00:09:34,810
‫您可以更改该值, 并看到该值也将更改｡

114
00:09:34,810 --> 00:09:36,220
‫这节课就讲到这里｡

115
00:09:36,220 --> 00:09:43,090
‫我们已经学习了对象及其引用, 以及如何在蓝图中使用功能节点｡

