Unity’de Küçük Harita Yapımı (Minimap)

Unity’de Küçük Harita Yapımı (Minimap)

12 Şubat 2020 0 Yazar: Ahmet Güler

Merhaba, bir önceki dersimizde Unity‘de hareketli bir platform oluşturmuştuk.Bu platform iki nokta arasında hareket ediyordu.Değişkenlerin aldıkları değerleri farklılaştırıp, bu platformun hareketini kontrol edebiliyorduk.Bugünkü dersimizde ise, Unity ile küçük harita yani minimap yapacağız.Daha önceki bir yazımda Unity ile radar istemi yapmıştık.O projede, sadece hedeflerin yerlerini ve uzaklıklarını görebiliyorduk.Bu projede ise, haritayı görebileceğiz.Şimdi yeni bir proje oluşturalım ve dersimize başlayalım.

Sahnemizi hazır duruma getirelim.

İlk olarak projemize uygun bir senaryo oluşturdum.Küçük bir harita ekranımız olacağı için, etrafta olabildiğince farklı nesnelerin olması gerekiyor.Böylelikle daha güzel bir sonuç ile karşılaşabiliriz.İşte bu yüzden internette bulabileceğiniz bir şehir modelini projemize dahil ediyoruz.Ben bir kasaba modelini tercih ettim.Daha sonra sahnemize bir Cube nesnesi ekliyoruz.Bu nesne, bizim haritada dolaşacağımız oyuncumuzu oluşturacak.Bu nesneye bir Rigidbody bileşeni ekliyoruz.

Daha sonra bu nesnemize yeni bir etiket oluşturuyoruz.Şimdi UI yani küçük haritamız için arayüzü yapmaya başlayalım.İlk olarak yeni bir Canvas oluşturuyoruz.Unity‘de arayüzün kullanımına eski yazılarda değinmiştim.O yüzden hızlı geçiyorum.Sonra bu nesnemize sağ tıklayarak yeni bir Image nesnesi oluşturuyoruz.Bu nesne, küçük haritamızın çerçevesini oluşturacak.Daha sonra internetten bulduğumuz bir çerçeve görselini projemize dahil ediyoruz.Inspector penceresinde bulunan “Texture Type” bölümünden, Sprite seçimini yapıyoruz ve kaydediyoruz.

Şimdi Hierarchy penceresinde bulunan Image nesnemize geri dönüyoruz.Source Image bölümüne, bu çerçeve resmini sürükleyip bırakıyoruz.Artık küçük haritamız için çerçevemiz hazır.Şimdi Canvas içerisine, RawImage nesnemizi ekliyoruz.Hatırlarsanız bu nesneyi, ayna yapımında kullanmıştık.Buradaki görevi de, aynı olacak.Şimdi bu nesnemizi tam çerçevemizin ortasına gelecek şekilde ayarlıyoruz.Bu ayarlamayı Inspector penceresinde ki, Rect Transform bölümünden yapabilirsiniz.Evet şimdi diğer aşamaya geçebiliriz.

Unity-Küçük-Harita-Yapımı-Make-Mini-Map-Render-Texture

Küçük haritamız için kamera oluşturalım.

Evet şu anda, çerçevemizin içerisini beyaz olarak görüyoruz.Birazdan burada haritamızın tepeden görüntüsünü göreceğiz.Bunu yapmadan önce Project penceresinde, yeni bir Render Texture oluşturuyoruz.Bu nesnemize bir isim veriyoruz.Şimdi Hierarchy penceresinde yeni bir Camera nesnesi oluşturuyoruz.Bu ikinci kamerayı minimap olarak kullanacağız.Bu kameramızın x eksenindeki açısını “90” derece yapıyoruz.Böylece haritamıza tam tepesinden bakacak.

Daha sonra Camera bileşenimizin “Projection” ayarını, Orthographic moduna getiriyoruz.Kısaca üç boyutlu bir görseli iki boyutlu olarak gösteriyoruz.Bu ayarın hemen altında bulunan Size ayarını ise, istediğimiz bir değeri veriyoruz.Bu ayar kameramızın boyutunu ayarlayarak, haritamızı yakınlaştırıp uzaklaştırıyor.Şimdi az önce oluşturduğumuz Render Texture nesnemizi, ikinci kameramızın Target Texture bölümüne sürükleyip bırakıyoruz.

Game penceremize bakarsak halen beyaz olduğunu göreceğiz.Kameramızın görüntüsü almak için, Canvas içerisinde bulunan RawImage elemanına da, bu nesneyi eklememiz gerekiyor.Inspector penceresinde Texture bölümüne az önce yaptığımız gibi, Render Texture nesnemizi sürükleyip bırakıyoruz.Artık sahnemiz ve küçük haritamız hazır duruma geldi.Sahnemizin son hali bu şekildedir.

Unity-Küçük-Harita-Yapımı-Make-Mini-Map-Render-Texture

Oyuncumuzu takip edecek kodlarımızı yazalım.

Şimdi yapmamız gereken tek bir şey kaldı.İkinci kameramızın oyuncu nesnemizi takip etmesi gerekiyor ki, haritamızı sürekli güncel tutalım.Bunun için iki adet C# Script dosyası oluşturuyoruz.Bir tanesini kameramızın takibi için, diğerini ise oyuncumuzu hareket ettirmek için kullanacağız.İlk script dosyamızı editör ile açarak kod yazmaya başlayalım.

public Transform TakipEdilecekNesne;

İlk olarak Tranform değişkenimizi oluşturuyoruz.Bu değişkende oyuncu nesnemizin pozisyon değerlerini tutatacağız.Böylelikle kameramızın pozisyonunu sürekli güncel tutabileceğiz.

TakipEdilecekNesne = GameObject.FindWithTag ("oyuncu").transform;

Daha sonra start() fonksiyonunun içerisine bu kodu yazıyoruz.Burada değişkenimize, etiketi “oyuncu” olan nesnenin pozisyon değerlerini eşitliyoruz.

Vector3 yeniPozisyon = TakipEdilecekNesne.position;
yeniPozisyon.y = transform.position.y;
transform.position = yeniPozisyon;

Şimdi bir LateUpdate() fonksiyonu oluşturuyoruz.Burada update() fonksiyonunu kullanmamamızın nedenini açıklayayım.Kamera gibi hareketli nesneler için, önce nesnenin hareketini tamamlamasını bekleyip daha sonra kamerayı hareket ettirmek daha doğru bir yol oluyor.İlk satıra bakacak olursak, yeni bir Vector3 değişkeni oluşturuyoruz.Bu değişkenimize, hareket edecek nesnenin pozisyon değerlerini kaydediyoruz.

İkinci satırda, oluşturduğumuz değişkenimizin y eksenini, script dosyasını ekleyeceğimiz yani ikinci kameramızın y eksenindeki değer ile eşitliyoruz.Bunu yaparak, kameramızın y eksenini değiştirmemiş oluyoruz.Son satırda ise, ikinci kameramızın pozisyon değerlerini, yeni değişkenimiz üzerinde bulunan değerlere eşitliyoruz.Evet bu script dosyamız tamamlanmış oldu.

Oyuncumuzu hareket ettirmek için kodlarımızı yazalım.

Şimdi ikinci script dosyamızı açalım ve kodlarımızı yazmaya başlayalım.Bu dosyada dediğim gibi, nesnemizi hareket ettirecek kodları yazacağız.

public float OyuncuHizi;

Öncelikle float türünde bir değişken oluşturuyoruz.Bu değişken ile oyuncumuzun hızını kontrol edebileceğiz.

OyuncuHizi = 1f;

Daha sonra start() fonksiyonumuzun içeirsine bu kodu yazıyoruz.Az önce oluşturduğumuz değişkene, başlangıç için bir değer veriyoruz.

transform.Translate (Input.GetAxis("Vertical")*Vector3.forward*OyuncuHizi*Time.deltaTime); 
transform.Translate (Input.GetAxis("Horizontal")*Vector3.right*OyuncuHizi*Time.deltaTime);

Şimdi update() fonksiyonumuzun içerisine bu kodları yazıyoruz.Oyuncu nesnemizin hareketi için, Translate fonksiyonundan yararlanıyoruz.İlk satırda, dikey eksende bir hareket sağlanırken, ikinci satırda yatay eksende bir hareket sağlanıyor.Bu fonksiyonun daha önceki yazılarımda nasıl çalıştığını detaylı olarak değinmiştim.Bu yüzden konumuzdan uzaklaşmamak için kısa geçiyorum.Evet bu script dosyamızda hazır duruma geldi.

Evet projemizi tamamlamış bulunmaktayız.Son olarak oluşturduğumuz bu iki script dosyasını nesnelerimize ekliyoruz.İlk script dosyamızı, küçük haritamız için oluşturduğumuz ikinci kameramızın üzerine sürükleyip bırakıyoruz.Diğer script dosyamızı ise, oyuncu nesnemizin üzerine sürükleyip bırakıyoruz.Artık nasıl çalıştığını deneyebiliriz.Evet, bir sonraki yazıda görüşmek üzere…

Unity-Küçük-Harita-Yapımı-Make-Mini-Map-Render-Texture