Demo del proyecto completo

Demo videojuego. Se necesita teclador. Use las flechas para mover el personaje y colectar objetos.

Clase 1

Pasos

  • Crear un nuevo proyecto 3D
  • Importar entorno y crear el entorno (aprender a navegar en Unity)
  • Importar jugador, añadir texturas y Character Controller (colisionador y SimpleMove)

Clase 2

Vídeo clase 2

  • Cambiar la posición del Character Controller (height: 1, Center Y: 0.5). Así el colisionador (Collider) cubrirá al personaje.
  • Añadir un script al personaje llamado PlayerController.
  • Encontrad el script en la carpeta Assets, en la pantalla Project, y abridlo (se abrirá automáticamente en Visual Studio).

Observad que ya contiene este código:

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

public class PlayerController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
  • Poned Debug.Log("Start!"); en Start() { ... } y observad el efecto en la consola (Console).
  • Poned este código en Update() { ... } y observad el efecto en la consola (Console):
float speed = Input.GetAxis("Vertical");

if (speed != 0) // el jugador se mueve
{
    Debug.Log(speed);
}
  • Hacer movimiento vertical (cambiar el color en Playmode)
  • Hacer rotación
  • Conectar animaciones (Añadir controlador de animación)
  • Mover la cámara con el jugador

Clase 3

Video 3

  • Hacer animaciones con rotación del personaje
  • Añadir un objeto para colectar (por ejemplo, un vaso o contenedor)
  • Añadir componente “Box Collider” y hacer clic en “Is Trigger”
  • Crear un script VasoController
  • Animarlo con rotación
  • Etiquetar tu personaje como “Player”
  • Añadir método para detectar la colisión y hacer el objeto invisible
// VasoController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VasoController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(Vector3.up * 0.2f);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            gameObject.SetActive(false);
        }
    }
}

Clase 4

Video 4

Esta semana vamos a añadir un UI simple, mostrando puntos por cada object que colectamos.

Crear nuevo objeto de juego: UI > Texto - TextMeshPro Haz doble clic en el objeto de texto para editar, luego mueve el texto a la parte superior de la pantalla. Establece el punto de anclaje en la parte superior. Juega el juego y observa el texto. Agrega el script ScoreManager al objeto canvas. Añade código:

// ScoreManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class ScoreManager : MonoBehaviour
{

    public TMP_Text scoreText;

    int score = 0;

    // Start is called before the first frame update
    void Start()
    {
        scoreText.SetText("Items: " + score);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Arrastra el objeto de texto al campo. Añade un método para sumar puntos.

// ScoreManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class ScoreManager : MonoBehaviour
{
    public static ScoreManager instance; // añadir

    public TMP_Text scoreText;

    int score = 0;

    // añadir
    private void Awake()
    {
        instance = this;
    }

    // Start is called before the first frame update
    void Start()
    {
        scoreText.SetText("Items: " + score);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    // añadir
    public void AddPoint()
    {
        score += 1;
        scoreText.SetText("Items: " + score);
    }
}

Actualiza el script del contenedor para añadir un punto:

// VasoController
// ...
void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            gameObject.SetActive(false);

            ScoreManager.instance.AddPoint(); // añadir
        }
    }
// ...

Now play the game and you should get a point when you collect an item.

Código Completo

// PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 4.0f;
    public float rotateSpeed = 1.0f;

    // Start is called before the first frame update
    void Start()
    {
        //Debug.Log("Start!");

        Animator anim = GetComponent<Animator>();

        anim.SetBool("Grounded", true);
    }

    // Update is called once per frame
    void Update()
    {
        float speed = Input.GetAxis("Vertical");

        Animator anim = GetComponent<Animator>();

        anim.SetFloat("MoveSpeed", speed);

        if (speed == 0)
        {
            anim.SetFloat("MoveSpeed", Input.GetAxis("Horizontal"));
        }

        transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);

        Vector3 forward = transform.TransformDirection(Vector3.forward);

        CharacterController controller = GetComponent<CharacterController>();
        controller.SimpleMove(forward * speed * moveSpeed);
    }
}