1
00:00:03,150 --> 00:00:08,190
Vamos a empezar a escribir código para nuestro first person carácter control.

2
00:00:08,190 --> 00:00:13,670
Lo primero que vamos a hacer es en la carpeta del proyecto vamos a crear una nueva carpeta.

3
00:00:14,920 --> 00:00:20,050
La vamos a llamar Scrubs Y aquí es donde vamos a colocar todos nuestros escritos de Cillán.

4
00:00:20,680 --> 00:00:27,700
Haz clic derecho en la carpeta de scripts y crea un nuevo presilla up y llamalo Player antes de comenzar

5
00:00:27,700 --> 00:00:32,470
vamos a seleccionar a nuestro Player y le vamos a agregar un componente de carácter control.

6
00:00:32,560 --> 00:00:39,300
Vamos a buscarlo lo añadimos y también hay que quitar el componente Capsule el kleiber.

7
00:00:39,460 --> 00:00:44,630
La razón por la cual quitamos este cola es porque cuando agregamos un carácter Controller ya tiene uno

8
00:00:44,680 --> 00:00:51,340
incluido el componente carácter controles tiene algunas propiedades como por ejemplo milmo Distantes

9
00:00:51,790 --> 00:00:58,040
podemos especificar un radio para decirle qué tan ancho va a ser nuestro jugador podríamos ajustar esto

10
00:00:58,150 --> 00:01:02,920
al modelo que vayamos a usar para nuestro jugador aunque en nuestro caso como primera persona nos va

11
00:01:02,920 --> 00:01:06,910
a importar realmente y en general puedes dejar todos estos como te Faubel.

12
00:01:06,910 --> 00:01:10,070
No nos vamos a involucrar ahorita con estos parámetros.

13
00:01:10,150 --> 00:01:15,290
Ok ahora vamos a abrir nuestro scrip pero antes hay que agregarlo al objeto de jugador.

14
00:01:15,450 --> 00:01:20,260
Ahora que el objeto Player tiene el componente play2 es puro scrip vamos a abrirlo haciendo doble clic

15
00:01:20,640 --> 00:01:25,750
y lo primero que vamos a hacer es obtener una referencia a nuestro carácter controlar desde aquí dentro

16
00:01:25,750 --> 00:01:31,480
del escrito recuerdan que para eso lo que usamos es Get Component jet componés nos permite obtener un

17
00:01:31,480 --> 00:01:37,650
componente y almacenarlo en una variable para que podamos tener acceso a sus propiedades después entonces

18
00:01:37,750 --> 00:01:42,540
dentro de nuestras vamos se creará una variable privada que va a guardar nuestro carácter controlar

19
00:01:43,020 --> 00:01:53,000
entonces escribimos iveth Carácter controller y lo voy a llamar control y Control Z sin querer.

20
00:01:53,360 --> 00:02:00,520
Luego simplemente tenemos que decir contrôle es igual a Component carácter control y esto funciona porque

21
00:02:01,030 --> 00:02:04,700
este es el carácter controlar están en el mismo objeto.

22
00:02:04,950 --> 00:02:11,270
Entonces ahora tenemos acceso a nuestro carácter controlar y más específicamente a nuestro método.

23
00:02:11,850 --> 00:02:17,890
Si yo escribo control del punto hemos estado a permitir mover a nuestro jugador y como puedes ver aquí

24
00:02:17,980 --> 00:02:23,870
te pide un vector 3 que se llama moyen que lo que va a indicar es nuestra dirección de movimiento.

25
00:02:23,890 --> 00:02:26,980
Recuerda que el vector 3 es una variable de tipo de posición.

26
00:02:27,120 --> 00:02:31,330
Si nos estamos moviendo a la izquierda a la derecha o al frente o atrás lo que estamos haciendo es cambiar

27
00:02:31,330 --> 00:02:32,370
nuestra posición.

28
00:02:32,380 --> 00:02:35,020
Es por eso que necesitamos pasar a un vector 3.

29
00:02:35,270 --> 00:02:38,180
Ahora hay que decir cómo vamos a utilizar nuestro método.

30
00:02:38,260 --> 00:02:39,760
Cuáles son los primeros pasos.

31
00:02:40,000 --> 00:02:45,870
Estamos creando movimiento para nuestro jugador que va a ser basado en nuestro carácter control.

32
00:02:46,150 --> 00:02:50,330
Entonces lo primero que vamos a hacer es especificar la dirección en la que el jugador se va a mover.

33
00:02:50,410 --> 00:02:55,180
Entonces voy a crear una variable que va a contener la dirección de dónde quiero mover el jugador y

34
00:02:55,250 --> 00:02:56,960
establecer un nuevo vector 3.

35
00:02:57,100 --> 00:03:02,710
Y recuerde que este es un juego 3D entonces vamos a ser nuestro eje X para movernos de izquierda a derecha

36
00:03:02,800 --> 00:03:06,910
y vamos a ser nuestro eje Z para movernos hacia adelante y hacia atrás.

37
00:03:06,940 --> 00:03:08,830
No nos vamos a mover sobre nuestro eje.

38
00:03:08,860 --> 00:03:13,530
Porque ese va a ser el eje de nuestra gravedad es decir el que nos va a mover hacia arriba o hacia abajo.

39
00:03:13,660 --> 00:03:18,620
Entonces esta es nuestra variable de dirección y tiene que estar basada en el input del jugador.

40
00:03:18,910 --> 00:03:23,380
Entonces cómo hago para saber si me estoy moviendo a la izquierda o a la derecha o similar a nuestro

41
00:03:23,380 --> 00:03:23,880
primer juego.

42
00:03:23,890 --> 00:03:27,670
Podemos utilizar el manager entonces para nuestro eje x.

43
00:03:27,670 --> 00:03:36,040
Vamos a decir y punto que Axis vamos a horizontal luego para allá voy a poner un cero y para z voy a

44
00:03:36,040 --> 00:03:39,920
pedir imput punto que Axis vertical.

45
00:03:40,030 --> 00:03:44,560
Por qué no permitir usar mis flechitas hacia arriba y hacia abajo.

46
00:03:45,190 --> 00:03:46,010
Que hacemos ahora.

47
00:03:46,030 --> 00:03:50,440
Ya tenemos nuestro vector de dirección y nos dice a dónde nos vamos a mover.

48
00:03:50,440 --> 00:03:53,490
Ahora hay que aplicar esa dirección a nuestro carácter controlado.

49
00:03:53,650 --> 00:03:58,810
Para eso simplemente escribo controlé punto móvil y le paso mi dirección.

50
00:03:58,810 --> 00:04:03,850
Esta variable de dirección va a estar basada en el input del usuario así que si yo presiono por ejemplo

51
00:04:03,850 --> 00:04:08,910
la flecha a la izquierda el vector de movimiento va a ser menos 1 0 0.

52
00:04:09,010 --> 00:04:12,110
Si presionar la tecla hacia arriba va a ser 0 0 1.

53
00:04:12,280 --> 00:04:13,420
Vamos a salvar esto.

54
00:04:13,450 --> 00:04:16,340
Voy a regresar a Unity y voy a correr el juego.

55
00:04:16,720 --> 00:04:23,680
Parece que tengo un error y a ver si tengo un paréntesis de más que es algo ésto.

56
00:04:23,700 --> 00:04:28,760
Regreso al Unity espera que termine de compilar y corre tu juego.

57
00:04:28,940 --> 00:04:35,350
Y cuando yo presioné mis teclas deberían poder moverme pero tengo un error aquí que dice que el eje

58
00:04:35,380 --> 00:04:40,340
horizontal no está configurado tengo ese error porque escribí mal horizontal.

59
00:04:40,480 --> 00:04:46,280
El nombre que ponemos aquí tiene que coincidir con el que está dentro de Mario si no recuerdo es como

60
00:04:46,290 --> 00:04:53,640
obtener un nombre puedo decir a EDIT Luego proyectiles y luego imput y aquí en la lista de los ejes

61
00:04:54,160 --> 00:05:01,160
vemos que está horizontal y vertical y están mapeados a los botones de las flechas y a doble CD.

62
00:05:01,290 --> 00:05:07,380
Entonces aquí voy a describir de nuevo horizontal Unity y voy a dejar que compile.

63
00:05:08,800 --> 00:05:11,580
Y cuando termine podemos correr nuestro juego.

64
00:05:13,450 --> 00:05:18,980
Y ahora puedes ver aquí que ya puedo moverme hacia donde quiera pero si te diste cuenta nos estamos

65
00:05:18,980 --> 00:05:20,630
moviendo súper rápido.

66
00:05:20,630 --> 00:05:22,130
Sabes cuál es la razón.

67
00:05:22,400 --> 00:05:25,430
No hemos implementado nuestro uso del Delta.

68
00:05:25,800 --> 00:05:30,140
Entonces simplemente tenemos que ir y añadirlo a nuestra variable de dirección.

69
00:05:30,140 --> 00:05:34,790
Entonces multiplicado por seis puntos del total de chavales Creep regresa a ti.

70
00:05:35,030 --> 00:05:40,310
Deja que compile y corra el juego de nuevo y te vas a dar cuenta que ahora nos estamos moviendo mucho

71
00:05:40,310 --> 00:05:45,070
más despacio y bueno te vas a dar cuenta que nuestros controles están mapeados al revés.

72
00:05:45,320 --> 00:05:48,730
Y bueno vamos a ver cómo solucionar eso en un vídeo posterior.

73
00:05:48,740 --> 00:05:54,580
Por ahora puedes ignorarlo hasta el momento nuestro jugador se está moviendo a un metro por segundo.

74
00:05:54,740 --> 00:05:59,330
Entonces lo que vamos a hacer es crear una variable de velocidad para nuestro jugador y por cierto la

75
00:05:59,330 --> 00:06:06,680
razón por la cual estamos moviéndonos al revés es que nuestra cámara está invertida en 180 grados cuando

76
00:06:06,680 --> 00:06:09,800
lleguemos al punto de crear nuestra cámara en primera persona para nuestro jugador.

77
00:06:09,800 --> 00:06:14,840
Esto se va a arreglar pero por ahora no te preocupes por eso enfócate en que nuestro carácter control

78
00:06:14,890 --> 00:06:16,980
se pueda mover al momento.

79
00:06:17,030 --> 00:06:21,640
Con tan solo dos líneas de código hemos creado un carácter controles que vamos a usar para este juego.

80
00:06:21,640 --> 00:06:26,530
Ahora si lo que vamos a hacer es modificar esto agregando una variable de velocidad.

81
00:06:26,690 --> 00:06:32,630
Vamos a hacer que el jugador se mueva a 3.5 metros por segundo habrá abre y vamos a crear una variable

82
00:06:32,630 --> 00:06:33,490
de velocidad.

83
00:06:33,560 --> 00:06:41,200
Vamos a escribir Flood voy a llamar Pit y lo voy a iniciar en 3.5 EFI.

84
00:06:41,510 --> 00:06:45,190
Ahora si queremos modificarla desde el inspector tenemos que agregar el atributo.

85
00:06:45,240 --> 00:06:51,990
Si salvamos esto y cómo lo aplicamos podríamos simplemente aplicarlo a nuestro método.

86
00:06:52,220 --> 00:06:55,880
Pero lo que vamos a hacer es mantenerlo consistente con lo que estamos haciendo porque estamos haciendo

87
00:06:55,880 --> 00:07:01,850
un carácter contrôle tenemos nuestra dirección y tenemos nuestro movimiento y queremos obtener un valor

88
00:07:01,880 --> 00:07:04,290
que sea básicamente velocidad con dirección.

89
00:07:04,490 --> 00:07:10,670
Entonces lo que vamos a hacer es crear un nuevo vector 3 y lo voy a llamar Velocity y le voy a asignar

90
00:07:10,670 --> 00:07:15,830
la fórmula que necesito que es básicamente la dirección que es lo que obtenemos desde el input del usuario

91
00:07:16,100 --> 00:07:18,240
multiplicada por Pi.

92
00:07:18,510 --> 00:07:23,860
Y antes de ir a junichi tenemos que cambiar la función Move porque ya no lo vamos a pasar la dirección

93
00:07:23,870 --> 00:07:29,190
lo vamos a pasar Velocity que es básicamente la combinación de la dirección con velocidad.

94
00:07:29,240 --> 00:07:35,770
Ahora si vamos a salvar el scrip vamos a ir y Unity vamos a dejar que compile y corremos otro juego.

95
00:07:35,780 --> 00:07:41,990
Y ahora si vamos a tener un personaje un jugador que se mueve basado en la velocidad que nosotros le

96
00:07:41,990 --> 00:07:43,210
estamos asignando.

97
00:07:43,370 --> 00:07:48,320
Y como puedes ver el movimiento es muy suave que es uno de los beneficios que obtenemos al usar el sistema

98
00:07:48,320 --> 00:07:49,630
de carácter control.

99
00:07:49,640 --> 00:07:54,520
Lo último que vamos a hacer es aplicarle gravedad a nuestro jugador si lo notaste.

100
00:07:54,520 --> 00:07:57,470
Nuestro jugador al momento está flotando sobre el suelo.

101
00:07:57,680 --> 00:08:01,940
Entonces hay que crear una fuerza gravitacional que lo va a mover hacia el suelo.

102
00:08:02,240 --> 00:08:04,850
Deja de correr el juego y regresa al escrito.

103
00:08:05,030 --> 00:08:11,420
Vamos a crear una nueva variable para nuestra gravedad y voy a escribir aquí free float Gravity y lo

104
00:08:11,420 --> 00:08:19,280
voy a igualar a 9 puntos 81 En fin que de hecho es el valor gravitacional de la tierra y el valor que

105
00:08:19,280 --> 00:08:21,020
vamos a usar para nuestro personaje.

106
00:08:21,020 --> 00:08:25,230
Antes de poder realizar cualquier movimiento con nuestro jugador tenemos que asegurarnos de que esté

107
00:08:25,280 --> 00:08:29,120
aterrizado y para eso lo vamos a aplicar la gravedad en cada fase.

108
00:08:29,440 --> 00:08:33,820
Entonces para aplicar la gravedad necesitamos afectar el valor de nuestra Velocity.

109
00:08:33,980 --> 00:08:36,620
Entonces tengo que escribir Velocity punto.

110
00:08:36,950 --> 00:08:43,250
Y le vamos a sustraer el valor de Gravity y eso es todo lo que tenemos que hacer entonces salva y regresa

111
00:08:43,250 --> 00:08:44,330
a Unity.

112
00:08:44,750 --> 00:08:50,180
Corre el juego y el personaje debería de caer al suelo y notarás que ahora está cayendo al suelo porque

113
00:08:50,180 --> 00:08:57,300
tiene una fuerza gravitacional constante que lo está afectando de menos 9.8.

114
00:08:57,300 --> 00:09:02,810
Si por ejemplo ahorita ves al jugador y trato de levantarlo verás que empieza a caer otra vez como si

115
00:09:02,810 --> 00:09:04,340
naturalmente tuviera gravedad.

116
00:09:04,340 --> 00:09:06,850
Lo que acabas de hacer es parte del trabajo de un ried.

117
00:09:07,040 --> 00:09:09,050
Solamente cuatro líneas de código.

118
00:09:09,140 --> 00:09:13,480
Muchas veces es mucho más eficiente simplemente deshacerte de todas las físicas.

119
00:09:13,480 --> 00:09:16,580
Los componentes de Física y crear tu propio carácter control.

120
00:09:17,030 --> 00:09:23,000
Entonces antes de terminar quisiera darle una repasada a todo lo que cubrimos en este código porque

121
00:09:23,000 --> 00:09:26,530
sé que esto podría llegar a ser un poco intimidante o hasta desalentador.

122
00:09:26,720 --> 00:09:31,970
Y para este juego esto es realmente lo más avanzado que vamos a escribir porque está creando las físicas

123
00:09:31,970 --> 00:09:33,560
del carácter controles.

124
00:09:33,740 --> 00:09:40,130
Entender que la dirección es simplemente un vector que está basado en el input del usuario y que la

125
00:09:40,130 --> 00:09:43,760
velocidad simplemente es una fórmula simple que estamos aplicando aquí.

126
00:09:43,990 --> 00:09:45,950
O la forma en la que estamos aplicando la gravedad.

127
00:09:45,950 --> 00:09:48,520
Aquí simplemente estamos restando no estamos.

128
00:09:48,530 --> 00:09:53,880
No queremos afectar la gravedad por el input del usuario y simplemente lo queremos elegir.

129
00:09:54,110 --> 00:09:58,820
Lo único que está haciendo la gravedad aquí es simplemente que cuando brincarse te va a volver a empujar

130
00:09:58,820 --> 00:10:00,020
hacia abajo.

131
00:10:00,020 --> 00:10:06,740
Y luego para mover todo simplemente estamos usando la función mof que hace magia por debajo y lo único

132
00:10:06,740 --> 00:10:12,630
que le pasamos es nuestra dirección con una velocidad y le estamos asignando donde estamos multiplicando.

133
00:10:14,140 --> 00:10:16,490
Y básicamente eso es todo lo que estamos haciendo.

134
00:10:16,550 --> 00:10:21,630
Y bueno antes de irnos a que vamos a limpiar un poquito nuestro código para que sea más fácil de leer.

135
00:10:21,710 --> 00:10:26,470
Lo que voy a hacer es separar la parte del input del usuario en una nueva línea.

136
00:10:26,570 --> 00:10:30,280
Entonces claro aquí un flat y le llamo horizontal.

137
00:10:30,770 --> 00:10:38,450
Entonces puedo simplemente copiar el input punto que Axis horizontal y lo voy a asignar akiha esta variable

138
00:10:39,050 --> 00:10:43,050
lo terminamos con punto y coma y entonces ahora simplemente puedo pasarle en dirección.

139
00:10:43,250 --> 00:10:48,370
En el nuevo vector 3 le pasó en X horizontal y se ve mucho más limpio.

140
00:10:48,380 --> 00:10:54,130
Vamos a hacer lo mismo con nuestro eje vertical lo quitamos de aquí creamos una nueva variable.

141
00:10:54,140 --> 00:10:58,050
Estas variables son llamadas variables temporales que sólo existen dentro del método óptimo.

142
00:10:58,400 --> 00:11:02,550
Es por eso que no estamos usando ningún modificador de acceso como poiret o públic.

143
00:11:02,690 --> 00:11:05,020
Aquí lo que voy a hacer es escribir béticas mente.

144
00:11:08,200 --> 00:11:12,420
Vertical y luego lo aplicamos igual que hicimos con el horizontal.

145
00:11:12,910 --> 00:11:18,260
Entonces en el eje Z de mi Vector de dirección voy a aplicarle Bélgica.

146
00:11:18,620 --> 00:11:21,310
Qué vamos a salvar esto.

147
00:11:21,390 --> 00:11:27,600
Por último vamos a limpiar nuestro método OPTI y como ya lo habíamos discutido no queremos nuestro lo

148
00:11:27,610 --> 00:11:33,740
principal del juego abarrotado de código entonces voy a crear un método lo voy a llamar Bait.

149
00:11:36,390 --> 00:11:40,010
Y voy a quitar el Código lobb y lo voy a meter aquí dentro.

150
00:11:40,080 --> 00:11:44,120
Ahora simplemente manda llamar ese método desde OPTI sálvate scrip.

151
00:11:44,120 --> 00:11:46,740
Estamos listos y en el siguiente vídeo.
