Minigame in eenheid | CUBEvermijd

De CUBEavoid is een minigame gemaakt in Unity. Broncode en hieronder ingesteld.

Het doel is om de kleine kubus te vermijden door de grote kubus opnieuw te schalen met de muiscursor.

Stap 1: Maak alle benodigde scripts

  • Maak een nieuw script, noem het SC_PlayerCube.cs, verwijder alles eruit en plak de onderstaande code erin:

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;
        }
    }
}
  • Maak een nieuw script, noem het SC_EnemyCube.cs, verwijder alles eruit en plak de onderstaande code erin:

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

Stap 2: Installatie

Nadat de twee hoofdscripts zijn gemaakt, gaan we verder met het instellen van het spel:

  • Maak een nieuwe scène als je dat nog niet hebt gedaan
  • Selecteer Hoofdcamera, wijzig de positie in (0, 10, 0) en de rotatie in (90, 0, 0)
  • Wijzig de eigenschappen van de cameracomponenten van de hoofdcamera: Vlaggen wissen in 'Solid Color', Achtergrond in 'white', Projectie in 'Orthographic' en Grootte in '10'

  • Maak een nieuwe kubus (Spelobject -> 3D-object -> Kubus) en geef deze een naam "Player"
  • Wijzig de positie van "Player" in (0, 0, 0) en schaal naar (10, 10, 10)
  • Maak nieuw materiaal aan (klik met de rechtermuisknop op Projectmap -> Maken -> Materiaal) en geef het een naam "PlayerMaterial"
  • Wijzig de "PlayerMaterial" Shader in Unlit/Color en verander de kleur in zwart

  • Wijs "PlayerMaterial" toe aan de "Player" kubus
  • Dupliceer de kubus "Player" en hernoem deze naar "Enemy"
  • Wijzig de schaal "Enemy" in (0,7, 0,7, 0,7)
  • Dupliceer "PlayerMaterial" en hernoem het naar "EnemyMaterial"
  • Wijzig de hexadecimale kleur van "EnemyMaterial" in 157EFB
  • Wijs ten slotte "EnemyMaterial" toe aan "Enemy" Kubus

KUBUSVermijd scèneweergave

Laten we een eenvoudige gebruikersinterface maken:

  • Maak een nieuwe UI-tekst (Game Object -> UI -> Tekst), hernoem deze naar "GameOverText"
  • Zorg ervoor dat de RectTransform-uitlijning voor de nieuwe tekst is ingesteld op Middle Center
  • Stel Tekst Pos X en Pos Y in op 0
  • Wijzig de hoogte naar 100
  • Voor de component Tekst stelt u de onderstaande tekst in (zorg ervoor dat de Rich Text-eigenschap is aangevinkt):
Game Over
<size=15>Click to Try Again</size>
  • Stel de lettergrootte in op 25
  • Stel Tekstuitlijning in op Midden midden
  • Stel de tekstkleur in op Rood

CUBEVermijd Game Over Text

Laten we ten slotte de scripts toewijzen:

  • Selecteer de kubus "Player" en wijs het SC_PlayerCube-script eraan toe
  • Wijs de kubus "Enemy" toe aan de vijandelijke variabele
  • Wijs "GameOverText" toe aan de Game Over Text-variabele

  • Selecteer de kubus "Enemy" en wijs het SC_EnemyCube-script eraan toe

Wanneer u nu op Afspelen drukt, zou de blauwe kubus over het scherm moeten bewegen, wat u moet vermijden door het formaat van de zwarte kubus te wijzigen met behulp van de muiscursor.

Voel je vrij om dit spel op welke manier dan ook te verbeteren.

Voorgestelde artikelen
Minigame in eenheid | Flappy Cube
Eindeloze Runner-tutorial voor Unity
Tutorial voor Match-3-puzzelspel in Unity
Een glijdend puzzelspel maken in eenheid
Hoe je een slangenspel in eenheid maakt
Een 2D Brick Breaker-spel maken in Unity
Hoe je in Unity een op Flappy Bird geïnspireerd spel maakt