Minispel i Unity | CUBEundvik

CUBEavoid är ett minispel gjort i Unity. Källkod och ställ in nedan.

Målet är att undvika den lilla kuben genom att skala om den stora kuben med muspekaren.

Steg 1: Skapa alla nödvändiga skript

  • Skapa ett nytt skript, kalla det SC_PlayerCube.cs, ta bort allt från det och klistra in koden nedan i det:

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;
        }
    }
}
  • Skapa ett nytt skript, kalla det SC_EnemyCube.cs, ta bort allt från det och klistra in koden nedan i det:

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

Steg 2: Installation

När de två huvudskripten har skapats, låt oss fortsätta med att ställa in spelet:

  • Skapa en ny scen om du inte har gjort det ännu
  • Välj Huvudkamera, ändra dess position till (0, 10, 0) och dess rotation till (90, 0, 0)
  • Ändra huvudkamerans kamerakomponentegenskaper: Rensa flaggor till 'Solid Color', bakgrund till 'white', projektion till 'Orthographic' och storlek till '10'

  • Skapa en ny kub (spelobjekt -> 3D-objekt -> kub) och namnge den "Player"
  • Ändra "Player"-positionen till (0, 0, 0) och skala till (10, 10, 10)
  • Skapa nytt material (högerklicka på projektmappen -> Skapa -> Material) och namnge det "PlayerMaterial"
  • Ändra "PlayerMaterial" Shader till Unlit/Color och ändra dess färg till svart

  • Tilldela "PlayerMaterial" till kuben "Player"
  • Duplicera kuben "Player" och byt namn på den till "Enemy"
  • Ändra "Enemy"-skalan till (0,7, 0,7, 0,7)
  • Duplicera "PlayerMaterial" och byt namn på den till "EnemyMaterial"
  • Ändra "EnemyMaterial" hexadecimal färg till 157EFB
  • Tilldela slutligen "EnemyMaterial" till "Enemy"-kuben

CUBEavoid Scen View

Låt oss skapa ett enkelt användargränssnitt:

  • Skapa ny UI-text (Spelobjekt -> UI -> Text), byt namn på den till "GameOverText"
  • Se till att RectTransform-justeringen för den nya texten är inställd på mitten
  • Ställ in Text Pos X och Pos Y till 0
  • Ändra höjd till 100
  • För textkomponenten anger du texten nedan (se till att egenskapen Rich Text är markerad):
Game Over
<size=15>Click to Try Again</size>
  • Ställ in teckenstorlek till 25
  • Ställ in textjustering på mitten
  • Ställ in textfärg på röd

CUBEavoid Game Over Text

Till sist, låt oss tilldela skripten:

  • Välj "Player"-kuben och tilldela SC_PlayerCube-skriptet till den
  • Tilldela kuben "Enemy" till Enemy-variabeln
  • Tilldela "GameOverText" till Game Over Text-variabeln

  • Välj kuben "Enemy" och tilldela SC_EnemyCube-skriptet till den

När du nu trycker på Play, bör den blå kuben börja röra sig över skärmen, vilket du måste undvika genom att ändra storlek på den svarta kuben med muspekaren.

Förbättra gärna detta spel på något sätt.

Föreslagna artiklar
Endless Runner Tutorial för Unity
Handledning för Match-3-pusselspel i Unity
Minispel i Unity | Flappy Cube
Skapa ett 2D Brick Breaker-spel i Unity
Skapa ett glidande pusselspel i Unity
Hur man gör ett Flappy Bird-inspirerat spel i Unity
Farm Zombies | Skapande av 2D-plattformsspel i Unity