Do you like my tutorials?

Then consider supporting me on Ko-fi

Talking about Concentration game, 3D, Game development and Unity3D.

In this third step of the 3D concentration game we’ll see how to create multiple instances of an object, how to move the camera and how to add a background plane.

If you have missed them, check from zero to a complete Unity3D game: 3D Concentration using C# – step 1 for the bare bones and step 2: skinning and timing to know how to join game objects and handling timers.

Basically, at this point we have a tile which can be flipped but now we want an arbitrary number of tiles placed in rows and columns, moreover we want to place the camera in order to see all tiles no matter of their number, and a plane where to lie tiles.

It may seem a lot of things but actually it’s very easy, although I had to modify Mainscript.cs a bit:

using UnityEngine;
using System.Collections;

public class MainScript : MonoBehaviour {
	
	void Start () {
		int rows=4;	// number of rows 
	 	int cols=5; // number of columns
	 	int tileSpacing=1; // space between two tiles
	 	int tileSize=2; // tile size
		for(int i=0; i<rows; i++){
			for(int j=0; j<cols; j++){
				// a cube
				GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); 
		        cube.transform.localScale=new Vector3 (2,2,0.5f);
				cube.renderer.material.color= new Color(255,0,0);
				cube.transform.localPosition = new Vector3(3*j,3*i,0);
				cube.AddComponent("CubeScript"); 
				// a quad
				GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad); 
				quad.transform.localScale=new Vector2 (2,2);
				quad.transform.Rotate(0,180,0);
				quad.transform.position=new Vector3(3*j,3*i,0.251f);
				// attaching the quad to the cube
				quad.transform.parent=cube.transform; 
			}
		}
		// the camera, we want to point on the middle of the board
		float cameraX = ((cols-1)*tileSize+(cols-1)*tileSpacing)/2f;
		float cameraY = ((rows-1)*tileSize+(rows-1)*tileSpacing)/2f;
		// setting camera height, this should work with every number of tiles
		float cameraZ = Mathf.Max(cols,rows)*-3f;
		Camera.main.transform.localPosition = new Vector3(cameraX,cameraY,cameraZ);
		// the ground
		GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane); 
		plane.transform.Rotate(-90,0,0);
		plane.transform.localPosition = new Vector3(cameraX,cameraY,1);
		plane.renderer.material.color = new Color(128,128,128);
		plane.transform.localScale = new Vector3 (cameraX/2.5f,0,cameraY/2.5f);
	}
}

While I only added one line to CubeScript.cs

using UnityEngine;
using System.Collections;

public class CubeScript : MonoBehaviour {
	
	private bool flip = false;											// I want to manually flip the tile
	private int speed = 5;												// rotation speed, must divide 180
	private int steps;													// the number of steps required to complete a rotation
	private int direction;												// rotation direction. 1 = show tile; -1 = hide tile

	void Update () {
		if(flip && steps<180/speed){									// we want to rotate it and the rotation is not completed
			transform.Rotate(Vector3.up*speed*direction, Space.World);	// rotate it around world coordinates according to speed
			steps++;													// we did one more step
			if(steps==180/speed){										// if the rotation is completed...
				if(direction==1){										// if we were showing the tile...
					Invoke("Cover",2);									// call "Cover" function (to cover the tile) after 2 seconds
				}
				else{
					flip=false;											// else set flip to false to enable the player click and show the tile again
					renderer.material.color = new Color(255,0,0); 		// set the color to red again
				}
			}
		}
	}
	
	void OnMouseDown() {
		if(!flip){
			renderer.material.color = new Color(0,255,0);				// set the color to green
			steps=0;													// resetting steps
			direction=1;												// remember, direction = 1 => show tile
			flip = true;												// we want to flip the tile
		}
    }
	
	void Cover(){
		steps=0;														// resetting steps
		direction=-1;													// remember, direction = -1 => hide tile
	}
	
}

And this is the result:

Click on tiles to flip them.

Now, we are ready to use real graphics, which will be explained next week.

Download the source code of the entire project.

Never miss an update! Subscribe, and I will bother you by email only when a new game or full source code comes out.