Índice del curso de Unity 3D

  1. Introducción
  2. Instalación
  3. Interfaz
  4. Conceptos básicos
  5. Ejercicio: cubos
  6. Cambiar el color de algo
  7. Introducción a C#
  8. Conceptos para realización de juegos 2D
  9. Acceder a componentes desde código
  10. Uso del transform
  11. User Interface
  12. Elije tu propia aventura
  13. Acierta imagen
  14. Sprites
  15. Fall Down Game
  16. Galería de tiro
  17. Corrutinas
  18. Flappy Bird
  19. PONG
  20. Carreras
  21. Panel Animator
  22. Plataformas
  23. Plataformas
  24. Puzzle con Raycast
  25. Plataformas con RayCast
  26. Memory (juego de las parejas)
  27. Guardar y recuperar información almacenada
  28. Máscara
  29. Publicación
  30. Ejercicio: First Person Shooter
  31. Multijugador con Photon

Memory (juego de las parejas)

Descargar juego de las parejas

Ubicar objetos en el canvas

Creo la siguiente jerarquía de objetos dentro del camvas:

  • Panel (con el componente vertical layout group)
    • panel1 (con el componente horizontal layout group)
      • carta1
      • carta2
      • carta3
      • carta4
      • carta5
    • panel2 (con el componente horizontal layout group)
      • carta1
      • carta2
      • carta3
      • carta4
      • carta5

Voltear cartas

GameController.cspublic class GameController : MonoBehaviour {
	public Sprite[] cardFace;
	public Sprite cardBack;
	public GameObject[]cards;

	void Start(){
	for (int id = 0; id < 2; id++) {
	for (int i = 0; i <cardFace.Length; i++) {
	bool test = false;
	int choice = 0;

	while (!test) {
		choice = Random.Range (0, cards.Length);
		//Voy buscando hasta encontrar una carta no inicializada
		//Si todas las cartas fueron ya inicializadas, obtendré un bucle infinito
		test = !(cards [choice].GetComponent<Card> ().initialized);
	}
	cards [choice].GetComponent<Card> ().cardFace = cardFace[i];
	cards [choice].GetComponent<Card> ().initialized = true;
	}
}
Card.csusing UnityEngine;
using UnityEngine.UI;

public class Card : MonoBehaviour{
	public bool initialized = false;

	public Image cardBack;
	public Sprite cardFace;
	GameController gc;
	void Start(){
		gc = GameObject.Find("GameController").GetComponent<GameController>();
		cardBack = GetComponent<Image>();
		cardBack.sprite = gc.cardBack;
		GetComponent<Button>().onClick.AddListener(flipCard);
	}

	public void flipCard(){
		GetComponent<Image>().sprite = cardFace;
	}   
}

La carta llama al GameController

Destapo dos cartas

GameController.csprivate Card primeraCarta;
private Card segundaCarta;

public void evaluarCartas(Card4 carta){
	if (primeraCarta == null) {
		carta.GetComponent<Image> ().sprite = carta.cardFace;
		primeraCarta = carta;
	} else if (segundaCarta == null) {
		carta.GetComponent<Image> ().sprite = carta.cardFace;	
		segundaCarta = carta;
		if (primeraCarta.GetComponent<Image> ().sprite == segundaCarta.GetComponent<Image> ().sprite) {
			Debug.Log ("exito");
			primeraCarta = null;
			segundaCarta = null;
		} else {
			StartCoroutine (dejaCartasComoAlPrincipio());	
		}
	}
}

IEnumerator dejaCartasComoAlPrincipio(){
	yield return new WaitForSeconds (1f);
	primeraCarta.GetComponent<Image> ().sprite = cardBack;
	segundaCarta.GetComponent<Image> ().sprite = cardBack;
	primeraCarta = null;
	segundaCarta = null;
}
Card.cs private void flipCard(){
	// this.GetComponent<Image>().sprite = _cardFace;
	gc.evaluarCartas(this);
}

Añadir la detección de cuando se ha ganado la partida

icono de mandar un mailPreguntame lo que quieras!
Pablo Monteserín
contacta conmigoPablo Monteserín

El servicio de resolución de dudas técnicas es sólo para los usuarios premium. Si tienes cualquier otra duda, usa el formulario de contacto. ¡Gracias!