Bu yazıda towerdefence tarzı oyunlarda çok kullanılan bir olayı anlatacağım.Bu oyun türlerinde zemininiz üzerinde belirlediğiniz yerlere kulelerini yerleştirirsiniz ki düşmanlar kulenize ulaşamadan kuleleriniz tarafından yok edilsin.Bunu yapmak için fare ile tıkladığımız alanda bir menü oluşturup para kontrolü yaptıracağız. Paramız yeterliyse o alana kulemizi oluşturacak.

 

unity3d

unity3d

İlk olarak Gameobject>3dObject>cube yolunu izleyerek üzerinde kulemizin oluşacağı bir küp objesi oluşturuyoruz.Bu küp objesi taban olacak bunun üzerine tıklayıp menümüzü açtıracağız ve kulemizi üstüne kurduracağız.Daha sonra yine Gameobject>3dObject>cube yolunu izleyerek kulemiz olacak bir küp objesi oluşturuyoruz.Adınada kule diyelim.Project penceresine sağ tıklayıp create>prefab yolundan bir prefab oluşturuyoruz ve kule objemizi bu prefab üzerine atıyoruz.

 

Bir c# scripti oluşturuyoruz ve içine aşağıdaki kodları yapıştırıyoruz.Kodların açıklamaları yanlarında yazmaktadır.Kendi uygulamanıza uygularken takıldığınız bir yer olursa bu yazının altına yorum atabilirsini yardımcı olmaya çalışırım. Scriptimizi oluşturduktan sonra ilk başta kulemizin üstüne kurulacağı bir taban objesi yapmıştık. Scripti bunun üzerine atıyoruz. Attıktan sonra inspector penceresini kullanarak scriptimizin bizden istediği prefab değerine oluşturduğumuz kule prefabını atıyoruz.
 
Hazır hali ektedir.
İndir
 

using UnityEngine;
using System.Collections;

public class TowerSlot : MonoBehaviour {
    bool gui = false;

    // Tower (kule) prefabı
public GameObject towerPrefab;
 public int buildPrice = 1;
 public int gold = 3;
    void OnGUI() {
        if (gui) {
            // bu kule dikme noktasının ekrandaki yerini bul
            Vector3 v = Camera.main.WorldToScreenPoint(transform.position);

            // bu ekran koordinatını gui koordinatına çevir
            v = new Vector2(v.x, Screen.height - v.y);

            // kule dikmek için menü oluştur
            int width = 140;
            int height = 25;
            Rect r = new Rect(v.x - width / 2, v.y+10 - height / 2, width, height);
		    //parana bakar yetiyorsa yeşil yetmiyorsa kırmızı yazdırır
            GUI.contentColor = (gold >= buildPrice ? Color.green : Color.red);
			//menüdeki yazı
            GUI.Box(r, "Build " + towerPrefab.name + "(" + buildPrice + " gold)");

            // mouse butonu artık tıklanmıyorsa ve mouse menünün üzerindeyse kule oluştur
            if (Event.current.type == EventType.MouseUp &&
                r.Contains(Event.current.mousePosition)) {
                // oyuncunun elindeki altını azalt

                // kuleyi oluştur
                Instantiate(towerPrefab, transform.position, Quaternion.identity);

                // kule dikme noktasını kapat (deaktif et)
                gameObject.SetActive(false);
            }
        }
	}

 //fare ile tıklanıldığında işlem yapar
    public void OnMouseDown() {
        gui = true;
    }
 //fare tıkı kaldırıldığında işlemi bitirir
    public void OnMouseUp() {
        gui = false;
    }
}

About the author

Benan DİNDAR

Leave a Comment

Powered by themekiller.com anime4online.com animextoon.com