﻿1
00:00:04,370 --> 00:00:05,390
‫Ciao e Benvenuto.

2
00:00:05,390 --> 00:00:12,170
‫In questa lezione, imposteremo il collegamento tra il motore e il grilletto usando una tecnica chiamata iniezione di dipendenza

3
00:00:12,170 --> 00:00:18,230
‫in modo che entro la fine della lezione, se inseriamo il gargoyle, la porta si abbassi,

4
00:00:18,230 --> 00:00:20,810
‫o almeno in parte lo fa.

5
00:00:20,810 --> 00:00:24,260
‫Immergiamoci e vediamo come funziona.

6
00:00:25,080 --> 00:00:26,460
‫E prendo una tazza.

7
00:00:26,490 --> 00:00:33,030
‫Abbiamo visto che c'è una dipendenza, quella che chiamiamo una dipendenza per l'handle della fisica.

8
00:00:33,030 --> 00:00:40,350
‫Questo grabber non può fare il suo lavoro a meno che tu non abbia un componente di gestione fisica da qualche parte in giro, ora succede

9
00:00:40,350 --> 00:00:42,960
‫solo che il componente trigger è lo stesso.

10
00:00:42,960 --> 00:00:50,100
‫Il componente trigger, per svolgere correttamente il proprio lavoro, deve avere accesso a un componente mover.

11
00:00:50,460 --> 00:00:57,360
‫Tuttavia, in questo caso è un po' più complicato perché sicuramente, nel caso della nostra porta segreta,

12
00:00:57,360 --> 00:01:02,400
‫il grilletto e l'oggetto in movimento sono all'interno dello stesso attore.

13
00:01:02,730 --> 00:01:08,220
‫Quindi potresti ottenere un oggetto trovando il componente di tipo sull'attore.

14
00:01:08,220 --> 00:01:14,490
‫Ma cosa succederebbe se e avremmo questa situazione nella mia sceneggiatura in cui voglio che il mio grilletto sia

15
00:01:14,490 --> 00:01:20,760
‫in una parte diversa della stanza rispetto all'attore che si sta muovendo bene per consentire quel tipo di flessibilità.

16
00:01:20,760 --> 00:01:26,940
‫Vogliamo che il trigger non debba andare a trovare le proprie dipendenze.

17
00:01:26,940 --> 00:01:30,330
‫E in realtà c'è un nome per questo tipo di concetto di programma.

18
00:01:30,330 --> 00:01:32,640
‫Si chiama iniezione di dipendenza.

19
00:01:32,640 --> 00:01:37,680
‫Fondamentalmente, è nel caso in cui abbiamo qualcosa che dice, ho bisogno di un altro oggetto, ma non riesco a

20
00:01:37,680 --> 00:01:40,230
‫trovarlo da solo o non voglio trovarlo da solo.

21
00:01:40,290 --> 00:01:47,940
‫E spesso è sensato non lasciare che l'oggetto stia facendo il suo lavoro, facendogli avere un altro compito nel cercare

22
00:01:47,940 --> 00:01:50,850
‫di entrare in possesso di un oggetto.

23
00:01:51,300 --> 00:02:00,810
‫Quindi il modo in cui possiamo farlo è creare un meccanismo per i progetti per dire al componente del trigger

24
00:02:00,810 --> 00:02:02,730
‫dove trovare un motore.

25
00:02:02,910 --> 00:02:09,330
‫E il modo in cui lo faremo è creare una funzione richiamabile blueprint sul nostro componente trigger.

26
00:02:09,810 --> 00:02:11,220
‫Quindi sarà pubblico.

27
00:02:11,220 --> 00:02:16,980
‫Lo metteremo nella sezione pubblica sotto il componente tick e sarà una funzione

28
00:02:16,980 --> 00:02:22,710
‫U in modo che possa essere quindi tra parentesi, blueprint richiamabile.

29
00:02:23,280 --> 00:02:26,130
‫E non è necessario che ci sia molto in questa funzione.

30
00:02:26,130 --> 00:02:33,330
‫Sarà nullo perché non è necessario che restituisca nulla, ma verrà impostato come motore, quindi

31
00:02:33,330 --> 00:02:40,860
‫imposterà un collegamento al motore e affinché possa impostare un collegamento al motore, deve prendere un

32
00:02:40,860 --> 00:02:43,620
‫puntatore a un componente motore.

33
00:02:43,620 --> 00:02:51,540
‫Quindi quella sarai la tua stella motore e possiamo semplicemente chiamarlo il motore in questo modo e mettere punto e virgola alla fine di

34
00:02:51,540 --> 00:02:52,440
‫quella riga.

35
00:02:52,830 --> 00:02:55,350
‫E dobbiamo conservarlo da qualche parte.

36
00:02:55,350 --> 00:02:57,300
‫Quindi creeremo una nuova variabile privata.

37
00:02:57,300 --> 00:03:02,280
‫Non sarà una nuova proprietà e sarà solo un puntatore di spostamento a

38
00:03:02,280 --> 00:03:04,530
‫U, che chiameremo anche mover.

39
00:03:04,560 --> 00:03:12,900
‫Così e quello che faremo è implementare questo set mover nel CPP in modo che imposti a questa mossa un puntatore,

40
00:03:12,900 --> 00:03:15,660
‫che per impostazione predefinita sarà nullo.

41
00:03:16,050 --> 00:03:17,790
‫E dobbiamo fare un'altra cosa.

42
00:03:17,790 --> 00:03:20,640
‫Dobbiamo includere il file di intestazione per il nostro motore.

43
00:03:21,150 --> 00:03:26,370
‫Ora, in questo caso, poiché il file di intestazione si trova nella stessa

44
00:03:26,370 --> 00:03:36,870
‫cartella del componente trigger, tutto ciò che dobbiamo fare è includere hash include mover H e questo assicurerà che il componente trigger sia a conoscenza del tipo

45
00:03:36,870 --> 00:03:38,100
‫di mover.

46
00:03:38,280 --> 00:03:40,230
‫Quindi esaminiamo il nostro componente trigger.

47
00:03:40,230 --> 00:03:46,530
‫CP E lo metterò sotto il nostro componente tick che implementeremo set mover.

48
00:03:46,530 --> 00:03:52,500
‫Metteremo prima la classe che attivi il componente e la indentiamo.

49
00:03:53,400 --> 00:03:55,590
‫Elimina il punto e virgola e aggiungi le parentesi graffe.

50
00:03:55,590 --> 00:04:00,150
‫E in sostanza tutto ciò che dovremo fare qui, cambiamo il nome solo nel file C++.

51
00:04:00,150 --> 00:04:06,060
‫In realtà non importa se il nome dei parametri corrisponde tra header e C++.

52
00:04:06,060 --> 00:04:12,540
‫Quindi possiamo cambiarlo qui e dire che il nuovo motore è ciò che sta arrivando per impostare il motore.

53
00:04:12,630 --> 00:04:20,010
‫E così possiamo impostare la nostra variabile locale, la nostra variabile di classe mover uguale al nuovo mover like.

54
00:04:20,010 --> 00:04:27,030
‫Quindi ora è piuttosto importante non saltare questo passaggio di ridenominazione perché se il parametro di input

55
00:04:27,030 --> 00:04:34,170
‫ha lo stesso nome di una delle variabili sulla classe, unreal per impostazione predefinita imposterà che sia un errore.

56
00:04:34,170 --> 00:04:39,720
‫Si chiama shadowing e Unreal non vuole che tu lo faccia, quindi devi assicurarti di avere il nome

57
00:04:39,720 --> 00:04:44,970
‫del tuo parametro diverso dalla variabile ora perché queste nuove funzioni non vengono sempre visualizzate con le

58
00:04:44,970 --> 00:04:46,260
‫modifiche al codice live.

59
00:04:46,260 --> 00:04:52,290
‫Ho intenzione di chiudere la ricompilazione dell'editor dal codice di Visual Studio e quindi di riavviare dal nuovo

60
00:04:52,290 --> 00:04:52,920
‫progetto.

61
00:04:52,950 --> 00:04:58,950
‫Ora andiamo nel cassetto dei contenuti, apriamo il nostro progetto del muro segreto e

62
00:04:58,950 --> 00:05:06,080
‫poi dal nostro nodo Begin Play nel grafico degli eventi, scendiamo da qui e cerchiamo il set mover.

63
00:05:06,090 --> 00:05:08,190
‫Ora nota che ci sono due opzioni qui.

64
00:05:08,190 --> 00:05:15,210
‫Uno, sarebbe impostare il componente che è anche chiamato motore e uno è una funzione sul componente

65
00:05:15,210 --> 00:05:15,750
‫trigger.

66
00:05:15,750 --> 00:05:18,840
‫Quindi vogliamo selezionare quella che è una funzione sul componente trigger.

67
00:05:19,050 --> 00:05:27,120
‫E poi quello che vogliamo fare è trascinare il nostro componente motore come gli altri argomenti di questa funzione e questo dovrebbe fare

68
00:05:27,120 --> 00:05:28,110
‫il trucco.

69
00:05:28,110 --> 00:05:31,350
‫È impostato il motore all'inizio del gioco.

70
00:05:31,350 --> 00:05:37,800
‫Quindi ora essenzialmente quello che vogliamo che accada è che il nostro componente trigger dovrebbe essere impostato

71
00:05:37,800 --> 00:05:41,400
‫e impostare il valore booleano dovrebbe spostarsi qui.

72
00:05:41,400 --> 00:05:46,110
‫Quindi questa sarà la mia sfida per te creare alcune funzioni pubbliche in mover e mover.

73
00:05:46,110 --> 00:05:51,780
‫CP Dovrebbe essere impostato, dovrebbe spostarsi e dovrebbe aggiornare la tua variabile di proprietà.

74
00:05:51,780 --> 00:05:56,970
‫In effetti, puoi renderla non più una nuova proprietà perché di tanto in tanto la

75
00:05:56,970 --> 00:05:59,760
‫imposteremo tramite codice, puoi inserirla nella sezione pubblica.

76
00:05:59,760 --> 00:06:04,740
‫Deve essere pubblico perché proveremo ad accedervi dal nostro componente trigger.

77
00:06:04,740 --> 00:06:11,850
‫E puoi chiamarlo sul puntatore del motore che abbiamo nel componente trigger dall'impostazione del componente tick, il booleano

78
00:06:11,850 --> 00:06:17,970
‫appropriato, se vogliamo che si sblocchi o si blocchi di nuovo, metti in pausa il video

79
00:06:17,970 --> 00:06:18,960
‫e prova.

80
00:06:22,250 --> 00:06:23,690
‫Va bene, bentornato.

81
00:06:23,690 --> 00:06:29,410
‫Quindi rimuoverò la proprietà da dovrebbe spostare Andrò alla

82
00:06:29,420 --> 00:06:39,800
‫sezione pubblica appena sotto il componente TTIC e creerò un set vuoto dovrebbe spostarsi prendendo un booleano

83
00:06:39,800 --> 00:06:43,010
‫che chiameremo dovrebbe muoviti così.

84
00:06:43,280 --> 00:06:51,560
‫E poi prendiamo questo e andiamo al move CP e lo implementiamo, sostituendo il punto e virgola,

85
00:06:51,560 --> 00:07:00,920
‫aggiungendo nella classe you move due punti, due punti e quindi praticamente di nuovo possiamo chiamarlo il nuovo dovrebbe

86
00:07:00,920 --> 00:07:08,030
‫muoversi e possiamo dire che dovrebbe muoversi è uguale a nuovo dovrebbe muoversi.

87
00:07:08,030 --> 00:07:12,860
‫Ora ti starai chiedendo, perché non rendiamo le variabili stesse pubblicamente accessibili in modo

88
00:07:12,860 --> 00:07:14,660
‫da poterle impostare direttamente?

89
00:07:14,780 --> 00:07:22,520
‫In genere non è una buona pratica in C++ perché se permetti a qualcuno di cambiare le tue variabili, non

90
00:07:22,520 --> 00:07:24,620
‫sai mai cosa potrebbe succedergli.

91
00:07:24,620 --> 00:07:32,090
‫Considerando che se hai un metodo lì per farlo per te, ti consente in seguito di modificare il modo in cui strutturi le

92
00:07:32,090 --> 00:07:38,240
‫variabili interne senza dover modificare le tue funzioni pubbliche, il che significa che ci sono meno aggiornamenti alle diverse

93
00:07:38,240 --> 00:07:39,920
‫classi che devi fare.

94
00:07:39,920 --> 00:07:46,070
‫Quindi generalmente, di regola, utilizziamo sempre setter e getter se dobbiamo accedere a variabili in altre

95
00:07:46,070 --> 00:07:46,850
‫classi.

96
00:07:46,850 --> 00:07:52,100
‫Quindi ora che abbiamo creato quella nuova funzione, andiamo nel componente trig CP dove abbiamo attualmente i

97
00:07:52,100 --> 00:07:53,570
‫nostri messaggi di registro.

98
00:07:53,570 --> 00:08:01,670
‫Quello che vogliamo fare è accedere al nostro puntatore del motore, quindi faremo in modo che il set di frecce del motore si muova.

99
00:08:01,670 --> 00:08:06,140
‫E nel caso in cui abbiamo un attore accettabile, dovrebbe essere vero.

100
00:08:06,140 --> 00:08:08,600
‫Dovremmo spostare il punto e virgola alla fine della riga.

101
00:08:08,690 --> 00:08:12,200
‫E nell'altro caso, beh, allora probabilmente non dovremmo.

102
00:08:12,200 --> 00:08:20,510
‫Quindi sposteremo il set di frecce dovrebbe spostarsi e tra parentesi mettere false rimuovere quella R extra che avevo alla fine

103
00:08:20,510 --> 00:08:26,780
‫del mio metodo e ricompilare ora in questo caso perché ho solo aggiunto questa funzione in

104
00:08:26,780 --> 00:08:30,020
‫C++ land e non è un progetto richiamabile.

105
00:08:30,020 --> 00:08:34,940
‫Non credo di aver bisogno di riavviare l'editor per far funzionare questa funzionalità, chiudere il nostro

106
00:08:34,940 --> 00:08:39,530
‫registro di output, andare verso il nostro gargoyle e iniziare a giocare e prenderlo.

107
00:08:39,770 --> 00:08:49,400
‫Usciamo da questa gabbia e mettiamola nell'alcova e loro vanno, Si sta abbassando, ma si ferma non appena il gargoyle cade, il

108
00:08:49,400 --> 00:08:56,600
‫che non è l'ideale perché il gargoyle non è davvero tenuto in posizione e il muro

109
00:08:56,600 --> 00:08:59,060
‫non lo è completamente giù.

110
00:08:59,150 --> 00:09:03,020
‫E poiché sta simulando la fisica, uscirà da quell'alcova, vero?

111
00:09:03,020 --> 00:09:10,580
‫Quindi quello che dobbiamo fare è assicurarci che una volta che lo lasciamo cadere nella nostra area di trigger, venga riparato

112
00:09:10,580 --> 00:09:11,780
‫lì e rimanga.

113
00:09:11,780 --> 00:09:14,210
‫Quindi questo sarà l'argomento della prossima conferenza.

114
00:09:14,210 --> 00:09:15,200
‫Ci vediamo lì.

