﻿1
00:00:04,520 --> 00:00:05,630
‫Olá e bem-vindo.

2
00:00:05,630 --> 00:00:11,450
‫Nesta palestra, aprenderemos sobre funções que não residem nos blueprints de nível, mas em

3
00:00:11,690 --> 00:00:14,240
‫uma classe de blueprint específica.

4
00:00:14,240 --> 00:00:19,880
‫Elas são chamadas de funções-membro e são absolutamente cruciais para a programação orientada a objetos.

5
00:00:20,210 --> 00:00:22,400
‫Vamos mergulhar e ver como eles funcionam.

6
00:00:23,270 --> 00:00:31,370
‫Então, em nossa função de projétil de geração nos planos de nível, temos uma carga de nós aqui relacionados à adição do

7
00:00:31,400 --> 00:00:36,590
‫impulso, obtendo a direção do impulso e obtendo o componente de malha estática.

8
00:00:37,010 --> 00:00:43,310
‫Todos esses nós usam a instância do projétil BP em profundidade.

9
00:00:43,700 --> 00:00:50,600
‫Não seria ótimo se pudéssemos pegar todo esse código e movê-lo para o projétil BP para que o

10
00:00:50,600 --> 00:00:54,860
‫código que lida com esses dados vivesse com os próprios dados?

11
00:00:55,370 --> 00:00:59,300
‫Bem, esse é o objetivo da programação orientada a objetos.

12
00:00:59,300 --> 00:01:06,770
‫Assim, podemos definir a programação orientada a objetos como funções que vivem com os dados que elas manipulam.

13
00:01:07,490 --> 00:01:09,020
‫Então, como isso funciona?

14
00:01:09,020 --> 00:01:13,250
‫Como podemos fazer funções em instâncias particulares de coisas?

15
00:01:14,000 --> 00:01:20,060
‫Bem, uma maneira de fazer isso, podemos abrir nossa classe de projétil BP e ter certeza de clicar

16
00:01:20,060 --> 00:01:26,960
‫em abrir o editor de blueprint completo é que você pode ver que neste editor de blueprint completo há um painel

17
00:01:26,960 --> 00:01:35,270
‫de meu blueprint e uma seção de função para que possamos clicar na seta de mais aqui para criar uma nova função na classe de projétil

18
00:01:35,270 --> 00:01:35,780
‫BP.

19
00:01:35,780 --> 00:01:41,900
‫E eu vou nomear essa função, imprimir seu nome e isso imprimir seu nome.

20
00:01:41,900 --> 00:01:43,940
‫A função deve fazer exatamente isso.

21
00:01:44,240 --> 00:01:49,850
‫Podemos ver que temos um nó que inicia a execução nesta função para que possamos retirar seu

22
00:01:49,850 --> 00:01:52,430
‫pino de execução e digitar print string.

23
00:01:52,430 --> 00:01:53,750
‫Então isso vai ser impresso.

24
00:01:53,750 --> 00:01:54,320
‫Olá.

25
00:01:54,320 --> 00:01:57,140
‫Não é exatamente o nome desta função, não é?

26
00:01:57,170 --> 00:01:59,090
‫Mas vamos resolver isso em apenas um segundo.

27
00:01:59,780 --> 00:02:04,070
‫Então, o que temos aqui é conhecido como função-membro.

28
00:02:04,070 --> 00:02:11,990
‫Uma função membro é uma função em uma classe que sempre é chamada em uma instância específica de uma classe.

29
00:02:11,990 --> 00:02:18,020
‫Então você não diz, eu vou chamar ou imprimir seu nome em todos os projéteis BP.

30
00:02:18,440 --> 00:02:24,950
‫Você tem que dizer, eu quero ligar, imprimir seu nome no projétil BP número um, ou projétil BP que

31
00:02:24,950 --> 00:02:26,420
‫acabou de ser gerado.

32
00:02:26,870 --> 00:02:36,580
‫Então, se formos para o nosso plano de nível, o que você teria que fazer é pegar a referência que saiu do

33
00:02:36,590 --> 00:02:38,540
‫projétil BP de spawn.

34
00:02:39,110 --> 00:02:47,990
‫E a partir dessa referência você pode chamar print your name e você pode ver que ele se conecta automaticamente

35
00:02:47,990 --> 00:02:51,770
‫a uma nota de entrada especial chamada Target.

36
00:02:51,890 --> 00:02:54,380
‫E obviamente você também precisa conectar seus pinos de execução.

37
00:02:54,380 --> 00:02:58,430
‫Vou ligá-lo para acontecer depois de adicionar impulso.

38
00:02:58,610 --> 00:03:07,220
‫Mas o que é interessante sobre esse nó de entrada de alvo especial é que, se você for até o projétil BP,

39
00:03:07,310 --> 00:03:08,690
‫verá essa impressão.

40
00:03:08,690 --> 00:03:12,620
‫Seu nome não tem essa carga de entrada.

41
00:03:12,920 --> 00:03:14,510
‫Então o que está acontecendo aqui?

42
00:03:15,080 --> 00:03:24,020
‫Bem, implicitamente, qualquer função membro tem um parâmetro que é seu destino atual ou a instância atual.

43
00:03:24,620 --> 00:03:31,670
‫E você pode obter isso clicando com o botão direito do mouse no gráfico de eventos do blueprint e digitando self.

44
00:03:32,510 --> 00:03:37,850
‫E você pode ver que há um nó chamado get a reference to self e ele apenas cria um nó self como

45
00:03:37,850 --> 00:03:38,210
‫este.

46
00:03:38,660 --> 00:03:45,920
‫E então você pode usar essa referência de objeto próprio para obter qualquer uma das propriedades desse objeto

47
00:03:45,920 --> 00:03:46,340
‫específico.

48
00:03:46,340 --> 00:03:53,240
‫Então, se quisermos obter o nome do nosso projétil BP, você pode retirar a auto-referência e

49
00:03:53,240 --> 00:03:56,900
‫digitar get display name, o que fizemos antes.

50
00:03:57,200 --> 00:04:00,980
‫E então você pode conectar o nome de exibição em nossa string de impressão.

51
00:04:01,370 --> 00:04:09,650
‫Então agora quando jogamos e disparamos um novo projétil, você pode ver que está imprimindo o nome do projétil e

52
00:04:10,280 --> 00:04:17,180
‫você pode ver se cada novo projétil que cria o nome é diferente porque o self que

53
00:04:17,180 --> 00:04:23,600
‫está sendo referido pela função membro é um eu diferente é um projétil diferente.

54
00:04:23,780 --> 00:04:31,490
‫Então, aprendemos que self é um nó disponível dentro de funções-membro que sempre aponta para

55
00:04:31,490 --> 00:04:35,120
‫a instância atual específica que estamos usando.

56
00:04:35,270 --> 00:04:40,160
‫Então, todo o objetivo de olhar para as funções-membro em primeiro lugar, a razão pela qual começamos

57
00:04:40,160 --> 00:04:45,620
‫foi por causa desses nós nos planos de nível, a maneira como obtemos a mistura estática, obtemos o vetor

58
00:04:45,620 --> 00:04:48,020
‫direto e adicionamos um impulso a eles.

59
00:04:48,620 --> 00:04:51,860
‫Estes parecem que deveriam viver no projétil BP.

60
00:04:51,860 --> 00:04:55,100
‫E é isso que eu gostaria de desafiá-lo a fazer.

61
00:04:55,430 --> 00:04:58,670
‫Portanto, esta é uma cobrança um pouco complicada, mas estamos chegando ao final da seção.

62
00:04:58,670 --> 00:05:01,490
‫Então eu vou te guiar passo a passo.

63
00:05:02,120 --> 00:05:03,850
‫Então vamos fazer um func de lançamento.

64
00:05:04,030 --> 00:05:07,470
‫Brilhe no projeto BP, também criado nos projetos BP.

65
00:05:07,480 --> 00:05:09,720
‫Eu vou para as partes mais e adicionar uma nova.

66
00:05:09,730 --> 00:05:10,840
‫Dê o nome de lançamento.

67
00:05:11,500 --> 00:05:18,670
‫Em seguida, corte e cole os nós dos planos de nível nesta sua função recém-criada e certifique-se

68
00:05:18,670 --> 00:05:21,850
‫de conectar pinos de execução e etc.

69
00:05:22,600 --> 00:05:24,820
‫Agora você vai tentar compilar.

70
00:05:25,120 --> 00:05:30,190
‫Não temos feito isso com muita frequência em blueprints, mas compilar apenas permite que você essencialmente

71
00:05:30,400 --> 00:05:36,730
‫verifique a ortografia do seu código e certifique-se de que não haja erros que o compilador do Blueprint possa prever.

72
00:05:36,940 --> 00:05:43,570
‫Então, a maneira de fazer isso é ir até o botão no canto superior esquerdo e clicar em compilar, e se

73
00:05:43,570 --> 00:05:48,550
‫houver algum erro, eles aparecerão na parte inferior do pequeno painel chamado resultados do compilador.

74
00:05:48,550 --> 00:05:53,470
‫Você pode ver que a compilação foi bem-sucedida, mas quaisquer erros aparecerão aqui e às vezes você terá um

75
00:05:53,470 --> 00:05:57,010
‫pouco de vermelho em um nó para indicar onde está o erro.

76
00:05:57,910 --> 00:06:03,550
‫E eu gostaria de ver se você pode tentar entender o que esse erro está dizendo e tentar

77
00:06:03,760 --> 00:06:07,210
‫corrigir o erro usando o novo nó self que aprendemos.

78
00:06:07,990 --> 00:06:15,730
‫E então você precisa ir em frente e chamar essa função dos blueprints de nível arrastando para fora da instância, como

79
00:06:15,730 --> 00:06:22,570
‫fizemos para o nosso nó print-yourself, arraste para fora da instância do novo projétil criado a partir do

80
00:06:22,570 --> 00:06:25,720
‫nó spawn e chame a função de lançamento.

81
00:06:26,260 --> 00:06:28,150
‫Pause o vídeo e vá em frente.

82
00:06:31,280 --> 00:06:31,970
‫OK.

83
00:06:31,970 --> 00:06:32,780
‫Bem vindo de volta.

84
00:06:32,840 --> 00:06:39,260
‫Então, vou para o nosso projétil de BP, aperte o botão de adição ao lado de funções

85
00:06:39,260 --> 00:06:47,030
‫no painel do meu plano e digite launch para nomear a função que vamos voltar ao nosso plano de nível,

86
00:06:47,030 --> 00:06:51,440
‫cortar os nós e entrar no BP projétil e cole-os.

87
00:06:52,130 --> 00:06:58,460
‫Agora eu tenho que ligar a execução do lançamento para adicionar impulso e agora vou clicar, compilar e

88
00:06:58,490 --> 00:07:04,580
‫você vê que recebo um erro no mash estático ou obtenho o nó de mash estático.

89
00:07:05,120 --> 00:07:10,310
‫E se você olhar nos resultados do compilador, ele diz que usa um destino inválido.

90
00:07:10,820 --> 00:07:15,240
‫Portanto, o destino desta entrada aqui não está correto.

91
00:07:15,260 --> 00:07:24,470
‫Agora, como eu recomendei, você pode clicar com o botão direito do mouse e digitar self para obter uma referência a self e,

92
00:07:24,470 --> 00:07:28,190
‫em seguida, trazer esse self para o destino.

93
00:07:28,850 --> 00:07:34,430
‫Agora, se você clicar em compilar novamente, poderá ver que o erro desapareceu

94
00:07:34,430 --> 00:07:43,250
‫e foi compilado com sucesso, porque o que está acontecendo é que agora é capaz de obter os componentes estáticos do projétil atual.

95
00:07:43,490 --> 00:07:45,770
‫Esta função de inicialização está sendo chamada.

96
00:07:46,550 --> 00:07:56,030
‫Então, se voltarmos aos nossos planos de nível agora, podemos pegar o pino de saída do nosso ator de spawn e podemos

97
00:07:56,030 --> 00:07:59,890
‫digitar launch para chamar nossa função de lançamento.

98
00:07:59,900 --> 00:08:06,050
‫Você pode ver que o pino de execução foi automaticamente conectado para mim e, em seguida, após a

99
00:08:06,050 --> 00:08:12,140
‫função de inicialização, podemos conectar nossa função print your name, se quisermos, embora isso tenha sido apenas

100
00:08:12,560 --> 00:08:18,920
‫para fins de depuração e demonstração e, se você testar, você pode ver que ainda está sendo lançado com

101
00:08:18,920 --> 00:08:24,470
‫sucesso, exceto agora o código que lida com o lançamento de vidas no próprio projétil.

102
00:08:24,560 --> 00:08:25,190
‫Coisas boas.

103
00:08:25,190 --> 00:08:30,800
‫Aprendemos sobre um dos conceitos centrais da programação orientada a objetos nesta palestra sobre funções de membro.

104
00:08:30,950 --> 00:08:32,510
‫Vejo você na próxima.

