Mini joc în Unity | CUBEevită

CUBEavoid este un mini-joc realizat în Unity. Cod sursă și configurat mai jos.

Scopul este de a evita cubul mic prin redimensionarea cubului mare cu cursorul mouse-ului.

Pasul 1: Creați toate scripturile necesare

  • Creați un script nou, numiți-l SC_PlayerCube.cs, eliminați totul din el și inserați codul de mai jos în el:

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;
        }
    }
}
  • Creați un nou script, numiți-l SC_EnemyCube.cs, eliminați totul din el și inserați codul de mai jos în el:

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();
        }
    }
}

Pasul 2: Configurare

După ce sunt create cele 2 scripturi principale, să continuăm cu configurarea jocului:

  • Creează o scenă nouă dacă nu ai făcut-o încă
  • Selectați Camera principală, schimbați-i poziția la (0, 10, 0) și rotirea acesteia la (90, 0, 0)
  • Schimbați proprietățile componentei camerei foto principale: Ștergeți steaguri la 'Solid Color', Fundal la 'white', Proiecție la 'Orthographic' și Dimensiune la '10'

  • Creați un nou Cub (Obiect de joc -> Obiect 3D -> Cub) și denumiți-l "Player"
  • Schimbați poziția "Player" la (0, 0, 0) și scalați la (10, 10, 10)
  • Creați material nou (clic dreapta pe folderul Proiect -> Creare -> Material) și denumiți-l "PlayerMaterial"
  • Schimbați "PlayerMaterial" Shader în Unlit/Color și schimbați-i culoarea în negru

  • Atribuiți "PlayerMaterial" cubului "Player"
  • Duplicați cubul "Player" și redenumiți-l în "Enemy"
  • Schimbați scala "Enemy" la (0,7, 0,7, 0,7)
  • Duplicați "PlayerMaterial" și redenumiți-l în "EnemyMaterial"
  • Schimbați "EnemyMaterial" culoarea hexazecimală la 157EFB
  • În cele din urmă, atribuiți "EnemyMaterial" la "Enemy" Cube

CUBEevitati vizualizarea scenei

Să creăm o interfață simplă:

  • Creați un text nou UI (Obiect de joc -> UI -> Text), redenumiți-l în "GameOverText"
  • Asigurați-vă că alinierea RectTransform pentru noul Text este setată la Centrul de mijloc
  • Setați Text Pos X și Pos Y la 0
  • Schimbați înălțimea la 100
  • Pentru componenta Text, setați textul de mai jos (asigurați-vă că proprietatea Text îmbogățit este bifată):
Game Over
<size=15>Click to Try Again</size>
  • Setați dimensiunea fontului la 25
  • Setați Alinierea textului la Centrul din mijloc
  • Setați culoarea textului la roșu

CUBEavoid Game Over Text

În cele din urmă, să atribuim scripturile:

  • Selectați cubul "Player" și alocați lui scriptul SC_PlayerCube
  • Atribuiți cubul "Enemy" variabilei Inamic
  • Atribuiți "GameOverText" variabilei Game Over Text

  • Selectați "Enemy" cubul și alocați lui scriptul SC_EnemyCube

Acum, când apăsați pe Play, cubul albastru ar trebui să înceapă să se miște pe ecran, lucru pe care trebuie să îl evitați redimensionând cubul negru, folosind cursorul mouse-ului.

Simțiți-vă liber să îmbunătățiți acest joc în orice fel.

Articole sugerate
Mini joc în Unity | Flappy Cube
Tutorial pentru jocul de puzzle Match-3 în Unity
Tutorial Endless Runner pentru Unity
Crearea unui joc 2D Brick Breaker în Unity
Crearea unui joc de puzzle alunecat în Unity
Cum să faci un joc inspirat de Flappy Bird în Unity
Zombi de la fermă | Crearea jocului platformer 2D în Unity