Introducción

1

Game Design del juego

2

La estructura y assets de un proyecto en Unity

3

Convirtiendo nuestros assets en Tiles

4

Tilemaps y creación del escenario

5

Bonus: FastForward de la creación del escenario, sorting layers y creación de colliders

6

Acá encontrarás los archivos de este curso

Personaje principal: Movimiento y Animaciones

7

El jugador y el movimiento

8

Creando nuestra primera animación

9

Creando el grafo de animaciones

10

Usando un árbol de animaciones

11

Mostrando la solución del desafío e implementando transición entre blended trees

12

Programando una cámara que siga al jugador

13

Corrección del bug gráfico

14

límites del escenario, rigid bodies

15

Ejercicio: diseño de interiores

Escenarios Avanzados

16

Transiciones entre escenas

17

Mantener Player y Camera entre escenas

18

Spawning Points: programando que el jugador y la cámara aparezcan en el lugar correcto al cambiar de escena

19

Agregando Identificadores a nuestros Spawning Points para controlar mejor el flujo de nuestro juego

Enemigos Avanzados

20

Creando nuestro enemigo

21

Programando las físicas y el patrullaje del enemigo

22

Generando movimiento completamente aleatorio

23

Programando el ataque del enemigo

24

Crear Manager de Health del Player

25

Crear armas

26

Programando el ataque del Player con arma

27

Mover la espada al caminar

28

Creando el ataque con espada

29

Ejecutando el ataque con un botón

30

Movimiento en diagonal

31

Optimizando nuestro player controller

32

Ataque mejorado

33

Uso de partículas

34

Añadir el daño del enemigo en batalla

35

Programando los contadores de vida del enemigo

36

Colocando más info de UI en pantalla

37

Script de la vida

Personaje principal avanzado

38

Añadir el daño del personaje (ejercicio)

39

Sistema de puntos de experiencia para nuestro personaje principal

40

Level Up!

41

Level Up! Defensa y Reto Final del Módulo: Stats de los enemigos

42

Creando un NPC

43

Limitar el movimiento de nuestro NPC

44

Creando una pantalla de diálogos para nuestro RPG

45

El diálogo del NPC

46

Múltiples líneas de diálogo

47

Parar el NPC durante el diálogo

48

Parar el personaje durante el diálogo

Quests

49

La estructura de una quest

50

Quest 1: Ir a un lugar

51

Quest 2: Encontrar un objeto

52

Quest 3: Matar enemigos

53

Revisión de bugs

54

Mantener la cámara dentro del escenario

55

El problema al cambiar de escena

Audio

56

Agregando SFX a nuestro videojuego

57

Agregando música a nuestro videojuego

58

Ajustar volúmen del audio de cada uno de los efectos de sonido

59

Creando un VolumeManager

60

Agregando economía a nuestro juego y cierre

Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

El jugador y el movimiento

7/60
Recursos

Aportes 18

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Una 🍺 por el primer script 🍻

Hola Juan disculpa la molestia pero al programar el player controller en visual studio 2017 no me marca el comando mathf, que es lo que puedo hacer???

Resumen de la clase

El objetivo es mover al conejo por el escenario. Vamos a Edit > Project Settings > Input donde vemos los ejes Horizontal y Vertical que serán los controles del movimiento.

Nos creamos el script PlayerController y se lo asignamos al Player. Añadimos las variables Speed, a qué velocidad se moverá, y como buena práctica definimos las constantes horizontal y vertical.

En el Update comprobamos si el valor absoluto del eje Horizontal es superior a un valor, entonces usamos Translate para cambiar la posición del personaje, multiplicando horizontal, speed y el tiempo.

Hacemos lo mismo para el eje vertical. Ahora comprobamos que se mueve el personaje.

Chicos, el movimiento es mejor capturarlo y normalizarlo al momento de crear el vector2. Por que?
Porque la magnitud del vector siempre debe ser = 1.
Ej. Cuando apretamos a la derecha, la magnitud es 1 (x=1 , y=0)
Cuando apretamos arriba la magnitud es 1 (x=0, y=1).
Pero cuando apretamos en diagonal la magnitud se vuelve >1 (x=1, y=1) esto hace que el personaje vaya más rapido al ir en diagonal que al ir hacia los costados o hacia arriba.
Basicamente surge por Pitagoras, c2 = a2 + b2. Si reemplazamos a y b por 1. El resultado da 1,41 dando ese plus de velocidad

private void FixedUpdate()
    {
        isWalking = false;
        if (Mathf.Abs(_horizontalMovement) > 0.5f)
        {
            /*this.transform.Translate(new Vector3(_horizontalMovement * speed * Time.deltaTime, 0,0));*/
            Vector2 movement = new Vector2(_horizontalMovement, _rigidbody.velocity.y).normalized;
            _rigidbody.velocity = movement * speed * Time.deltaTime;
            isWalking = true;
            lastMovement = new Vector2(_horizontalMovement, 0);
        }
        if (Mathf.Abs(_verticalMovement) > 0.5f)
        {
            /* this.transform.Translate(new Vector3(0, _verticalMovement * speed * Time.deltaTime, 0));*/
            Vector2 movement = new Vector2(_rigidbody.velocity.x,_verticalMovement).normalized;
            _rigidbody.velocity = movement * speed * Time.deltaTime;
            isWalking = true;
            lastMovement = new Vector2(0, _verticalMovement);
        }

Por qué usamos transform.Translate y no rigid.velocity para poder desplazar nuestro personaje?

Excelente forma de poder agregar el movimiento al personaje.
Si han visto los anteriores cursos, hemos aprendido distintas maneras de lograr movimiento.
¡Excelente video!

Aqui comparto mi script de movimiento

[SerializeField] public float speed = 4.0f;

[SerializeField] const string hor = "Horizontal";
[SerializeField] const string ver = "Vertical";

[SerializeField] Vector2 dir;

void Start()
{
    
}

void FixedUpdate()
{
    Movement();
}

void Movement()
{
    if(Mathf.Abs(Input.GetAxisRaw(hor)) >= .5f)
    {
        dir.x = Input.GetAxisRaw(hor) * speed;
    }
    if (Mathf.Abs(Input.GetAxisRaw(ver)) >= .5f)
    {
        dir.y = Input.GetAxisRaw(ver) * speed;
    }

    transform.Translate(dir);
}

Acá dejo mi función Update:

void Update()
{
  float vectorX = 0;
  float vectorY = 0;

  if (Mathf.Abs(Input.GetAxisRaw(horizontal)) >= 0.5f) {
    vectorX = Input.GetAxisRaw(horizontal) * speed * Time.deltaTime;
  }

  if (Mathf.Abs(Input.GetAxisRaw(vertical)) >= 0.5f) {
    vectorY = Input.GetAxisRaw(vertical) * speed * Time.deltaTime;
  }

  this.transform.Translate(new Vector3(vectorX, vectorY, 0));
}

Aquí lo tienen completo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

    public float speed = 4.0f;

    private const string horizontal = "Horizontal";
    private const string vertical = "Vertical";

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // s = v*t;
        //Movimiento horizontal
        if(Mathf.Abs(Input.GetAxisRaw(horizontal))>0.5f){
            this.transform.Translate(new Vector3(Input.GetAxisRaw(horizontal)
            *speed*Time.deltaTime,0,0));
        }
        //Movimiento vertical
        if(Mathf.Abs(Input.GetAxisRaw(vertical))>0.5f){
            this.transform.Translate(new Vector3(0,Input.GetAxisRaw(vertical)
            *speed*Time.deltaTime,0));
        }
    }
}

https://github.com/platzi/rpgConUnity/tree/7a2149e5dee1372f6f142d6c49d3354d5894d87a
Este es el link de para descargar los scripts del profe y checar cada línea de código

Genial

Por que usamos Vector3 si no vamos a mover al personaje en el eje Z?

Encantado por esta increíble clase, me gusto el uso de funciones matemáticas como el valor absoluto, siempre es bueno darse su leída sobre matemáticas y física, te pueden ayudar un montón. 😄

este chico explca la funcion mathf con otro ejemplo
https://www.youtube.com/watch?v=mFOi6W7lohk

Muy útil Math.Abs, para poder darle seguridad al juego 😄

//Time.time->Regresa el tiempo transcurrido
        //Timer.deltaTime->La velocidad a la que corre el juego
///Mathf.Abs ->Obtiene el valor numerico sin signo, siendo siempre positivo ```

me encanta programar el movimiento del personaje

QUE EMOCIÓN DE VERDAD