Minispiel in Unity | WÜRFELvermeiden

Das CUBEavoid ist ein Minispiel, das in Unity erstellt wurde. Quellcode und Einrichtung unten.

Das Ziel besteht darin, dem kleinen Würfel auszuweichen, indem man den großen Würfel mit dem Mauszeiger neu skaliert.

Schritt 1: Erstellen Sie alle erforderlichen Skripte

  • Erstellen ein neues Skript, nennen Sie es SC_PlayerCube.cs, entfernen Sie alles daraus und fügen Sie den folgenden Code ein:

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;
        }
    }
}
  • Erstellen ein neues Skript, nennen Sie es SC_EnemyCube.cs, entfernen Sie alles daraus und fügen Sie den folgenden Code ein:

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

Schritt 2: Einrichtung

Nachdem die beiden Hauptskripte erstellt wurden, fahren wir mit der Einrichtung des Spiels fort:

  • Erstellen Sie eine neue Szene, falls Sie dies noch nicht getan haben
  • Wählen Sie Hauptkamera, ändern Sie ihre Position auf (0, 10, 0) und ihre Drehung auf (90, 0, 0).
  • Ändern Sie die Kamerakomponenteneigenschaften der Hauptkamera: Markierungen löschen auf 'Solid Color', Hintergrund auf 'white', Projektion auf 'Orthographic' und Größe auf '10'

  • Erstellen Sie einen neuen Würfel (Spielobjekt -> 3D-Objekt -> Würfel) und benennen Sie ihn "Player"
  • Ändern Sie die Position "Player" in (0, 0, 0) und skalieren Sie sie auf (10, 10, 10).
  • Erstellen Sie ein neues Material (klicken Sie mit der rechten Maustaste auf den Projektordner -> Erstellen -> Material) und benennen Sie es "PlayerMaterial"
  • Ändern Sie den "PlayerMaterial" Shader in „Unlit/Color“ und ändern Sie seine Farbe in Schwarz

  • Weisen Sie "PlayerMaterial" dem Würfel "Player" zu
  • Duplizieren Sie den "Player"-Würfel und benennen Sie ihn in um "Enemy"
  • Ändern Sie die "Enemy"-Skala in (0,7, 0,7, 0,7)
  • Duplizieren Sie "PlayerMaterial" und benennen Sie es in um "EnemyMaterial"
  • Ändern Sie die hexadezimale Farbe "EnemyMaterial" in 157EFB
  • Zuletzt weisen Sie "EnemyMaterial" dem Würfel "Enemy" zu

Vermeiden Sie die Szenenansicht

Lassen Sie uns eine einfache Benutzeroberfläche erstellen:

  • Erstellen Sie einen neuen UI-Text (Spielobjekt -> UI -> Text) und benennen Sie ihn in um "GameOverText"
  • Stellen Sie sicher, dass die RectTransform-Ausrichtung für den neuen Text auf „Mitte Mitte“ eingestellt ist
  • Setzen Sie Text Pos X und Pos Y auf 0
  • Ändern Sie die Höhe auf 100
  • Legen Sie für die Textkomponente den folgenden Text fest (stellen Sie sicher, dass die Rich-Text-Eigenschaft aktiviert ist):
Game Over
<size=15>Click to Try Again</size>
  • Stellen Sie die Schriftgröße auf 25 ein
  • Stellen Sie die Textausrichtung auf Mitte Mitte ein
  • Stellen Sie die Textfarbe auf Rot ein

CUBE Vermeiden Sie Game Over Text

Zuletzt weisen wir die Skripte zu:

  • Wählen Sie den Würfel "Player" und weisen ihm das Skript SC_PlayerCube zu
  • Weisen Sie den "Enemy"-Würfel der Enemy-Variablen zu
  • Weisen Sie "GameOverText" der Game Over Text-Variable zu

  • Wählen Sie den Würfel "Enemy" und weisen ihm das Skript SC_EnemyCube zu

Wenn Sie nun „Play“ drücken, sollte sich der blaue Würfel über den Bildschirm bewegen. Dies müssen Sie vermeiden, indem Sie die Größe des schwarzen Würfels mit dem Mauszeiger ändern.

Fühlen Sie sich frei, dieses Spiel in irgendeiner Weise zu verbessern.

Empfohlene Artikel
Endless Runner-Tutorial für Unity
Tutorial für das Match-3-Puzzlespiel in Unity
Minispiel in Unity | Flappy Cube
Erstellen eines 2D-Brick-Breaker-Spiels in Unity
Erstellen eines Schiebepuzzlespiels in Unity
So erstellen Sie ein von Flappy Bird inspiriertes Spiel in Unity
Farm-Zombies | Erstellung eines 2D-Plattformspiels in Unity