Mini-jeu dans Unity | CUBEavoid

Le CUBEavoid est un mini-jeu créé en Unity. Code source et configuration ci-dessous.

Le but est d'éviter le petit cube en redimensionnant le gros cube avec le curseur de la souris.

Étape 1: Créer tous les scripts nécessaires

  • Créez un nouveau script, appelez-le SC_PlayerCube.cs, supprimez tout et collez-y le code ci-dessous:

SC_PlayerCube.cs

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

public class SC_PlayerCube : MonoBehaviour
{
    //Assign enemy mesh renderer
    public MeshRenderer enemy;
    public Text gameOverText;

    Transform thisT;
    MeshRenderer mr;

    //Global static variable
    public static bool GameOver = false;

    // Start is called before the first frame update
    void Start()
    {
        thisT = transform;
        mr = GetComponent<MeshRenderer>();
        gameOverText.enabled = false;
    }

    // Update is called once per frame
    void Update()
    {
        if (GameOver)
            return;

        if (gameOverText.enabled)
        {
            //Game has resumed, disable game over text
            gameOverText.enabled = false;
        }

        //Scale player cube with mouse movement
        Vector3 playerScale = (new Vector3(Screen.width / 2 - Input.mousePosition.x, 1, Screen.height / 2 - Input.mousePosition.y)).normalized * 10;
        //Keep Y scale at 10
        playerScale.y = 10;
        //Limit minimum X and Z scale to 0.1
        if (playerScale.x >= 0 && playerScale.x < 0.1f)
        {
            playerScale.x = 0.1f;
        }
        else if (playerScale.x < 0 && playerScale.x > -0.1f)
        {
            playerScale.x = -0.1f;
        }
        if (playerScale.z >= 0 && playerScale.z < 0.1f)
        {
            playerScale.z = 0.1f;
        }
        else if (playerScale.z < 0 && playerScale.z > -0.1f)
        {
            playerScale.z = -0.1f;
        }
        thisT.localScale = playerScale;

        //Check if enemy have intersected with the player, if so, stop the game
        if (mr.bounds.Intersects(enemy.bounds))
        {
            GameOver = true;
            gameOverText.enabled = true;
        }
    }
}
  • Créez un nouveau script, appelez-le SC_EnemyCube.cs, supprimez tout et collez-y le code ci-dessous:

SC_EnemyCube.cs

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

//This script controls enemy cube AI
public class SC_EnemyCube : MonoBehaviour
{
    //Private variables
    Camera mainCamera;
    float movementTime = 0;
    Vector3 startPoint;
    Vector3 endPoint;

    // Start is called before the first frame update
    void Start()
    {
        //Get camera tagged "MainCamera"
        mainCamera = Camera.main;
        GenerateStartEndPoint();
    }

    //Assign start and end points slightly outside the Camera view
    void GenerateStartEndPoint()
    {
        Vector3 relativeStart;
        Vector3 relativeEnd;

        //Randomly pick whether to go Left <-> Right or Up <-> Down
        if (Random.Range(-10, 10) > 0)
        {
            relativeStart = new Vector3(Random.Range(-10, 10) > 0 ? 1.1f : -0.1f, Random.Range(0.00f, 1.00f), mainCamera.transform.position.y);
            if (relativeStart.y > 0.4f && relativeStart.y < 0.6f)
            {
                if(relativeStart.y >= 0.5f)
                {
                    relativeStart.y = 0.6f;
                }
                else
                {
                    relativeStart.y = 0.4f;
                }
            }
            relativeEnd = relativeStart;
            relativeEnd.x = relativeEnd.x > 1 ? -0.1f : 1.1f;
        }
        else
        {
            relativeStart = new Vector3(Random.Range(0.00f, 1.00f), Random.Range(-10, 10) > 0 ? 1.1f : -0.1f, mainCamera.transform.position.y);
            if (relativeStart.x > 0.4f && relativeStart.x < 0.6f)
            {
                if (relativeStart.x >= 0.5f)
                {
                    relativeStart.x = 0.6f;
                }
                else
                {
                    relativeStart.x = 0.4f;
                }
            }
            relativeEnd = relativeStart;
            relativeEnd.y = relativeEnd.y > 1 ? -0.1f : 1.1f;
        }

        //Convert screen points to world points
        startPoint = mainCamera.ViewportToWorldPoint(relativeStart);
        endPoint = mainCamera.ViewportToWorldPoint(relativeEnd);

        //Reset movement time
        movementTime = 0;
    }

    // Update is called once per frame
    void Update()
    {
        //Game over, wait for click
        if (SC_PlayerCube.GameOver)
        {
            //Click to resume
            if (Input.GetMouseButtonDown(0))
            {
                SC_PlayerCube.GameOver = false;
                GenerateStartEndPoint();
            }
            else
            {
                return;
            }
        }

        //Move enemy from one side to the other
        if(movementTime < 1)
        {
            movementTime += Time.deltaTime * 0.5f;

            transform.position = Vector3.Lerp(startPoint, endPoint, movementTime);
        }
        else
        {
            //Re-generate start / end point
            GenerateStartEndPoint();
        }
    }
}

Étape 2: Configuration

Une fois les 2 scripts principaux créés, procédons à la configuration du jeu:

  • Créez une nouvelle scène si vous ne l'avez pas encore fait
  • Sélectionnez Caméra principale, changez sa position en (0, 10, 0) et sa rotation en (90, 0, 0)
  • Modifiez les propriétés du composant Caméra de la caméra principale: Effacer les drapeaux sur 'Solid Color', Arrière-plan sur 'white', Projection sur 'Orthographic' et Taille sur '10'

  • Créez un nouveau cube (Objet de jeu -> Objet 3D -> Cube) et nommez-le "Player"
  • Changez la position "Player" en (0, 0, 0) et l'échelle en (10, 10, 10)
  • Créez un nouveau matériau (clic droit sur le dossier du projet -> Créer -> Matériau) et nommez-le "PlayerMaterial"
  • Changez le "PlayerMaterial" Shader sur Unlit/Color et changez sa couleur en noir

  • Attribuez "PlayerMaterial" au cube "Player"
  • Dupliquez le cube "Player" et renommez-le en "Enemy"
  • Modifiez l'échelle "Enemy" en (0,7, 0,7, 0,7)
  • Dupliquez "PlayerMaterial" et renommez-le en "EnemyMaterial"
  • Changer la couleur hexadécimale "EnemyMaterial" en 157EFB
  • Enfin, attribuez "EnemyMaterial" au cube "Enemy"

CUBEéviter la vue de la scène

Créons une interface utilisateur simple:

  • Créez un nouveau texte d'interface utilisateur (Objet de jeu -> UI -> Texte), renommez-le en "GameOverText"
  • Assurez-vous que l'alignement RectTransform pour le nouveau texte est défini sur Middle Center
  • Définissez Texte Pos X et Pos Y sur 0
  • Modifier la hauteur à 100
  • Pour le composant Texte, définissez le texte ci-dessous (assurez-vous que la propriété Texte enrichi est cochée):
Game Over
<size=15>Click to Try Again</size>
  • Définir la taille de la police sur 25
  • Définir l'alignement du texte sur le centre du milieu
  • Définir la couleur du texte sur rouge

CUBEéviter Game Over Text

Enfin, attribuons les scripts:

  • Sélectionnez le cube "Player" et assignez le script SC_PlayerCube à celui-ci
  • Affectez le cube "Enemy" à la variable Ennemi
  • Attribuez "GameOverText" à la variable Game Over Text

  • Sélectionnez "Enemy" cube et assignez le script SC_EnemyCube à celui-ci

Maintenant, lorsque vous appuyez sur Play, le cube bleu devrait commencer à se déplacer sur l'écran, ce que vous devez éviter en redimensionnant le cube noir à l'aide du curseur de la souris.

N'hésitez pas à améliorer ce jeu de quelque manière que ce soit.

Articles suggérés
Tutoriel pour le jeu de puzzle Match-3 dans Unity
Mini-jeu dans Unity | Flappy Cube
Tutoriel Endless Runner pour Unity
Créer un jeu de casse-briques 2D dans Unity
Créer un jeu de puzzle coulissant dans Unity
Comment créer un jeu inspiré de Flappy Bird dans Unity
Zombies de la ferme | Making d'un jeu de plateforme 2D dans Unity