﻿1
00:00:04,420 --> 00:00:05,380
‫Ciao e Benvenuto.

2
00:00:05,380 --> 00:00:10,030
‫In questa lezione, aggiungeremo nuovi componenti all'app player, la maniglia

3
00:00:10,030 --> 00:00:16,030
‫della fisica, e impareremo come ottenere un puntatore ad esso nel nostro componente grabber.

4
00:00:16,030 --> 00:00:20,620
‫Vedremo anche come proteggerci dal crash accidentale del motore.

5
00:00:20,830 --> 00:00:23,140
‫Entriamo e vediamo come.

6
00:00:24,280 --> 00:00:29,170
‫Ora, per afferrare un oggetto, dobbiamo interagire con il sistema fisico.

7
00:00:29,500 --> 00:00:37,030
‫E in realtà c'è un componente che possiamo usare chiamato maniglia fisica, che ci permette di afferrare oggetti fisici e dire loro dove

8
00:00:37,030 --> 00:00:43,030
‫vogliamo essere nel mondo, ma farlo in modo tale da riconoscere i vincoli fisici in modo che non

9
00:00:43,030 --> 00:00:45,530
‫lo faccia t passare attraverso i muri.

10
00:00:46,120 --> 00:00:53,170
‫E sembra che l'oggetto sia su una molla piuttosto che seguire rigidamente un punto specifico in cui gli

11
00:00:53,170 --> 00:00:54,640
‫diciamo di andare.

12
00:00:55,150 --> 00:00:57,850
‫Quindi useremo questi componenti della maniglia della fisica.

13
00:00:57,850 --> 00:01:02,200
‫Andremo ad aggiungerlo al nostro giocatore, BP, insieme al grabber.

14
00:01:02,200 --> 00:01:09,550
‫Quindi andiamo al pulsante Aggiungi sotto il pannello dei componenti e cerchiamo l'handle della fisica e aggiungiamo.

15
00:01:09,910 --> 00:01:14,110
‫E puoi vedere che è una componente dell'attore, non una componente della scena, perché

16
00:01:14,320 --> 00:01:18,220
‫scende nella sezione inferiore, quindi in realtà non ha una trasformazione fisica propria.

17
00:01:18,610 --> 00:01:23,770
‫Quello che facciamo con la maniglia della fisica è dirgli l'oggetto da afferrare e poi gli diciamo dove

18
00:01:23,770 --> 00:01:25,900
‫vogliamo che metta l'oggetto che abbiamo afferrato.

19
00:01:26,230 --> 00:01:31,810
‫Se vai alla documentazione, puoi vederlo nelle funzioni disponibili.

20
00:01:31,990 --> 00:01:39,370
‫Se scorri verso il basso fino alla sezione della funzione, puoi vedere che c'è un componente di rilascio e un componente di

21
00:01:39,370 --> 00:01:41,110
‫cattura nella funzione di posizione.

22
00:01:41,440 --> 00:01:45,910
‫C'è anche una posizione e una rotazione di destinazione impostate.

23
00:01:45,910 --> 00:01:51,100
‫È qui che vuole provare a mettere l'oggetto, ma ovviamente rispetterà qualsiasi vincolo fisico nel

24
00:01:51,100 --> 00:01:56,260
‫farlo e lo farà in modo fluido come se fosse su una molla.

25
00:01:56,500 --> 00:02:02,380
‫Ora, non useremo ancora queste funzioni, ma dobbiamo trovare un modo per entrare in possesso

26
00:02:02,380 --> 00:02:05,230
‫di questo componente nel nostro componente grabber.

27
00:02:05,710 --> 00:02:07,540
‫Allora come lo facciamo?

28
00:02:07,840 --> 00:02:15,260
‫Bene, andiamo a prendere una C. P e dai un'occhiata a un big in gioco e prova a prenderlo.

29
00:02:15,280 --> 00:02:23,740
‫Ora c'è una funzione su qualsiasi attore che ci permette di trovare un componente in base al suo tipo.

30
00:02:24,100 --> 00:02:27,110
‫Ma qual è il tipo di maniglia fisica?

31
00:02:27,130 --> 00:02:34,450
‫Bene, è un componente che gestisce la fisica che è in possesso di questo tipo che dobbiamo usare e includere e puoi vedere che

32
00:02:34,450 --> 00:02:40,090
‫l'inclusione nella documentazione è il componente di gestione della fisica con barra in avanti del motore fisico.

33
00:02:40,090 --> 00:02:46,150
‫Quindi copiamo che andiamo su un CP grabber e additivo in add draw debug helpers.

34
00:02:46,900 --> 00:02:53,260
‫Quindi quello che faremo è fare un get ONA per ottenere il nostro atto

35
00:02:53,680 --> 00:03:00,070
‫di possesso, un puntatore quindi a una freccia e un fantastico componente di ricerca per classe.

36
00:03:00,400 --> 00:03:07,510
‫Ora questa funzione è un tipo speciale di funzione chiamata funzione modello in C++, e

37
00:03:07,510 --> 00:03:14,230
‫questo significa che puoi passarle alcuni parametri che vengono effettivamente valutati durante la compilazione.

38
00:03:14,470 --> 00:03:18,790
‫E il modo in cui lo fai è usare parentesi angolari come questa.

39
00:03:19,240 --> 00:03:25,270
‫Quindi usi una parentesi angolare dopo la funzione e gli dai il tipo che vuoi che trovi,

40
00:03:25,270 --> 00:03:30,640
‫che nel nostro caso è il componente che gestisci la tua fisica in questo modo.

41
00:03:31,090 --> 00:03:33,220
‫E poi chiudi le parentesi angolari.

42
00:03:33,220 --> 00:03:37,630
‫Ma poiché è una funzione, devi chiamarla anche usando parentesi regolari.

43
00:03:37,630 --> 00:03:41,680
‫Quindi metti la seconda serie di parentesi dopo questo.

44
00:03:41,680 --> 00:03:48,580
‫Quindi puoi vedere che questi argomenti in fase di compilazione vengono passati usando le parentesi angolari e quindi

45
00:03:48,580 --> 00:03:52,090
‫quelli di runtime vengono passati usando le parentesi.

46
00:03:52,690 --> 00:03:58,840
‫Ora, come una normale funzione, questa avrà un valore di ritorno e in questo caso il valore di ritorno sarà qualunque

47
00:03:58,840 --> 00:04:01,270
‫sia il tipo che abbiamo passato qui.

48
00:04:01,420 --> 00:04:08,650
‫Ma come puntatore, quindi possiamo prendere un puntatore del componente dell'handle della fisica e creare una variabile

49
00:04:08,650 --> 00:04:16,150
‫per quello che chiameremo handle della fisica e impostarlo uguale a questo get owner trova componente per classe.

50
00:04:16,510 --> 00:04:21,850
‫Ora ricordiamo un punto e virgola alla fine di questa riga ed è tutto ciò che serve per

51
00:04:21,850 --> 00:04:25,930
‫poter entrare in possesso di un altro componente sul nostro stesso attore.

52
00:04:26,170 --> 00:04:32,680
‫Ora ricorda che ti ho detto che i puntatori possono essere pericolosi perché a volte possono essere un null e questo

53
00:04:32,680 --> 00:04:34,510
‫può portare a un crash.

54
00:04:34,840 --> 00:04:42,040
‫Quindi immagina di aver dimenticato di mettere un componente di maniglia fisica sul nostro attore, o abbiamo messo un grabber su un nuovo

55
00:04:42,040 --> 00:04:46,000
‫attore e non l'abbiamo ancora collegato con un componente di maniglia fisica.

56
00:04:46,180 --> 00:04:52,360
‫Se questo è il caso, il puntatore dell'handle della fisica sarà un puntatore nullo.

57
00:04:52,540 --> 00:04:58,540
‫E se proviamo a usare l'operatore freccia o l'operatore di riferimento su quel puntatore, il nostro motore andrà

58
00:04:58,540 --> 00:04:59,530
‫in crash.

59
00:04:59,530 --> 00:05:03,070
‫E a volte può essere davvero difficile vedere che aspetto abbia quell'incidente.

60
00:05:03,490 --> 00:05:09,940
‫Quindi andrò avanti e causerò effettivamente questo arresto anomalo solo per mostrarti e potresti essere in grado

61
00:05:09,940 --> 00:05:15,640
‫di riconoscerlo se ti dovesse succedere in futuro, riassegnarò il nostro puntatore dell'handle della fisica

62
00:05:15,640 --> 00:05:17,740
‫uguale al puntatore nullo .

63
00:05:18,970 --> 00:05:20,230
‫Parola chiave speciale.

64
00:05:20,290 --> 00:05:20,680
‫È tutto.

65
00:05:21,100 --> 00:05:22,360
‫No, Pietro.

66
00:05:22,420 --> 00:05:24,520
‫È così che hai scritto il puntatore NULL in C++.

67
00:05:24,520 --> 00:05:25,780
‫Quindi metti un punto e virgola alla fine.

68
00:05:26,140 --> 00:05:32,170
‫E poi quello che possiamo fare è fare fisica, gestire la freccia, ottenere un nome in questo modo.

69
00:05:32,710 --> 00:05:38,140
‫E se andiamo avanti e compiliamo usando la codifica live e quando la compilazione sarà terminata, andremo avanti e

70
00:05:38,140 --> 00:05:43,960
‫ci assicureremo, prima di tutto, di salvare tutto ciò che abbiamo qui in corso in IBP plex e che sta per

71
00:05:43,960 --> 00:05:45,520
‫andare in crash il motore.

72
00:05:45,880 --> 00:05:50,080
‫E se vado avanti e premo play, questo è il risultato che otteniamo un crash.

73
00:05:50,080 --> 00:05:55,360
‫Reporter E potresti essere tentato di pensare quando vedi questo che qualcosa è andato storto con l'irreale, ma in

74
00:05:55,360 --> 00:05:58,210
‫realtà è il tuo codice che è in errore qui.

75
00:05:58,540 --> 00:06:06,190
‫Puoi vedere che in questo rapporto sull'arresto anomalo, la prima riga dice che il problema deriva dal fatto che prendi i due punti, i

76
00:06:06,220 --> 00:06:08,170
‫due punti, inizia a giocare.

77
00:06:08,170 --> 00:06:11,440
‫E in realtà ci sta dando anche il numero di riga, che è la riga 28.

78
00:06:11,890 --> 00:06:18,370
‫Quindi puoi vedere che a questo punto sulla riga 28, quando facciamo riferimento a quel puntatore, per

79
00:06:18,370 --> 00:06:26,020
‫chiamare una funzione su di esso, abbiamo effettivamente commesso un grave errore nel non controllare prima se quel puntatore era

80
00:06:26,020 --> 00:06:26,560
‫nullo.

81
00:06:27,010 --> 00:06:28,300
‫Quindi è quello che dobbiamo fare.

82
00:06:28,300 --> 00:06:29,650
‫E lo facciamo con un'istruzione if.

83
00:06:29,650 --> 00:06:41,350
‫Fondamentalmente diciamo che se l'handle della fisica non è uguale al puntatore nullo, allora possiamo andare avanti e chiamare roba su quell'handle della fisica in modo da poter inserire l'handle della fisica,

84
00:06:41,350 --> 00:06:47,080
‫ottenere il nome all'interno di questa istruzione if e questo ci protegge perché quel codice, che

85
00:06:47,080 --> 00:06:52,270
‫il il codice di riferimento non verrà eseguito nel caso in cui abbiamo un

86
00:06:52,270 --> 00:06:53,200
‫puntatore nullo.

87
00:06:53,470 --> 00:06:58,780
‫Quindi andrò avanti e rimuoverò la riga 27 ora in cui lo stiamo impostando su un puntatore no

88
00:06:58,780 --> 00:07:02,410
‫e ti sfiderò a stampare il nome del componente per te stesso.

89
00:07:02,860 --> 00:07:10,900
‫Quindi stampa solo se abbiamo il componente effettivo, in pratica non abbiamo un puntatore nullo e usiamo un altro per avvisare se non siamo riusciti

90
00:07:10,900 --> 00:07:16,990
‫a entrare in possesso di quel componente e provare a rimuovere il componente per controllare, mettere in pausa il

91
00:07:17,290 --> 00:07:18,940
‫video e avere fa.

92
00:07:22,230 --> 00:07:22,710
‫Bene.

93
00:07:22,710 --> 00:07:23,550
‫Ben tornato.

94
00:07:23,640 --> 00:07:33,360
‫Quindi creeremo un nuovo messaggio di registro qui e diremo che abbiamo un handle di fisica, due punti percentuali se

95
00:07:33,660 --> 00:07:37,110
‫abbiamo questo nome di handle di fisica.

96
00:07:37,140 --> 00:07:42,990
‫Quindi mi limiterò a tagliare e incollare come secondo argomento o quarto argomento nel registro U.

97
00:07:43,470 --> 00:07:46,770
‫E metterò una stella perché è un filo.

98
00:07:47,010 --> 00:07:49,980
‫Ora aggiungiamo un'istruzione alt sotto le nostre istruzioni if.

99
00:07:50,310 --> 00:07:55,470
‫E qui inseriremo un altro registro annuale, che sarà questa volta

100
00:07:55,470 --> 00:08:02,040
‫invece di un display, inseriremo un messaggio di avviso che apparirà in giallo e

101
00:08:02,700 --> 00:08:07,200
‫diremo di no maniglia fisica trovata, punto esclamativo.

102
00:08:07,410 --> 00:08:08,880
‫Ora, non hai l'editor aperto.

103
00:08:08,880 --> 00:08:14,760
‫Quindi eseguirò un turno di controllo B per compilare all'interno del codice di Visual Studio, chiudere il terminale

104
00:08:14,760 --> 00:08:17,700
‫quando ha esito positivo e riavviare dal nuovo progetto.

105
00:08:17,760 --> 00:08:24,930
‫Una volta avviato, andiamo avanti e premiamo play, apriamo il registro di output e dovremmo vedere il messaggio di

106
00:08:24,930 --> 00:08:25,330
‫registro.

107
00:08:25,330 --> 00:08:26,970
‫A ha un manico di fisica.

108
00:08:26,970 --> 00:08:29,550
‫Quale nome il nome è familiare alla fisica.

109
00:08:30,060 --> 00:08:39,450
‫E se dovessimo passare al nostro riproduttore di segnali acustici e rimuovere effettivamente l'eliminazione di quella maniglia fisica e andare

110
00:08:39,450 --> 00:08:41,070
‫avanti e giocare.

111
00:08:41,070 --> 00:08:47,880
‫Ora dai un'occhiata al nostro registro di output e se ne vanno, abbiamo un avviso giallo che non è stata trovata alcuna

112
00:08:47,970 --> 00:08:48,720
‫maniglia fisica.

113
00:08:48,840 --> 00:08:49,800
‫Quindi smettiamo di giocare.

114
00:08:50,070 --> 00:08:55,800
‫Andiamo avanti e aggiungiamo di nuovo l'handle della fisica perché lo vorremo e salveremo il giocatore.

115
00:08:55,800 --> 00:08:57,030
‫BP Grandi cose.

116
00:08:57,030 --> 00:09:03,540
‫Quindi abbiamo capito come possiamo ottenere altri componenti dall'interno di un componente e abbiamo imparato come

117
00:09:03,540 --> 00:09:05,220
‫gestire un null.

118
00:09:05,220 --> 00:09:08,520
‫Un punto è e perché dobbiamo stare attenti.

119
00:09:08,820 --> 00:09:10,230
‫Ci vediamo alla prossima lezione.

