Kullanıcı ile etkileşim kurmak amacıyla kullanılan tüm nesneler UI komut grubu altında yer almaktadır. Burada bulunan nesneler vasıtasıyla kullanıcıdan bilgileri değişik şekillerde alıp gerekli işlemleri yaptıktan sonra sonucu kullanıcıya gösterebilirsiniz. Unity burada yer alan bir nesneyi Canvas nenesi içinde oluşturarak sahneye ekler. Bu uygulamamızda kullanıcıdan alınan iki sayısal bilgiyi toplayıp sonucu görüntülemek istiyoruz.
Unity Hub programını açalıım. Projects sekmesinden New komutuna basalım. Template bölümünden 2D özelliğini seçelim. Proje ismini Addition olarak belirleyelim. Create butonuna basarak projemizi oluşturalım.
Projemiz oluştuğunda altta yer alan Assets klasörü içindeki Scenes klasörünün içine girelim. Projemizde sadece bir sahne olduğu için burada SampleScene isminde sahne ismi yer almaktadır. Sahne seçiliyken farenin sağ tuşuna basalım ve sahne ismini ToplamaIslemi olarak belirleyelim. Sahne ismi değiştiği için ekranda görüntülenen diyalog penceresinde Reload komutunu tıklayalım. Artık sahnemizin adı ToplamaIslemi olarak belirlenmiş olacaktır.
Dikkat ettiyseniz sahnemizda yeni oluştuğu için içinde sadece Main Camera isminde kamera nesnemiz mevcut. Biz bu projede toplama işlemini önce kodlar yardımıyla Console ekranında gerçekleştireceğiz. Daha sonra sahnemize nesneler ekleyerek işlemi grafik ekranda yapmaya çalışacağız.
Ekranın altında Assets klasörü içine gelelim. Burada script dosyalarının saklanması için Scripts isminde bir klasör oluşturalım. Bu klasör içine gelelim. Farenin sağ tuşuna basalım. Ekrana gelen içerik menüsünden Create komut grubunu seçelim. Buradan C# Script komutunu seçelim. Unity NewBehaviourScript isminde bir c# dosyası ekler. Dosya seçiliyken farenin sağ tuşuna basalım. Ekrana gelen içerik menüsünden Rename komutunu seçelim. Dosyanın ismini AdderController olarak değiştirelim.
AdderController dosyasına farenin sol tuşuyla tıkladığınızda Edit / Preferences / External Tools penceresinde belirlediğiniz editör yardımıyla script dosyası açılacaktır. Ben Visual Studio 2019 olarak belirlediğim için bu editör açılacaktır.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AdderController : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
Daha önce c# kodu yazdıysanız ekrana gelen bu kodlar size aşina gelecektir. En üstte NameSpace olarak bilinen kütüphaneler yer almaktadır. Hemen altında ise bizim oluşturduğumuz class yer almaktadır. Onun altında ise Start() ve Update() isminde iki tane method yer almaktadır. Biz burada sadece Start() fonksiyonunu kullanacağımız için diğerlerini siliyoruz. Start fonksiyonu proje açıldığında bir defaya mahsus çalışacaktır. Kodlarımız aşağıdaki gibi olacaktır.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AdderController : MonoBehaviour
{
void Start()
{
}
}
Burada amacımız verilen iki sayının toplanmasını sağlamak olacak. Öncelikle toplama işlemi için gerekli değişkenleri tanımlayalım. Ben bu amaçla birinci sayı için a, ikinci sayı için b, toplama işleminin sonucu için c değişkenlerini int tipinde tanımlayacağım. Bu arada kodlarda yer alan NameSpacelerden kullanılmayanları sileceğim. Toplama işlemine ait kodlar aşağıdaki gibi olacaktır.
public class AdderController : MonoBehaviour
{
int a, b;
int c;
void Start()
{
a = 5;
b = 8;
c = a + b;
print("Toplama İşleminin Sonucu = " + c);
}
}
Artık kodları yazdığımıza göre script dosyasını Ctrl + S tuşuna basarak kaydedelim ve Unity ekranına geri dönelim. Elimizde toplama işlemini yapan kodlar mevcut. Ancak bu kodların yer aldığı AdderController dosyasını sahnemizde herhangi bir nesneyle ilişkilendirmediğimiz için kodlarımız çalışmayacaktır. Kodların çalışması için Hierarchy panelinde yer alan bir nesneye eklememiz gerekir. Hatırlarsanız projemizde sadece kameraya ait nesnemiz yer almaktadır. İsterseniz bu script dosyasını kamera nesnesine ekleyebilirsiniz. Ancak ben burada boş bir nesne ekleyeceğim. Bu nesneye script dosyasını dahil edeceğim. Hierarchy panelinde farenin sağ tuşuna basıyorum. Burada yer alan Create Empty komutunu seçiyorum. Bu komutu seçtiğimde panele GameObject isminde boş bir nesne eklenecektir.
Eklenen bu nesneye script dosyasını farklı yöntemlerle dahil edebilirsiniz. Ben burada script dosyasını sürükleyip Hierarchy panelinde yer alan GameObject nesnesi üzerine bırakıyorum. Bu işlemi yaptıktan sonra, nesne seçiliyken, Inspector panelinde script dosysının eklendiğini görürsünüz.
Projemizi kaydedelim. Daha sonra Console ekranına gelelim. Projeyi çalıştırdığımızda toplama işleminin sonucunun ekranda görüntülendiğini görürsünüz.
Şimdi de bu toplama işlemini grafik nesneler kullanarak yapmaya çalışalım. Unity diğer programlama dillerinde olduğu gibi grafik ekranda kullanıcı ile etkileşimi sağlamak amacıyla kullanılan nesneleri UI komut grubu altında saklamaktadır. Toplama işlemini gerçekleştirmek için Hierarchy paneline gerekli nesneleri ekleyelim. Bunun için bu panelde iken farenin sağ tuşuna basalım ve ekrana gelen menüden UI komut grubunu seçelim. Buradan sahnemize bir tane panel ekleyelim. Panelin ismini ToplaPanel olarak değiştirelim. Paneli ekranın ortasına alalım. Width değerini 640, Height değerini 480 yapalım. Color değerini ise 14320F yapalım.
Panel nesnesi seçiliyken UI komut grubundan InputField ekleyelim. Adını txtA olarak belirleyelim. Placeholder kutusuna Birinci Sayı... mesajını yazalım. Text boyutunu 30 yapalım.
Panel nesnesi seçiliyken UI komut grubundan bir tane daha InputField ekleyelim. Adını txtB olarak belirleyelim. Placeholder kutusuna İkinci Sayı... mesajını yazalım. Text boyutunu 30 yapalım.
Panel nesnesi seçiliyken UI komut grubundan Button ekleyelim. Adını btnTopla olarak belirleyelim. Text kutusuna Topla yazalım. Boyutunu 30 yapalım.
Panel nesnesi seçiliyken UI komut grubundan Text ekleyelim. Adını txtC olarak belirleyelim. Boyutunu 30 yapalım. Ekran görüntümüz aşağıdaki gibi olacaktır.
Burada btnTopla butonuna tıklandığında txtA ve txtB değerleri toplanacak, sonuç txtC nesnesinde görüntülenecektir. Butonun Click olayını değişik şekillerde kodlayabilirsiniz. btnTopla butonun seçelim. Inspector panelinde Button componentine gelelim. Burada aşağıya doğru geldiğinizde On Click() olayını görürsünüz. Başlangıçta herhangi bir tanımlı Click olayı olmadığı için içi boştur.
Hatırlarsanız script dosyamızda verilen sabit değerlerin print komutu ile toplamını bulmuştuk. Tekran aynı script dosyasına gelelim. Burada button nesnesi tarafında görülecek bir fonksiyon tanımlayalım. Ben Topla() isminde bir public fonksiyon tanımlayacağım.
using UnityEngine;
public class AdderController : MonoBehaviour
{
int a, b;
int c;
void Start()
{
a = 5;
b = 8;
c = a + b;
print("Toplama İşleminin Sonucu = " + c);
}
public void Topla()
{
}
}
Şimdi txtA ve txtB değerlerini script dosyasına alalım. Öncelikle UI kütüphanesini yukarıda tanımlamamız gerekiyor. Daha sonra burada tanımladığımız nesnelere sahnede yer alan nesnelerin değeri alınmalıdır. Alınan değerler değişkenlere aktarılarak toplama işlemi yapıldıktan sonra sonuç sahnede yer alan txtC nesnesine aktarılarak işlemler tamamlanmalıdır. Kodlarımızın tamamı aşağıda yer almaktadır.
using UnityEngine;
using UnityEngine.UI;
public class AdderController : MonoBehaviour
{
InputField txtA, txtB;
Text txtC;
int a, b;
int c;
void Start()
{
txtA = GameObject.Find("txtA").GetComponent<InputField>();
txtB = GameObject.Find("txtB").GetComponent<InputField>();
txtC = GameObject.Find("txtC").GetComponent<Text>();
}
public void Topla()
{
a = int.Parse(txtA.text);
b = int.Parse(txtB.text);
c = a + b;
txtC.text = a + " + " + b + " = " + c;
}
}
İsterseniz txtA, txtB, txtC nesnelerini public olarak tanımlayıp ilgili neneleri sahneden sürükleyip bırakabilirsiniz. Bu durumda kodlarınız aşağıdaki gibi olacaktır.
using UnityEngine;
using UnityEngine.UI;
public class AdderController : MonoBehaviour
{
[SerializeField]
InputField txtA, txtB;
public Text txtC;
int a, b;
int c;
public void Topla()
{
a = int.Parse(txtA.text);
b = int.Parse(txtB.text);
c = a + b;
txtC.text = a + " + " + b + " = " + c;
}
}
İsterseniz Butonun click olayını kodlarla oluşturup gerekli işlemleri burada gerçekleştirebilirsiniz. Buna göre kodlarımızı düzenleyelim.
using UnityEngine;
using UnityEngine.UI;
public class AdderController : MonoBehaviour
{
[SerializeField]
InputField txtA, txtB;
public Button btnTopla;
public Text txtC;
int a, b;
int c;
void Start()
{
Button btn = btnTopla.GetComponent<Button>();
btn.onClick.AddListener(Topla);
}
public void Topla()
{
a = int.Parse(txtA.text);
b = int.Parse(txtB.text);
c = a + b;
txtC.text = a + " + " + b + " = " + c;
}
}
Eğer kodlarınızı böyle düzenlerseniz btnTopla nesnesinde yapılan işlemleri silmeniz gerekir.
Şimdi de projemizi masaüstü bilgisayarlarda çalıştırmak için derleyip çalıştıralım. Bunun için File menüsünden Build And Run komutunu vermeniz gerekir. Bu komutu verdiğinizde program sizden paketin hangi klasörde oluşturulacağını sorar. Burada bir klasör belirlemelisiniz. Daha sonra Build diyerek işlemi tamamlayabilirsiniz. İşlem tamamlandığında proje tam ekran olarak açılacaktır. Ancak projeden çıkma komutu olmadığı için proje ekranda kalacaktır.
Programdan çıkma için çok değişik yöntemler vardır. Aşağıdaki kodları kullanarak ESC tuşuna basıldığında projeden çıkmayı sağlayabilirsiniz.
private void Update()
{
//if (Input.GetKeyDown(KeyCode.Escape))
// Application.Quit();
if (Input.GetKey("escape"))
{
Application.Quit();
}
}