Mini Game dalam Persatuan | HINDARI KUBUS

CUBEavoid adalah mini-game yang dibuat di Unity. Kode sumber, dan pengaturan di bawah.

Tujuannya adalah untuk menghindari kubus kecil dengan mengubah skala kubus besar dengan kursor mouse.

Langkah 1: Buat semua skrip yang diperlukan

  • Buat skrip baru, beri nama SC_PlayerCube.cs, hapus semuanya, dan tempelkan kode di bawah ini ke dalamnya:

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;
        }
    }
}
  • Buat skrip baru, beri nama SC_EnemyCube.cs, hapus semuanya, dan tempelkan kode di bawah ini ke dalamnya:

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

Langkah 2: Pengaturan

Setelah 2 script utama dibuat, mari kita lanjutkan ke pengaturan gamenya:

  • Buat Adegan baru jika Anda belum melakukannya
  • Pilih Kamera Utama, ubah posisinya menjadi (0, 10, 0) dan putarannya menjadi (90, 0, 0)
  • Ubah properti komponen Kamera Utama: Hapus Bendera menjadi 'Solid Color', Latar Belakang menjadi 'white', Proyeksi menjadi 'Orthographic', dan Ukuran menjadi '10'

  • Buat Kubus baru (Objek Game -> Objek 3D -> Kubus) dan beri nama "Player"
  • Ubah posisi "Player" menjadi (0, 0, 0) dan skala menjadi (10, 10, 10)
  • Buat Material baru (Klik kanan pada folder Project -> Create -> Material) dan beri nama "PlayerMaterial"
  • Ubah "PlayerMaterial" Shader menjadi Unlit/Color dan ubah warnanya menjadi hitam

  • Tetapkan "PlayerMaterial" ke kubus "Player"
  • Gandakan kubus "Player" dan ganti namanya menjadi "Enemy"
  • Ubah skala "Enemy" menjadi (0.7, 0.7, 0.7)
  • Gandakan "PlayerMaterial" dan ganti namanya menjadi "EnemyMaterial"
  • Ubah warna heksadesimal "EnemyMaterial" menjadi 157EFB
  • Terakhir, tetapkan "EnemyMaterial" ke "Enemy" Kubus

CUBEHindari Tampilan Adegan

Mari buat UI sederhana:

  • Buat Teks UI baru (Objek Game -> UI -> Teks), ganti namanya menjadi "GameOverText"
  • Pastikan perataan RectTransform untuk Teks baru diatur ke Tengah Tengah
  • Atur Teks Pos X dan Pos Y ke 0
  • Ubah Tinggi menjadi 100
  • Untuk komponen Teks, atur teks di bawah ini (pastikan properti Rich Text dicentang):
Game Over
<size=15>Click to Try Again</size>
  • Atur Ukuran Font menjadi 25
  • Atur Perataan Teks ke Tengah Tengah
  • Atur Warna Teks menjadi Merah

CUBEHindari Game Over Text

Terakhir, mari kita tetapkan skripnya:

  • Pilih kubus "Player" dan assign skrip SC_PlayerCube ke dalamnya
  • Tetapkan kubus "Enemy" ke variabel Musuh
  • Tetapkan "GameOverText" ke variabel Game Over Text

  • Pilih kubus "Enemy" dan assign skrip SC_EnemyCube ke dalamnya

Sekarang ketika menekan Mainkan, kubus biru akan mulai bergerak melintasi layar, yang harus Anda hindari dengan mengubah ukuran kubus hitam, menggunakan kursor mouse.

Jangan ragu untuk meningkatkan game ini dengan cara apa pun.

Artikel yang Disarankan
Mini Game dalam Persatuan | Kubus Flappy
Tutorial Pelari Tak Berujung untuk Unity
Tutorial Game Puzzle Mencocokkan-3 di Unity
Membuat Game Puzzle Geser dalam Unity
Zombi Pertanian | Pembuatan Game Platformer 2D dalam Unity
Membuat Game Pemecah Bata 2D di Unity
Cara Membuat Game Terinspirasi Flappy Bird di Unity