Unity'de Mini Oyun | CUBEkaçının

CUBEavoid Unity ile yapılmış bir mini oyundur. Kaynak kodunu ve aşağıda kurulumunu yapın.

Amaç, büyük küpü fare imleciyle yeniden ölçeklendirerek küçük küpten kaçınmaktır.

Adım 1: Gerekli tüm komut dosyalarını oluşturun

  • yeni bir komut dosyası oluşturun, buna SC_PlayerCube.cs adını verin, içindeki her şeyi kaldırın ve aşağıdaki kodu içine yapıştırın:

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;
        }
    }
}
  • yeni bir komut dosyası oluşturun, onu SC_EnemyCube.cs olarak adlandırın, içindeki her şeyi kaldırın ve aşağıdaki kodu içine yapıştırın:

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

Adım 2: Kurulum

2 ana script oluşturulduktan sonra oyunun kurulumuna geçelim:

  • Henüz yapmadıysanız yeni bir Sahne oluşturun
  • Ana Kamerayı seçin, konumunu (0, 10, 0) ve dönüşünü (90, 0, 0) olarak değiştirin
  • Ana Kameranın Kamera bileşeni özelliklerini değiştirin: Bayrakları Temizle 'Solid Color' olarak, Arka Plan olarak 'white' olarak, Projeksiyon olarak 'Orthographic' olarak ve Boyut olarak '10'

  • Yeni Küp oluşturun (Oyun Nesnesi -> 3B Nesne -> Küp) ve adını verin "Player"
  • "Player" konumunu (0, 0, 0) olarak değiştirin ve (10, 10, 10) olarak ölçeklendirin
  • Yeni Malzeme oluşturun (Proje klasörüne sağ tıklayın -> Oluştur -> Malzeme) ve adlandırın "PlayerMaterial"
  • "PlayerMaterial" Shader öğesini Işıksız/Renkli olarak değiştirin ve rengini siyah olarak değiştirin

  • "PlayerMaterial"'i "Player" küpüne atayın
  • "Player" küpünü çoğaltın ve yeniden adlandırın "Enemy"
  • "Enemy" ölçeğini (0,7, 0,7, 0,7) olarak değiştirin
  • "PlayerMaterial" dosyasını kopyalayın ve yeniden adlandırın "EnemyMaterial"
  • "EnemyMaterial" onaltılık rengini 157EFB olarak değiştirin
  • Son olarak "EnemyMaterial"'i "Enemy" Cube'a atayın

CUBESahne Görünümünden Kaçının

Basit bir kullanıcı arayüzü oluşturalım:

  • Yeni Kullanıcı Arayüzü Metni oluşturun (Oyun Nesnesi -> Kullanıcı Arayüzü -> Metin), onu şu şekilde yeniden adlandırın: "GameOverText"
  • Yeni Metin için RectTransform hizalamasının Orta Orta olarak ayarlandığından emin olun
  • Metin Poz X ve Poz Y'yi 0'a ayarlayın
  • Yüksekliği 100 olarak değiştirin
  • Metin bileşeni için aşağıdaki metni ayarlayın (Zengin Metin özelliğinin işaretli olduğundan emin olun):
Game Over
<size=15>Click to Try Again</size>
  • Yazı Tipi Boyutunu 25'e Ayarla
  • Metin Hizalamasını Orta Ortaya Ayarla
  • Metin Rengini Kırmızı Olarak Ayarla

CUBE Metin Üzerinden Oyundan Kaçının

Son olarak scriptleri atayalım:

  • "Player" küpünü seçin ve buna SC_PlayerCube komut dosyasını atayın
  • "Enemy" küpünü Düşman değişkenine atayın
  • Game Over Text değişkenine "GameOverText" atayın

  • "Enemy" küpünü seçin ve buna SC_EnemyCube komut dosyasını atayın

Artık Oynat'a bastığınızda mavi küp ekran boyunca hareket etmeye başlamalıdır; fare imlecini kullanarak siyah küpü yeniden boyutlandırarak bundan kaçınmanız gerekir.

Bu oyunu herhangi bir şekilde geliştirmekten çekinmeyin.

Önerilen Makaleler
Unity'de Mini Oyun | Flappy Küp
Unity için Sonsuz Koşucu Eğitimi
Unity'de 3'lü Eşleştirme Bulmaca Oyunu Eğitimi
Unity'de 2D Tuğla Kırıcı Oyunu Oluşturma
Unity'de Kayan Bulmaca Oyunu Oluşturma
Unity'de Flappy Bird'den Esinlenen Bir Oyun Nasıl Yapılır
Çiftlik Zombileri | Unity'de 2D Platform Oyununun Yapımı