Yıllar önce Pascal programlama dili ile matematik arasındaki yakınlık beni kodlama öğrenmeye sevk etmişti. Bu zamandan beri eğitimim ve kariyerimin dışındaki boş zamanlarımda kendimi programlama konusunda geliştirmeye devam ettim. Doktora eğitimim süresince ise belirlemiş olduğu tez konusu sayesinde artık kariyerimin içerisine de kodlamayı dahil etme fırsatım oldu. Doktora tez çalışmamda, ulusal alanda eksikliğini görmüş olduğum okul matematiğine yönelik bir artırılmış gerçeklik uygulamasını en başından tasarlamaya yöneldim ve Uzamsal-AR adını verdiğim basit bir artırılmış gerçeklik uygulamasını tasarladım. Ama ortada bir problem vardı…

Artırılmış gerçeklik temelli bir uygulama oluşturabilmek için (2014-2017 yılları arası için geçerli) temel programlama dillerinden birine hakim olmanız ve kodlama işinin içine girip bir yazılımı sıfırdan oluşturmanız gerekmekteydi. Gerçi artık günümüzde Assemblr, Eyejack, XRplus ve VisionAR gibi platformlarla bir kaç fare tıklamasıyla basit bir arayüz oluşturmanız da mümkün. Ancak hala etkileşimli bir yazılım yapmak istiyorsanız temel kodlama sizin için kaçınılmaz olacaktır. Her ne kadar kodlamaya uzun süredir bir merakım ve ilgim olsa da programlı bir şekilde kodlama eğitimi almadığım için kendimi özellikle artırılmış gerçekliği gerçekleştirebilecek kadar kodlama bilgisiyle donatmam gerekmekteydi. Bu amaçla yaptığım taramalarda başlangıç için en basit gördüğüm Unity 3D oyun motorunu kendime temel olarak alarak tez çalışmamda tasarlamak istediğim yazılıma yöneldim. Ancak Unity 3D yalnızca C# kodlama dilini desteklemektedir. Her ne kadar öğrenmesi kolay bir dil olsa da sayfalarca kod yazmak, hele ki bu konuda programlı bir eğitiminiz yoksa, gerçekten işkenceye dönüşebiliyor… Bu amaçla, artık günümüzde küçük yaşta çocukların bile kodlamayı sevmesini sağlayan Scratch ve Google Blockly gibi görsel kodlama araçlarını kendime referans alarak bir görsel kodlama aracı geliştirmenin hem kendim için hem de bu alana yönelmek isteyenler için güzel bir seçenek olduğunu düşünerek ManuBlock adını verdiğim görsel kodlama aracını, açık kaynak kodlu Google Blockly ve onun bir çatallanması olarak C#’a uyarlanan Vubbi Script’i tekrar çatallayarak Unity-C#-AR ilişkisini sağlayacak şekilde geliştirdim. Bu sayede artık ManuBlock anlık olarak bloklar ile oluşturulan C# scripti görmenizi ve incelemenizi sağlayacak hale gelmiş oldu.

ManuBlock görsel olarak blokların hareket ettirilmesi ve bir puzzle gibi algoritmik mantık çerçevesinde birleştirilmesi ile Unity’e özgü C# scriptlerini kolayca oluşturmaya yarayan bir araçtır. Kendi içerisinde temel Unity nesne, değişken, hareket ve matematik yapılanmasını koruyacak ve destekleyecek şekilde yorulmadan ve zorlanmadan C# scriptleri oluşturmanızı sağlar. ManuBlock’ta temel olarak şu bileşenler bulunmaktadır:

1. Olaylar:

C# ın vazgeçilmezi olan Start(), Update(), OnEnable(), vb. yöntemlerin hızlıca eklenebileceği temel olayları içermektedir.

2. Değişkenler:

ManuBlock üzerinden oluşturulan tüm değişkenlerin Set ve Get bloklarının yer aldığı bloklar dizisidir. Bir değişkeni değiştirmek ve değerini almak için kullanacağınız bloklar burada yer almaktadır.

3. Listeler:

Unity’de benzer amaçla aynı değişken türünü defalarca ve dinamik bir şekilde kullanmak isterseniz listeler oluşturmanız kaçınılmaz olacaktır. Listelere özgü bloklar ve for döngüleri burada yer almaktadır.

4. Mantık:

Kodlamanın olmazsa olmazı mantık sorguları, mantıksal değer atama blokları ve mantıksal durum denetleme blokları bu kategori altındadır.

5. Algıla:

Kullanıcı girdilerini takip edebilmek ve bu girdilere göre yanıtlar oluşturabilmek için kullanabileceğiniz klavye ve fare takip bloklarını içermektedir.

6. Temel Hareketler:

Üç boyutlu tasarımların olmazsa olmazı, nesnelerin analitik düzlemde hareketlerini kontrol eden bloklar, dönüşümlerini kontrol eden bloklar ve ölçeklerini her üç eksende değiştirebileceğiniz bloklar bu kategori altında yer almaktadır.

7. Matematik:

Matematik her yerde… Kodlama matematiksiz olmuyor hele bir matematikçiyseniz. Matematiksel sayısal ve vektörel işlemlerin büyük bir çoğunluğu içeren bloklar dizisidir.

8. Sayılar ve Vektörler:

Analitik düzlemde işlemler yapabilmek için hem sayılara hem de vektörlere ihtiyaç duyacaksınız. Temel sayı ve vektör atama blokları, matematiksel sabitler, nesnelerin boyut, konum ve dönüşüm vektörlerini alabileceğiniz bloklar burada yer almaktadır.

9. Nesneler:

Unity ile yapacağınız her bir uygulamada sizin ana öğenizi her zaman GameObject adı verilen nesneler oluşturacaktır. Nesnelere dair çoğu işlemi ve fonksiyonu barındıran temel bloklar bu kategori altındadır.

10. Metin:

Kullanıcı arayüzünde, oyun ekranında, değişkenlerin içerik değişiminde ya da yazılım loglarında ihtiyaç duyacağınız metin ile ilgili tüm bloklar bu kategoride bulunmaktadır.

11. Zaman:

While döngüleri, IEnumerator coroutineleri ve Unity içinde zamana veya yazılımın çalışmasına beklemeler / döngüler ekleyerek müdahale edebileceğiniz komutların büyük bir çoğunluğu buradaki bloklarda bulunmaktadır.

12. Dönüşümler:

Her ne kadar ManuBlock’u yalnızca vektörel dönüşümler içerecek şekilde ele almış olsam da basit Quaternion döüşümleri de yapabileceğiniz komutlar buradaki bloklara eklenmiştir.

13. Diğer:

Başka bir scriptten static değişken alma ve atama, sahne değişimleri, fare ve ekran koordinatları gibi diğer kategorilere tam olarak uymayan bazı ek bloklar işinizi kolaylaştırmak için buraya eklenmiştir. Bunun yanı sıra, eğer ManuBlock’ta olmayan bir işleve ihtiyaç duyarsanız kendinizin manuel olarak kod yazmasına imkan tanıyan kod bloğu da bulunmaktadır.

14. Kod Bloğu Ekle:

Sürekli tekrarladığınız kodları kümelendirebileceğiniz ya da yeni fonksiyonlar tanımlayabileceğiniz Method bloğunu burada parametrelerle ya da parametresiz buradan tanımlayabilirsiniz.

ManuBlock hala geliştirme aşamasındadır. Ancak bu haliyle bile C# yazmaya ihtiyaç duymamamı sağlayarak neredeyse tamamen unutmama sebep olacak kadar işi görür durumdadır. Eğer Unity ile kodlamaya meraklıysanız ve ManuBlock’un gelişimine destek olmak istiyorsanız iletişime geçebilir ve siz gönderilen ManuBlock-Demo ile testler yapabilirsiniz.