﻿1
00:00:04,580 --> 00:00:05,390
‫Olá e bem-vindo.

2
00:00:05,390 --> 00:00:10,730
‫Nesta palestra, vamos conectar nosso sistema de saúde ao plano de animação para que eu

3
00:00:10,730 --> 00:00:13,700
‫possa atirar nesse personagem até que ele morra.

4
00:00:13,700 --> 00:00:15,380
‫Vamos mergulhar e ver como isso funciona.

5
00:00:16,580 --> 00:00:22,580
‫Então você quer que esse booleano nos planos de animação seja definido automaticamente a partir do jogo.

6
00:00:23,180 --> 00:00:29,270
‫E se formos para o gráfico de eventos e dermos uma olhada como isso está funcionando atualmente, outras propriedades

7
00:00:29,270 --> 00:00:34,370
‫como esta, como obter velocidade, ficar ativo, transformar, vamos para o peão e estamos fazendo

8
00:00:34,370 --> 00:00:38,270
‫uma função get nele toda vez que queremos atualizar a animação.

9
00:00:38,810 --> 00:00:43,910
‫Então, nós queremos seguir esse modelo onde iremos e saber se nosso jogador está

10
00:00:43,910 --> 00:00:45,020
‫morto ou não.

11
00:00:45,320 --> 00:00:52,130
‫Tanto que precisamos expor alguma funcionalidade, alguma função que pode ser chamada do nosso C++.

12
00:00:52,670 --> 00:00:57,050
‫Então vamos para o C++ e dê uma olhada no que está lá.

13
00:00:57,230 --> 00:01:02,300
‫Podemos criar uma função pública, mas isso não a torna necessariamente acessível.

14
00:01:03,140 --> 00:01:09,740
‫Para fazer a acessibilidade, precisamos ter uma nova função que a torne visível para blueprints e sistema de ferramentas de

15
00:01:09,740 --> 00:01:10,850
‫cabeçalho on rails.

16
00:01:11,120 --> 00:01:15,050
‫Mas temos que dar um passo além do que apenas tê-lo como uma nova função.

17
00:01:15,050 --> 00:01:20,090
‫Então, começamos com a macro de função, mas queremos torná-la chamada de blueprint.

18
00:01:20,090 --> 00:01:22,910
‫Então essa é a opção que podemos usar blueprint callable.

19
00:01:24,140 --> 00:01:29,660
‫No entanto, há outra opção que substitui o blueprint callable, em vez de implicar que é

20
00:01:29,660 --> 00:01:32,420
‫blueprint callable e que é blueprint puro.

21
00:01:32,450 --> 00:01:36,620
‫Agora veremos a diferença entre blueprint pure e Blueprint callable em apenas um segundo.

22
00:01:36,920 --> 00:01:43,400
‫Mas saiba que se você usar o blueprint pure, ele está fazendo o mesmo que o Blueprint Callable e mais alguns.

23
00:01:43,400 --> 00:01:45,410
‫Portanto, está fazendo um pouco mais do que o blueprint callable.

24
00:01:46,100 --> 00:01:50,600
‫E então o que queremos é uma função que retorne booleano que diga se esse personagem está morto

25
00:01:50,600 --> 00:01:51,110
‫ou não.

26
00:01:52,230 --> 00:01:54,240
‫Isso vai ser útil para nós sabermos.

27
00:01:54,540 --> 00:01:58,500
‫E então, finalmente, queremos que isso seja uma função de membro do concerto.

28
00:01:58,860 --> 00:02:00,740
‫Agora, por que quer ser concerto?

29
00:02:00,750 --> 00:02:08,010
‫Porque quando chamamos essa função, não esperamos que ela altere nenhum estado de ask you to character, então podemos dizer

30
00:02:08,010 --> 00:02:11,790
‫com segurança que essa deve ser uma função de concerto.

31
00:02:12,270 --> 00:02:19,770
‫E, na verdade, concerto e blueprint puro geralmente andam juntos porque blueprint pure significa que, se formos para

32
00:02:19,770 --> 00:02:24,120
‫qualquer blueprint, podemos dar uma olhada em algumas notas puras.

33
00:02:24,390 --> 00:02:26,070
‫Este aqui fica com a transformação ativa.

34
00:02:26,070 --> 00:02:27,000
‫Essa é uma nota pura.

35
00:02:27,000 --> 00:02:30,690
‫Obter velocidade é uma nota pura A velocidade definida não é uma nota pura.

36
00:02:30,690 --> 00:02:33,240
‫Você pode ver o que pode estar ligando estes juntos?

37
00:02:33,240 --> 00:02:37,170
‫O que sobre estes faz este não puro e este puro?

38
00:02:37,530 --> 00:02:43,440
‫Bem, de um modo geral, é o fato de que esta é uma pena de execução, um nó puro, é aquele que não tem

39
00:02:43,440 --> 00:02:44,700
‫um pino de execução.

40
00:02:45,090 --> 00:02:51,300
‫E geralmente é seguro dizer que algo não tem um pino de execução quando não tem nenhum impacto na coisa

41
00:02:51,300 --> 00:02:53,910
‫que está chamando apenas em seu resultado.

42
00:02:54,240 --> 00:03:00,270
‫Essencialmente, isso significa que não importa quantas vezes chamemos essa função, ela sempre produzirá

43
00:03:00,270 --> 00:03:01,590
‫o mesmo resultado.

44
00:03:01,590 --> 00:03:04,950
‫Sempre terá o mesmo efeito no programa.

45
00:03:05,280 --> 00:03:06,690
‫É uma função pura.

46
00:03:06,690 --> 00:03:09,000
‫Não muda nada quando é chamado.

47
00:03:09,360 --> 00:03:14,760
‫Então é o mesmo que const, embora seja um pouco mais forte porque o que está dizendo

48
00:03:14,760 --> 00:03:20,190
‫não é apenas que não muda nada aqui no personagem de filmagem, mas não muda nada global,

49
00:03:20,190 --> 00:03:21,960
‫qualquer estado, em qualquer lugar.

50
00:03:21,960 --> 00:03:22,650
‫Ponto final.

51
00:03:22,950 --> 00:03:28,740
‫A única entrada, o único efeito que tem está nas saídas que produz.

52
00:03:29,700 --> 00:03:32,280
‫Então é por isso que estamos escolhendo tornar este projeto puro.

53
00:03:32,280 --> 00:03:36,930
‫Ele elimina a necessidade de um pino de execução, o que o torna muito mais agradável em projetos.

54
00:03:37,290 --> 00:03:43,110
‫E também expressa o fato de que não estamos fazendo nenhuma alteração no estado do nosso jogo quando

55
00:03:43,110 --> 00:03:44,130
‫chamamos essa função.

56
00:03:44,640 --> 00:03:48,630
‫Então vamos em frente e tentar criar uma implementação para isso.

57
00:03:48,630 --> 00:03:54,120
‫Na verdade, eu vou deixar a implementação para vocês como um desafio, e nós

58
00:03:54,120 --> 00:03:59,820
‫vamos ver isso em um gráfico, desculpe, um gráfico de eventos do blueprint de animação.

59
00:04:00,300 --> 00:04:03,780
‫Então, vamos fazer isso com um novo conjunto aqui.

60
00:04:03,780 --> 00:04:12,660
‫Queremos definir a variável booleana is dead no final e queremos obter o dono do peão e queremos conjurá-la porque

61
00:04:12,660 --> 00:04:18,630
‫precisa ser um shooter em um personagem para ter essa propriedade morta.

62
00:04:18,630 --> 00:04:20,160
‫Então queremos lançar também.

63
00:04:20,490 --> 00:04:24,030
‫E neste caso, eu quero lançá-lo para o personagem atirador C++ porque

64
00:04:24,030 --> 00:04:30,120
‫eu não preciso ir até o fim para dizer que é definitivamente uma versão de projeto disso porque essa função você realmente

65
00:04:30,120 --> 00:04:31,410
‫existe no nível C++.

66
00:04:31,800 --> 00:04:33,480
‫Então vamos em frente e lançar.

67
00:04:33,480 --> 00:04:36,690
‫Se formos bem-sucedidos no elenco, estaremos definindo a propriedade is dead.

68
00:04:37,230 --> 00:04:42,360
‫Agora deixe-me colocar alguns nós de redirecionamento aqui para tornar nosso plano um pouco mais

69
00:04:42,750 --> 00:04:43,320
‫bonito.

70
00:04:44,190 --> 00:04:48,750
‫E então o que queremos fazer é usar essa referência de personagem de filmagem, agora

71
00:04:48,750 --> 00:04:54,840
‫que lançamos para um personagem de filmagem, sabemos que deve ter essa propriedade morta, então devemos ser capazes de fazer isso.

72
00:04:55,020 --> 00:04:59,940
‫Depois de compilar e fazer funcionar, você pode obter essa propriedade morta e configurá-la aqui.

73
00:05:00,860 --> 00:05:04,860
‫Então é hora do seu desafio de calcular se estamos mortos ou não.

74
00:05:04,860 --> 00:05:08,190
‫Então retorne o booleano correto da nossa função is dead.

75
00:05:08,190 --> 00:05:08,970
‫Esse é o primeiro passo.

76
00:05:09,240 --> 00:05:15,690
‫Você pode querer usar algumas desigualdades com uma variável de saúde para isso e então conectar nossa variável.

77
00:05:15,690 --> 00:05:17,370
‫O morto é uma variável morta.

78
00:05:17,610 --> 00:05:20,280
‫No projeto de animação, não conseguimos fazer isso.

79
00:05:20,280 --> 00:05:23,250
‫Nós só precisávamos basicamente de uma compilação longe de fazer isso.

80
00:05:23,580 --> 00:05:25,980
‫Pause o vídeo e resolva isso.

81
00:05:27,460 --> 00:05:27,750
‫OK.

82
00:05:27,760 --> 00:05:28,270
‫Bem vindo de volta.

83
00:05:28,300 --> 00:05:31,630
‫Então vamos ao código, antes de tudo.

84
00:05:31,930 --> 00:05:36,550
‫Então, de forma bastante direta, vou retornar uma expressão que retorna um booleano.

85
00:05:36,820 --> 00:05:43,180
‫Então queremos dizer, a saúde é menor ou igual a zero, caso em que estamos de fato mortos?

86
00:05:43,450 --> 00:05:47,470
‫Isso é tão simples quanto uma função de expressão pode ser.

87
00:05:47,830 --> 00:05:49,720
‫Então vamos em frente e construir isso.

88
00:05:50,680 --> 00:05:55,540
‫E uma vez que isso tenha sido compilado, podemos ir até o Unreal e conectá-lo.

89
00:05:55,540 --> 00:06:02,260
‫Então, arrastando o personagem como atirador, somos nós, teremos uma referência de personagem aqui.

90
00:06:02,530 --> 00:06:08,410
‫Então, queremos fazer é morto nos dá esta função morta, você pode ver que não tem pino de execução

91
00:06:08,410 --> 00:06:09,340
‫porque é puro.

92
00:06:09,700 --> 00:06:14,770
‫Então tiramos esse booleano disso e o conectamos à nossa variável is morta.

93
00:06:15,250 --> 00:06:21,280
‫E agora, se continuarmos jogando, devemos ser capazes de matar esse personagem no mundo.

94
00:06:21,280 --> 00:06:23,980
‫Vamos atirar nele até que sua saúde chegue a zero.

95
00:06:24,280 --> 00:06:25,240
‫E aí vai.

96
00:06:25,240 --> 00:06:28,450
‫A animação o matou com sucesso.

