
English: 
Fourth episode! In previous videos
we created our character and 
put bones on him, animated him with Inverse
Kinematics, we made him jump and
move, and learn about colliders and
"RigidBodies". In this video we're going to make
the character turn around, make the camera
follow the character in two ways:
by code, and with CineMachine. 
And we'll do backgrounds in layers, achieving a
parallax effect, and finally we'll put some
obstacles on his way. My name is
Damián González and I'm doing a
videogame called "Pipa's Journey" 
whose demo is going to be
released at the end of this year. And if
you haven't yet, subscribe to the channel
to support the independent industry of
videogame.
I will try to keep this video short.
the previous one lasted about 40 minutes, and
that's not the idea. The idea is to keep it brief,
as my grandfather said, back in 1954... 
or maybe it was in 19...

Spanish: 
¡Cuarto episodio! En vídeos anteriores
creamos a nuestros personaje y les
pusimos huesos, lo animamos con Inverse
Kinematics, vimos cómo hacer saltos y
desplazarse, y vimos que son colliders y
"RigidBodies". En este vídeo vamos a hacer
que el personaje se gire, que la cámara
siga al personaje de dos maneras: con
código propio y con CineMachine. Y hacer
fondos en capas logrando un efecto
parallax, y por último poner algunos
obstáculos en el camino. Mi nombre es
Damián González y estoy haciendo un
videojuego que se llama "Pipa's Journey" o "el
viaje de pipa", cuyo demo va a ser
lanzado a fines de este año. y si no lo
hiciste suscribite al canal para apoyar
la industria independiente del
videojuego.
voy a intentar mantener este vídeo breve.
el anterior duró como 40 minutos, y 
no es la idea. La idea es hacerlo bien breve
como dijo mi abuelo allá por 1954... o quizás fue en mil novecientos...

Spanish: 
En honor a nuestro suscriptor nº 100, Luis Méndez, nuestro personaje se va a llamar Luis
Luisito.
Luisito Grimes. Empecemos con una
carencia muy obvia que tiene el juego y
es que nuestro personaje únicamente mira
a la derecha todo el tiempo. vamos a
hacer que pueda girarse. es muy simple.
Como siempre, antes de hacer nada,
pensemos. ¿Cómo hacer que se gire? y muy
importante ¿cuál es la lógica? Uno podría
decir (y esto lo escuchado bastante y lo
he visto programado así) que si está
mirando a la derecha y aprieto a la
izquierda se gire, y si está mirando a la
izquierda y aprieto a la derecha, se gire.
Pero hay algo que está de más: no importa
donde esté mirando en el momento.
Si aprieto a la derecha, mira a la derecha.
Si aprieto a la izquierda, mira a la izquierda.
Es mucho más simple y más lógico así.
Entonces, volvamos al código tal cual lo
dejamos. ¿recuerdan esta variable movX
que lee el eje horizontal?
GetAxis("Horizontal") esto va a un número que va a
ser entre -1 cuando sea izquierda y

English: 
In honour of our sub nº 100, Luis Méndez,
our character will be called Luis
Luisito. Luisito Grimes.
Let's start with a
very obvious lack that the game has: 
our character only looks
to the right all the time. We're going to
make him turn around. It's very simple.
As always, before doing anything,
let's think: How to make it turn? and very
important, what's the logic? You could
say (and this I heard a lot,
I've seen it coded like this) 
if he's looking to the right and I press left,
he turns. if he's looking to the 
left and I press left, he turns.
But it doesn't matter
where he is looking.
If I press to the right, look to the right.
If I press to the left, look to the left.
It's much simpler and more logical that way.
So, let's go back to the code as we left it.
Do you remember this variable movX,
that reads the horizontal axis?
GetAxis("Horizontal") returns a number
between -1 (when it's left)

English: 
and 1 (when it is right).
So, if movX < 0,
I'm pressing to the left.
So
if movX < 0 ... well, that part is done,
let's go to the other one.
if I press left, what? How do I turn?
Look: if we go to the inspector,
Inside the Transform we have
the Scale, that is a vector3, 
we have 3 numbers there.
What happens if I enlarge this number?
It goes wider. But what if I reduce it, more and more
until it get closer to 0?
It disappears. But if I continue,
he begins to turn, so,
If I put -1 he's going to look to the left.
If I put 1, he's going to look to the right.
That's what we're going to do.
So remember, this is inside
the transform,
we have the Scale that is a vector3,
with three numbers, and we'll set 
the X value to -1

Spanish: 
1 cuando sea derecha.
entonces si movX es menor a 0 es
porque estoy apretando a la izquierda
entonces
si movX < 0... bien esa parte ya está,
vamos a la otra. si aprieto a la
izquierda, ¿qué? ¿cómo hago para girarme? 
Fíjense esto: si vamos al inspector, lo
voy a agrandar bastante, en transform
está el Scale que es un vector3, son
tres números. ¿qué pasa si yo agrando a este
número? se ensancha
¿pero qué pasa si lo reduzco cada vez más
y más y más y más hasta que se acerca a
cero? Desaparece. Pero si sigo se
empieza a dar vuelta, de forma que si
pongo -1 va a mirar a la
izquierda y si pongo 1va a mirar a la
derecha. Eso lo que vamos a hacer.
Entonces recordemos que esto está dentro
del transform
está la escala que es un vector3
con tres números y el valor x que es el
primero lo vamos a setear a -1

Spanish: 
cuando aprieta a la izquierda.
vamos al código,
y vamos a hacer exactamente lo que
dijimos.
Transform.localScale... y fíjense que me sugiere que esto es un vector 3
va a ser un nuevo vector 3 y dijimos que
va a ser (-1,1,1)
que es exactamente lo que dice acá: (-1,1,1). Perfecto. Y ahora, mirar a la derecha.
duplico esta línea.
Si movimiento x es mayor a 0 (si aprieto
a la derecha con el teclado, joystick, lo
que sea)
esto va a ser (1,1,1).
Guardamos, compila, ponemos play... y ahí
funciona perfectamente.
Segundo tema, esto también es un problema
bastante obvio cuando jugamos a este

English: 
when you press to the left.
Let's go to the code,
And we'll do exactly what we said.
Transform.localScale ...
(see how it tell us this is a vector 3)
is going to be a new vector 3, and we said
it's (-1,1,1)
which is exactly what it says here:
(-1.1.1). Perfect. And now, same to the right.
I duplicate this line.
If movX is greater than 0 (if I press
right key, or the stick, whatever)
this is going to be (1,1,1).
We save, compile, press play ... 
It works perfectly.
Second subject! This is also a problem
pretty obvious when we play this

Spanish: 
juego tal cual está, y es que, por ejemplo,
voy a estirar este segundo bloque
bastante, y vemos que cuando me voy muy a
la derecha
la cámara no me sigue. es como si hago
esto. Y si, obvio, la cámara no me sigue,
porque está ahí, quieta. Para hablar de
cámaras qué mejor ejemplo que esta
cámara que me está filmando ahora mismo.
que ustedes no la ven pero saben que
está ahí. Este personaje, por ejemplo,
está a la misma altura que la cámara,
tiene el mismo valor y, también está a la
misma distancia de la pared, que esto
sería el eje x, y sin embargo no están en
el mismo lugar, está a unos 20
centímetros. Es obvio, sé que es obvio,
pero piénsenlo como si ustedes fueran
una cámara. la distancia que hay entre
esto y esto está en el eje Z
son unos 20 centímetros (casi tiro todo)
y que así funcionan los juegos aunque
acá estemos en un espacio 2D,
internamente estamos en un espacio en
3D donde la cámara está más adelante
que el personaje y esto les va a volar la

English: 
game as it is:
I'm going to stretch this second block
quite a lot, and if I go to 
the right
the camera does not follow me. It's like this...
Well, obviously! The camera doesn't follow me,
because it's there, still. To talk of
cameras, what better example than this one,
recording me right now.
You don't see .it but you know it's there
This guy, for example,
is at the same height as the camera,
(same Y value) and he's also at the
same distance from the wall, 
(same X value), and yet they are not in
the same place, they're about 10 inches apart.
It's obvious, I know it's obvious,
but think about it as if you were
a camera. The distance between
this and this is on the Z axis
They are about 10 inches, (I almost broke everything)
and that's how games work:
Here we're in a 2D space,
but internally we're in a 3D space
where the camera is in front
of the character. And this is gonna,

English: 
blow your mind, look: I go away...
I press this button ...
Wow! What happened?
See back here? That's our camera,
And see how if I move the camera,
we can see it in the preview.
I can even bring the camera closer,
or move away, up and down, etc.
Look how our entire game is like in a
paper in 2d, but internally we have
a 3d camera that is recording us.
So, a very simple and primitive
thing to do (that's what first
games in 2d did), is to make the
camera always have the same values X and Y
that the character, but a different value Z.
Like if the character had a selfie
stick all the time, so when
he moves, the camera moves exactly
in the same position, but 

Spanish: 
cabeza, miren. me alejo un poquito,
aprieto este botón...
Wow! Qué pasó?
y esto que ven acá atrás es la cámara
Y fíjense que si yo muevo la cámara,
me muestra en el preview lo que va a
tomar, incluso la puedo acercar la cámara,
y alejar, subir y bajar, etcétera. fíjense
como todo nuestro juego está como en un
papel en 2d pero internamente tenemos
una cámara 3d que nos está tomando.
Entonces, una forma muy simple y muy
primitiva, porque así es como se hacían los
primeros juegos en 2d, es hacer que la
cámara tenga siempre el mismo valor X e
Y que el personaje, pero diferente valor
Z. Como si el personaje tuviera un selfie
stick todo el tiempo, entonces cuando
se mueve, la cámara se mueve exactamente
en la misma posición pero más

Spanish: 
hacia adelante.
Hacerlo sería muy simple: si vamos a la
cámara vamos a ver que también tiene un
transform con una posición con sus tres
valores XYZ (es decir un vector3)
y lo que tenemos que hacer es coincidir
este x con transform.position.x del
personaje, y de la cámara, transform
position.y va a ser el mismo que el
personaje trasform posición y, es
exactamente lo que vamos a escribir.
esto fue "girarse"...
y ahora vamos a hacer "movimiento
de cámara". por suerte la cámara no hace
referenciarla,  ya está y es
camera.main. Y dijimos:
transform.position y fíjense como
sugiere que es un vector3.
transform.position va a ser... directamente podemos
operar con vectores es decir:
es el mismo que transform (o sea yo) punto
position

English: 
behind. Let's do it.
It's very simple: Let's go 
to our Camera, it also has a
transform with a position with its three
XYZ values ​​(a Vector3)
and what we have to do is match
this x with transform.position.x of the
character, and in the camera, transform
position.y will be the same as the
character's transform.position.y,
and it's exactly what we're going to do.
This was "turning around" ...
And this is "camera follow".
Luckily, camera doesn't need
a reference, we can use
Camera.main -And we said:
transform.position... and look how
suggests that it is a vector3.
transform.position will be ...  we can
directly operate with vectors like this:
it's the same as transform (that's me) point
position

Spanish: 
y esto va a ser exactamente en una
posición que la cámara, pero esto es como
si la cámara estuviera en el MISMO lugar
que el personaje. entonces lo que vamos a
hacer es sumarle un vector3 con la
profundidad, con el selfie stick, digamos.
entonces le vamos a sumar un nuevo vector3 de (0,0,-20)
que es lo mismo que decir menos...
20. Se puede operar con vectores de esta
manera, como si fueran números.
guardamos y ponemos play
Bien! hace falta, a la cámara, ponerle un
"field of view" mayor
digamos 140,
y fíjense como la cámara me va a seguir
todo el tiempo.
Esto no es muy elegante, pero funciona.
Cada mínimo movimiento que yo haga, aún
para respirar, la cámara me va a seguir.
Voy a proponer dos soluciones mejores:

English: 
And this is going to be exactly the camera's
position, but this is like
if the camera was in the SAME place
than the character. We need to
add a vector3 with the
depth, (the length of the "selfie stick")
so let's add a new vector3 of (0,0, -20)
which is the same as this...
You can operate with vectors like that,
as if they were numbers.
Let's save and play
All right! We need to give the camera more
"field of view"
let's say 140,
and see how the camera will follow me
all the time.
This is not very elegant, but it works.
Every tiny movement that I make, even
to breathe, the camera will replicate it.
I will propose 2 better options:

Spanish: 
una manual con código propio, y otra
usando CineMachine
1er método. La idea sería que en
vez de que la cámara vaya
exactamente al mismo lugar, es que
intente ir ahí, pero un poco tarde, como
con cierta pereza, no?
En términos de programación sería ver
dónde está la cámara, ver dónde debería
estar, y que dé un paso hacia ese lugar,
en un por ejemplo 5%. para hacerlo más
claro voy a hacerlo con un 50%: si mi
cámara está acá y debería estar acá y yo
me acerco un 50 por ciento,
luego calculo la diferencia y muevo un 50%, 50%... o sea
la mitad, la mitad, la mitad... Lo que
se va a lograr es un efecto como de
enlentecimiento a medida que me acerco, y
eso lo va a ser más suave. (Suave)
Entonces vamos a tener un vector 3 que
diga dónde estoy y esto va a ser

English: 
A manual one, making our own code,
and another, using CineMachine.
1st method: The idea would be that, 
instead of camera going
exactly to the intended place, 
it TRIES to go there, but a little late,
like with some laziness, right?
In terms of coding, it would be:
checking where the camera is, and see where it should
be, and then take A STEP towards that place,
for example a 5%. I'll explain it
with 50%: If my camera
is here, and should be here, and it
makes a 50% leap,
I calculate the difference and move 50%, 50%...
that's a half, and a half, and a half ...
It will cause to move slower
as I get closer, so it will look
more cool. (Cool!)
So we have this vector3 "whereIAm"
and this is going to be

English: 
the exact position of the camera.
And a vector 3 called "whereIShouldBe"
and this is where camera should be
So,
Before, we had the equivalent to this.
Camera goes where should be and that's it.
but now, I go to "whereIAm"
plus 5% of the difference.
(whereIAm + (whereIShouldBe - whereIAm) * 0.05f)
that f to indicates that it's a float
Let's try it. See how
camera follows me, but not so abruptly,
like with some laziness, as we wanted.

Spanish: 
exactamente la posición de la cámara.
Y un vector 3 que se va a llamar "donde
quiero ir"
y esto va a ser el lugar a donde tiene
que ir.
Entonces,
antes teníamos el equivalente a esto. Voy
donde quiero ir y listo. Lo que vamos a
hacer ahora es de donde estoy le va a
sumar el 5% de la diferencia.
Le va sumar...
de la diferencia...
por 0.05 y una f para indicar que un
float.
Vamos a probarlo, y ahí vemos cómo la
cámara me sigue, pero no tan bruscamente,
como con cierta pereza, como decíamos.

English: 
This number, 5%, is the level of laziness, this
it is called Damping, that is, how much it atenuates.
Keep in mind: Unity (or C#, I do not know which)
already has something that makes this calculation
for us, which is called linear
interpolation
or Lerp, abbreviated. This is exactly the
same as using that vector3 function.
Lerp,
and here it ask us: a first value,
a second value, and a number 
that if it's 0 it's going to return the first
term, if it is 1 it will return the second one
and if between 0 and 1, will return
between one and another. And this would be
simply .05, the "laziness"
of the camera.
this should work exactly the same.
Another very important tip: whenever
we move something manually
and that movement depends on time, as
in this case, you have to think that

Spanish: 
Este número, 5%, es el nivel de pereza, esto
se llama Damping, es decir cuánto se atenúa.
una aclaración: Unity (o C#, no se cuál) ya tiene algo que hace esta cuenta
por nosotros, que se llama lineal
interpolación o
abreviado Lerp. Esto es exactamente lo
mismo que usar esa función de vector 3.
Lerp,
y acá nos va a pedir: el primer valor,
el segundo valor, y un número finalmente
que si es 0 va a ser el primer
término, si es 1 va a ser el segundo y si
es un número entre 0 y 1 va a ir
entre uno y otro. Y esto sería
justamente .05, es la "pereza"
de la cámara.
esto debería funcionar exactamente igual.
Otra aclaración muy importante: siempre que
movamos algo manualmente
y ese movimiento depende del tiempo, como
en este caso, hay que pensar que una

Spanish: 
computadora más rápida lo va a mover más
rápido, porque este método Update se va
a llamar tantas veces como pueda. ¿Ubican
el término FPS, frames por segundo? bueno,
es la cantidad de veces que va a llamar
a este método Update por segundo, pueden
ser 20 en una computadora muy lenta o un
juego muy pesado, o pueden ser 1000.
Entonces lo que conviene hacer es
sacar esto y llevarlo al método
FixedUpdate, que es un método que nos
garantiza que se va a llamar siempre 50
veces por segundo, siempre, aunque sea una
computadora lentísima o un juego
pesadísimo siempre 50 veces, aún cuando
tengamos 1 fps, lo que va a pasar es que
va a llamar 1 vez al método update y
luego van a armar 50 veces seguidas al
método FixedUpdate para asegurarnos que
siempre va a ser 50 veces por segundo.

English: 
faster computers will move it faster,
because this Update method is called
as many times as possible. You know
the term FPS, frames per second?
Well, that is the number of times the
Update method will be called per second
it can be 20 on a very slow computer or a
very heavy game, or it can be 1000.
So we'll take all this
and move it to
FixedUpdate, a method that
guarantees it's always called 
50 times per second, always, even in
a very slow PC or a very heavy game.
Always 50 times. Even if we have
1 fps, what will happen is:
it will call the update method once, and
then FixedUpdate 50 times in a row
so we can make sure that
it's always 50 times per second.

Spanish: 
Bueno, repasemos, recién dije: "Voy a
proponer 2 soluciones mejores: una
manual con código propio..." y este es el
segundo método, automático. Entonces voy a
borrar todo lo que hicimos y vamos a
instalar un componente que ya viene con
Unity que se llama CineMachine. Vamos a
ir a window > package manager, y vamos a
buscar CineMachine. Recuerden, si no lo
ven elijan esta tercera opción. entramos
y vean como luego de instalar va a
aparecer un nuevo menú acá arriba que
va a decir CineMachine. perfecto,
entonces,
vamos a CineMachine y agregamos una nueva
cámara 2D.
Lo que vamos a ver es que nos agregó un
nuevo objeto que se llama virtual
camara que tienen una variable que se
llama follow, que nos pide algún
transform. Lo que vamos a hacer es
arrastrar a Luisito Grimes al slot
de Follow,  y ya vemos como
la cámara está tomando al

English: 
Well, let's recap, I just said: "I'm going to
propose 2 better solutions: a
manual one with our own code... "
And now the 2nd method, automatic.
I delete everything we did and let's
install a component that already comes with
Unity called CineMachine. Let's 
go to window > package manager, and let's
search CineMachine. Remember, if nothing appears
here, choose this third option.
See how after installing, 
a new menu will appear here.
It's going to say CineMachine. Perfect,
So...
we go to CineMachine and add a new
2D camera.
What we're going to see is that he added a
new object that is called virtual
camera that have a variable that
call follow, which asks us for some
transform. What we're going to do is
drag Luisito Grimes to the slot
of Follow, and we can see how
the camera is taking the

Spanish: 
personaje. Voy a separar el juego de la
escena para que puedan ver lo que estoy
haciendo, y como hicimos antes en la
virtual cámara vamos a dejar agrandar el
Field of View.
Y si ponemos play vemos cómo, así de
simple, ya funciona igual que antes.
¡Nada mal! Ahora, hay mucho más CineMachine
para ver y para investigar. Recomiendo
que se pongan a investigar todo lo que
tiene, pero veamos un par de cositas más.
por ejemplo, activemos esta opción que
dice "game windows guides"
y vemos que hay dos zonas pintadas.
Vamos a ver ahora lo que es la DEAD ZONE!
No, la dead zone es buena.
Vamos a darle un alto y un ancho
y vemos cómo ahora hay 3 zonas.
básicamente esto es: en la zona del
centro, en la que no tiene color, mientras
el personaje se mueva en esa zona, la

English: 
character. I'm going to move the game window,
so you can see what I'm
doing. And again, in the
virtual camera let's increase the
Field of View.
And if we press play we see how, that easily,
it works the same as before.
Not bad! Now, there is much more CineMachine
to see. I recommend you
to keep exploring it.
Just let me see a couple more things.
For example, let's activate this option,
"game windows guides"
and we see that there are two areas painted.
Let's see the DEAD ZONE!
No, dead zone is good.
Let's give it a height and a width
and now there are 3 zones.
Basically, in the center area,
(the transparent one), while
the character moves in that area, our

English: 
camera is not going to react, it will do
nothing, it's only going to move
when we get to the central area.
Same goes to up/down. The height can
be defined independently.
So, when I jump, camera is going to move slightly.
And finally, a bit of "look ahead".
If we set a "look ahead time",
the camera is going to anticipate our possible
moves and, see that yellow dot?
see how that point will activate the central 
area, making the camera
move, even when we don't reach that area at all.
Again, there is a lot to see here.
I suggest you to sit down and play with it,
it's worth a try. But again,
I want to keep this video
short.
Well, next topic! Another obvious problem 

Spanish: 
cámara no se va a inmutar, no va a hacer
ningún cambio, únicamente se va a mover
cuando lleguemos a la zona central.
lo mismo hacia arriba con la altura se
puede definir independientemente, se
puede achicar bastante y ahora, cuando yo salte, levemente se va a mover hacia
arriba. Y por último quiero que veamos el
"look ahead". Si ponemos un tiempo de "look ahead",
lo que va a hacer esto es que la cámara se
va a adelantar a nuestro posible
movimiento y, vean ese punto amarillo que
está acá,
vean como ese punto va a activar la zona
central y va a hacer que la cámara se
mueva, aún cuando nosotros no hayamos
tocado esa zona.
De nuevo, hay un montón para ver acá
sugiero que se sienten y lo prueben y
jueguen con esto, es muy divertido. Pero
como ya dije, no quiero extender
demasiado este vídeo.
Bien, siguiente tema! Otro problema obvio que

English: 
is that we have a
beautiful blue background... with less
grace than Schwartzenegger. (Do not bullshit me!)
So, let's get
artistic, let's draw some backgrounds,
but not just one,
but several layers. Even though
our game is in 2d, let's
simulate a 3D effect. This is called
"parallax effect". We're
making a zombie game, so
let's think about an enviroment.
It come to my head
several zombies series and movies
where the characters walk by street,
and behind there are houses and
schools. But at home you can
imagine WHATEVER you want, your game
should be unique and special.
So, i'm thinking: a layer of houses and
a layer of buildings behind.
Let's draw it

Spanish: 
tenemos en este juego, es que tenemos un
hermoso fondo azul que tiene menos
gracia que Schwartzenegger. (Don't bullshit me!)
Entonces, vamos a ponernos
artísticos, vamos a hacer fondos
dibujados pero no únicamente una imagen
de fondo, sino varias varias capas. Si
bien nuestro juego está en 2d, vamos a
simular un efecto en 3d. esto se llama
parallax, efecto parallax. Estamos
haciendo un juego de zombies, así que
pensemos por dónde puede caminar el
personaje. Se me vienen a
la cabeza varias series y películas de
zombies, donde el personaje camina por
la calle y de fondo hay casas y
escuelas. Pero vos en tu casa podés
imaginar lo que quieras, este juego tiene
que ser único tiene que ser especial. A
mí se me ocurre una capa de casas y de
fondo una capa de edificios. vamos a
dibujarlo.

Spanish: 
Ahí lo tenemos.
Pero ahora, ¿cómo lograr esto, cómo hacer
este efecto para las capas se mueven a
distinta velocidad? lo que hacen muchos, lo
he visto muchas veces programado así, es
hacer por código que las capas se muevan
a distinta velocidad, lo que acabo de
decir. pero ¿no es más fácil y más
elegante simular este efecto 3d en un
juego 2d simplemente usando la
tercera dimensión? es decir, como veíamos
antes, así como la cámara está en un
plano más anterior que los dibujos, los
fondos pueden estar más atrás,
físicamente más atrás. Ahora, atención con
esto: si ustedes están usando CineMachine,

English: 
There we have it.
But now, how to achieve this? how to do
this effect of layers moving at
different speeds? what many do, and
I've seen programmed like this, is
to MOVE the layers
at different speeds, by code.
But wouldn't be easier and more
elegant, to simulate this 3d effect
simply using 3D?
Just like our camera is in a plane
in front of the drawings,
our backgrounds may be further behind,
"physically" behind. Now, if 
you are using CineMachine,

English: 
(2nd method we saw), your type of camera
has automatically set 
to "perspective." that
means that,  it's really when I
I put something behind, it's going to see smaller
or bigger when it's nearer.
but if you aren't using CineMachine,
being a 2D project,
probably your camera type is
"orthographic". Roughly, this means that
the Z value of things
are going to be ignored, it won't "draw"
the depth. if you are interested
on this subject, look for
"projection modes".
All right.
So, let's drag our houses
into the scene.
For a moment I'll activate 3d mode
And simply, to these houses I'll give
a Z value,

Spanish: 
que es la segunda opción que vimos, van a
ver que automáticamente el tipo de
cámara cambió a "perspectiva". eso
significa que es realmente cuando yo
ponga más atrás algo se va a ver más
chico,
o más grande cuando está más adelante.
pero si no usan CineMachine
probablemente al ser un proyecto en 2d
les haya quedado una cámara del tipo
"ortográfica", que suena mal pero
simplemente lo que va a hacer es ignorar
el valor z de las cosas, va a dibujar
todo al mismo tamaño. si les interesa el
tema pueden buscar más información
buscando sobre tipos de proyección o
modos de proyección 2D. Bien,
entonces, lo que vamos a hacer es nuestro
fondo de casas arrastrarlo a la escena.
Un momento voy a ponerlo en 3d
y lo que vamos a hacer es:
a este fondo de casas le vamos a dar un
valor z

Spanish: 
positivo, o sea mayor al que tiene, y
vemos cómo tanto en la escena como en el
juego se va poniendo más atrás.
probablemente tenga que escalar
el dibujo para que sea un poco más
grande.
voy a sacar los bloques provisorios que
pusimos antes, no nos hacen falta ahora.
al sacar los pisos también sacamos los
Colldiers que habían en esos pisos y ahora
si ponemos play el personaje se va a
caer. entonces elijamos las casas y
agregamos el componente box colíder2D.
nos va a poner un collider enorme,
porque es todo el dibujo. lo que vamos a
hacer es editar el colíder
y ponerlo únicamente dentro de lo que
sería la calle, la parte gris. ponemos
play y vamos a ver como el personaje va
a rebotar en la parte gris, (ahí está), pero
sigue cayendo todo el tiempo porque
porque falta aclarar que este fondo de
casas en realidad tiene un Layer piso.

English: 
positive, or greater than Luisito's.
See how both in the scene (3D)
and in the game (2D) it's moving back.
Probably we'll have to scale it up,
to make it bigger.
I'm deleting these provisional blocks
we put before, we do not need it now.
But, doing this, we also take out the
Colldiers that were on those floors.
if we play now, character's going
to fall through the floor. So, let's add to the houses
a "box colider 2D" component
We have a huge collider,
because it's the whole drawing.
So let's edit the colider,
make it smaller,
only to the gray part. Let's play,
and let's see how the character
steps on the street, but
keeps "falling" all the time 
because we haven't told that this background
has a floor Layer.

Spanish: 
como vimos en el video pasado, para que
sepa que ese collider corresponde al
piso. y ahí va a dejar la animación de
saltar. Bien, vean cómo está dibujando al
personaje por atrás de las casas aún
cuando el personaje está entre la cámara
y las casas. Eso es porque en las casas
conviene poner un Order Layer en
negativo por ejemplo -1 y ahí se va
moviendo bastante bien.
nos quedó un poco chico todo, así que
vamos a ir a la cámara virtual y vamos a
achicar el Field of View.
por ejemplo a 137 ahí se ve bien
y se va viendo mucho mejor.
podemos destildar este "game window guides"
para que no se vean estas guías.
y ahora vamos a hacer lo mismo que
hicimos con los fondos de los edificios,
que sólo hice 4 porque me dio un poco de
pereza. Bueno, ahí está nuestra

English: 
so Unity knows this collider
corresponds to the floor.
Then Luisito will stop "falling".
Now, see how our character
is being draw BEHIND the houses, even though
everything is its right position.
That's because it is convenient
to set an "Order in Layer" in the houses,
a negative number like -1,
and now it's pretty good.
Everything is kind of small,
let's go to the virtual camera and 
shrink the Field of View.
for example to 137...
and it looks much better.
(Actually, it's HUGE now)
let's uncheck the "game window guides" option,
we don't need them anymore
and now let's do the same as
we did with the buildings layer,
I only draw 4, how lazy of me.
Well, here it is.

Spanish: 
capa de edificios lejanos.
hay que probar la relación entre la
escala de los fondos y la distancia que
tenga porque los edificios se van a ver
más grandes mientras mayor escala tengan
pero también mientras más cerca estén. La
diferencia es la velocidad con la que se
van a mover respecto a las capas más
frontales. eso hay que probarlo.
Bien, y por último, otra cosa que queda
muy bien es hacer una capa, pero no
más atrás sino más adelante del
personaje, entre la cámara y el personaje.
-Pero ¿no va a tapar al personaje? -Sí, lo va
a tapar, pero si la capa es sutil se va a
ver muy bien. y entonces vuelvo a photoshop o
gimp y voy a hacer un recorte de la capa
de casas únicamente algunos postes de
luz y árboles y también lo que voy a
hacer es ponerle un poco de desenfoque

English: 
Our layer of distant buildings.
Keep in mind this:
an object looks bigger
when you scale them up
but also the closer they are. 
The difference is how fast they slide
respect to other layers.
You have to try and experiment.
And finally, another cool trick
is to make a layer, but not behind the character,
but in front,
between the camera and the character.
- But won't it cover the character? -Yes, it will
but if the layer is subtle, it's a cool effect.
So, I'm going back to photoshop 
or gimp and I'm going to edit this
only keeping some lights post
and trees and also i'm applying a little Gaussian blur

English: 
(that's optional), for it to look
more diffuse. I save it in the asset folder
and back in the project let's
drag it to the scene.
I'm going to zero it out (0,0,0)
now scale it up, and there we can see it.
Position, scale...
And let's send it back, with some Z value
and now a POSITIVE number in "order in layer"
so it covers everything behind.
I think it can be bigger still.
Something like that. a little higher, bigger...
and considering this new layer will move
very fast, it's a good idea
to duplicate it several times. Let's hide
the other layers to see better

Spanish: 
gaussiano, eso es opcional, es para que
se vea más difuso. lo guardo en la carpeta
del proyecto y una vez en el proyecto lo
arrastro a la escena. Y a esta capa
cercana voy a ponerla en (0,0,0)
para poder verla
le pongo una escala y ahí se va viendo
un poco y ahora la posiciono a donde
quiera
siempre con un valor z
mayor y el order layer tiene que
ser un medio positivo para que tape a
todo lo que está atrás.
yo creo que puede ser más grande todavía.
algo así. un poco más arriba, más grande
todavía y más arriba.
y esta capa cercana, como se va a mover
muy rápido, lo que va a haber que hacer
es duplicarla varias veces. voy a sacar
las otras capas para poder ver bien.

Spanish: 
Decía, duplicarla y moverla
varias veces.
Siempre que trabajamos con varias capas
y profundidades y tamaños lo que
conviene hacer cada tanto es utilizar
esta opción en game de Maximize on Play,
darle al play y ver cómo se ve en
pantalla completa el juego.
a veces no nos damos cuenta, pero esta no
puede quedar cortado abajo o algo
parecido.
Estaba un poco grande todo, pero yo creo
que va quedando bastante bien.
Ahora, el fondo no hace falta que tenga
ese color, podemos ir a la cámara y vamos
a ver que hay una opción de background,
una variable, que se puede cambiar el
color, quizá convenga usar un color de
cielo un poco más
normal.
bien, y último tema, finalmente vamos a

English: 
I was saying, duplicate it, and move it,
several times.
Whenever we work with several layers,
and depths, and sizes, 
it is advisable to every now and then
check this "Maximize on Play" option,
and hit play, to see how the game looks in
full screen.
Only there we do realize some things
may be cut down or mispositioned.
Everything was a bit big, but I think
overall is pretty good.
Now, the sky doesn't have to have
that color, we can go to the camera
and here's a background option,
a variable, which you can change the
color, we may want to use a better color
more normal.
Well, and last topic, finally we're going to

Spanish: 
poner algunos obstáculos en la calle,
para que Luisito tenga que saltar. vamos a
hacer por ejemplo una piedra...
aquí está, vamos a la escena y la
arrastramos la piedra, la ubicamos donde
queremos
y le vamos a poner un box collider 2d
lo vamos a ajustar
y no olvidar a la piedra ponerle un
layer piso, para que se pueda parar sobre
él, entonces lo probamos, el personaje choca
contra la piedra, pero la puede saltar
y caerse
¡Bien! ¿y si fuera un auto?
aquí lo tenemos. Lo arrastramos a la escena.Nos quedó un poco el chico, le ponemos
más escala y acá lo que podemos hacer es,
como el techo tiene una altura, el capó

English: 
put some obstacles on the street,
so that Luisito has to jump. We're going to
make for example a stone ...
here it is, let's go to the scene and
drag it, 
anywhere we want...
and let's add a box collider 2d
now adjust it
and don't forget to set it
layer floor, so he can step on it.
Let's try... the character collides
against the stone, but he can jump
and fall
All right! And... What about a car?
here it is. Let's drag it to the scene...
It's too little, let's
scale it up, and now, 
the roof is taller than the hood, right?

Spanish: 
tiene otra altura, podemos usar varios
colliders. y ¿qué pasa con la bajada
está que va en diagonal? un collider no
puede ser estar inclinado. entonces lo
que podemos hacer es un objeto que esté
dentro del auto para que tenga su misma
posición,
hacemos un "create empty", y a este objeto le
vamos a agregar un componente Box Collider.
está muy chiquito el collider,
pero el truco es que si hay a este
objeto lo rotamos (como tiene un
transform se puede rotar), rotamos este
objeto
y ahora lo ubicamos donde queremos.
ahora los dos objetos le vamos a poner
layer Piso,
ponemos que sí, a todos los hijos. por
último recuerden, cómo es un juego en 2d
no importa si collider está un poco

English: 
we can use several
colliders. and what about this slope?
A collider cannot be tilt. BUT...
what we can do is: create an object
inside the car, 
so that it has its same position,
we "create empty",
and add a Box Collider component to its child.
The collider is very small,
but the trick is:
we can ROTATE it (since it has a
transform), we rotate this
object
and now we place it where we want.
And now, let's set to BOTH objects
the Floor layer.
Yes, change the children.
And remember: since this is a 2d game,
it doesn't matter if the collider is a bit

English: 
below than it should be, for
example here, on the hood,
lower is better, because if
the feet are here, it's fine,
it would seem like there's more car behind
but it would be very strange
if the character steps
into the air! So, lower is better.
Let's play,
Let's test it...
Well, I think it's very good, it could
be better, but we'll improve it
in next episodes. So, this was
the 4th episode. In the next one,
next Saturday, it's finally zombies time!
We will draw them, then
put some bones, give them Inverse
Kinematics, just like we did in the

Spanish: 
más abajo de lo que tiene que ser, por
ejemplo acá, en el capó del auto
convendría que esté más bajo, porque si
los pies quedan por acá no es problema,
porque parece que el autos sigue 
más para atrás, pero sí sería muy extraño
que el personaje pise
el vacío, el aire. Convieine que quede un poco
más abajo. ponemos play,
lo probamos...
Bueno, yo creo que está muy bien, pueden
mejorar, lo vamos a ir refinando en los
próximos episodios. Pero bueno, éste fue
el cuarto episodio. En el siguiente, el
sábado que viene, por fin llegan los
zombies! Los vamos a dibujar, le vamos a
poner huesos, le vamos a poner Inverse
Kinematics, así como hicimos en el

English: 
episode 1 with Luisito, now with the zombies.
We'll do
some animations and later, some
behavior,
artificial intelligence, we'll do weapons,
shooting, explosions, energy,
death, grab things, swap
weapons, all that. Step by step.
See you next Saturday. Thank you!

Spanish: 
episodio 1 con luisito, lo vamos a hacer
con los zombies ahora. Le vamos a poner
animaciones y luego empieza el
comportamiento de los zombies, la
inteligencia artificial, vienen las armas,
los disparos, las explosiones, la energía,
la muerte, agarrar cosas, cambiar de
armas, todo eso. pero bueno, poco a poco.
Nos vemos el sábado que viene. Muchas gracias
