Unity3D İle Virtual Reality (VR) Uygulama Geliştirmek

Sanal Geçeklik Nedir (Virtual Reality Nedir)?

3D gozluk takarak ve bunun içinde cam mercekler sayesinde aktarılan görüntüyü hareketli veya hareketsiz ortamlar için VR ile gerçekçi üç boyutlu ortamları deneyimlemenizi sağlar. Eviniziden çıkmadan, zombileri vurabilir, bir roller coaster’a binebilir 360 derece videolar izlerken bir pilot olabilir veya ve bir gemi kaptanı gibi yerinizden rotanızı izleyebilir, dalgıçlık yaparak okyanusların derinliklerini keşfedebilir, VR ile geliştirilmiş üst düzey oyunlar oynayabilir mobil cihazınızdan uygulamalar indirip test edebilirsiniz, VR mimari yani binalar yapılmadan daha inşaat halindeyken sanal ortamda hazırlanmış VR ile evinizi gezebilir sorunlara bakabilir veya yenilikler ekletebilirsiniz, 360 derece küresel fotoğraflar çekerek dünyayı gezebilir, VR ile iş dünyanızdaki toplantılarınızı yapabilir ve katılabilirsiniz, verileri izlemek, modelleri görmek ve farklı bölgelerde çalışanlarınızı bir araya getirebileceksiniz böylelikle yerinizden kalkmadan evden her işinizi yönetebileceksiniz, VR ile eğitim alanlarıda gelişecek dünyanın en güzel sanat eseri tablolarını veya müzelerini oraya gitmeden izleyebilir, belkide dünyanın en iyi üniversitelerinin derslerine katılıp sınıfta izleyebilirsiniz, Ve önemli bir alan olan Savunma Sanayi Ordu VR ile personel kaybı olmadan zor görevleri yüzlerce kere yapmaları isteniyor askerlerden. Gidecekleri mekana daha ayak basmadan sanal mekanlarda oraları ezberliyorlar. Nereye döneceklerini nerede saklanacaklarını biliyorlar. Hangi senaryo gerçekleşir ve yanlış karar verirlerse öleceklerini kavrıyorlar. Kısacası savaş simülasyonları binlerce saatlik geleneksel eğitimden çok daha verimli diyebilirim. Çünkü gerçeklik duygusu aynı adrenalini salgılamanızı sağlıyor. Aynı panik kontrolünü ve takım çalışmasını yapmak zorunda kalıyorsunuz. Son olarak da bir doktor VR gözlük ile sanal ameliyathaneler içerisinde ameliyat ve test ortamları hazırlayabilir ve bunları öğrencilerine anlatabilir. Bugünlerde Dokunmak ve his yani hissetmek üzerinde çalışılıyor özel elbiseler tasarlanıp dokunma hissi vermesi için aynı zamanda gerçekci duymamız için 3d mikrofonlarla kayıt yapılıyor. Böylece kafanızı çevirişinize göre ses kaynağının yeri değişiyor. Mesela koku duyumuz için çok çeşitli kokulardan ana kokuları sentezleyebilen maske tipi VR cihazlar çoktan üretildi. VR gözlüğünüz ile uçuş testi yaparken kokuda var rüzgar seside. Vücudun düşme ve sallanma gibi hareketleri hissetmesi için aynı şekilde hareket eden makineler / simülatörler de geliştirilmeye devam ediyor. Gibi daha fazla projeler geliştirilmeye devam ediyor.

Tüm bu verdiğim örnekleri ve daha fazlasını mobil platformlar içinde geliştirebilir ve yayınlayabilirsiniz.

VR ile çok geniş bir dünya ve teknoloji bizleri bekliyor böylesi muhteşem ve her alanda ihtiyaç olan teknolojilere hızlıca adapte olup uygulamalar geliştirip projeler üreterek hem kendimizi geliştirebilir hem de katkıda bulunabilirsiniz. Bizlerde bu bölümde Unity ile VR uygulamlar nasıl yapılır ve nasıl bir geliştirme ortamı var detaylıca bunlara değineceğiz. Unity ile bir VR proje yapmak oldukça kolay.

Sanal Gerçeklik Gözlükleri

Samsung Galaxy Gear VR
 Geçtiğimiz yılın sonunda satışa çıkan Samsung’un sanal gerçeklik gözlüğü, sadece Galaxy Note 4 akıllı telefonla beraber kullanılabiliyor. Galaxy Gear VR için geliştirilen özel içerikler arasında Marvel kahramanlarının olması ise dikkat çekenler arasında. Bu modelin satış fiyatı ise 500 ile 600 TL arasında değişiyor.

Google Cardboard
 Tamamen kartondan yapılmış bir model olan Google Cardboard, 5 inçlik tüm akıllı telefonlarla uyumlu. Google’ın Cardboard’a özel geliştirdiği özel uygulamalar sayesinde YouTube videoları izlenebiliyor ve Google Haritalar servisi kullanılabiliyor. Daha birçok uygulamanın bulunduğu Cardboard’un satış fiyatı ise 25 TL civarında.

Oculus Rift
 Sanal gerçeklik konusunda en tecrübeli markalardan biri olan Oculus Rift, üzerindeki ekran sayesinde akıllı telefonlardan bağımsız olarak çalışıyor. Şu anda ikinci modeliyle geliştirilmeye devam eden bu gözlük şirketini kısa bir süre önce Facebook, 2 milyar dolara satın aldı. Oculus Rift satış fiyatları 1500 TL ile 2 bin TL arasında değişiyor.

LG VR for G3
 Akıllı telefon modeli G3 için bir sanal gerçeklik gözlüğü geliştiren şirket, özel uygulamalar da geliştirdi. Plastik bir kasaya sahip olan VR for G3’te özel bir ses sistemi de bulunuyor. VR for G3, şu anda LG G3 alanlara ücretsiz olarak veriliyor.

Sony TMZ-H2
 Sony, yeni modeli olan ‘TMZ-H2’yi kullanıcılara sundu. Diğer modellerden farklı olarak sanal gerçekliği 3D olarak sunan bu model, tasarımı, 330 gramlık hafifliği ve Sony’nin kendine ait içerikleriyle tüm dikkatleri üzerine çekiyor. Sony TMZ-H2, yaklaşık 3 bin TL’den satılıyor.

Microsoft HoloLens
 Yeni işletim sistemi Windows 10’u kullanıcılara sunan Microsoft, bir sürpriz yaparak artırılmış gerçeklik gözlüğünü de tanıttı. HoloLens adındaki bu gözlük, fiziksel dünyada 3 boyutlu sanal grafiklerle çalışılabilinmesini sağlayacak. Örneğin; video oyunlar gerçekte var olan bir masanın üzerinde oynanabilecek veya Windows 10 uygulamaları, evdeki duvarın üzerine yerleştirilebilinecek. Gözlüğün fiyatı henüz açıklanmadı.

İhtiyaçlarımız

Unity — En azından v4.5 tavsiye edilir. Yapacağımız uygulama için ben son versiyonunu kullanıyorum.

( https://store.unity.com/ )

Windows ya da Mac — Ben mac kullanıyorum fakat sizler Windows sistemini de tercih edebilirsiniz.

Cardboard SDK — Github reposundan indirebilirsiniz aşağıdaki linkten erişerek bizlerde örneğimizde kurulum işlemlerini yapacağız. Aynı zamanda sisteminizde Java ve android sdk olması gerek mobilde testlerimizi yapmamız için.

( https://github.com/googlevr/gvr-unity-sdk )

Java SE SDK — Bu Android SDK yüklemek için gerekli olacaktır.

( http://www.oracle.com/technetwork/java/javase/downloads/index.html )

Android SDK — Android Studio indirdiğinizde sdk otomatikman yüklü gelecek eğer sadece sdk kurmak istiyorsanız detaylarına değineceğiz.

( https://developer.android.com/studio/index.html#Other )

Google Cardboard Gözlüğü

SDK android cihazları desteklediği için iphone cihazlarda test işlemi yapamayacağız.

Bu bölümde sıfırdan başlayarak bir VR uygulaması nasıl yapılır temel olarak bunları inceleyeceğiz ve geliştireceğiz.

Android SDK Hazırlamak

Android mobil uygulaması oluşturmak için, sistemimizde Android SDK olması gerekir. Eğer hazırda kurulu ise kurulum işlemi yapmanıza gerek yok. Android SDK işlemine başlamak için, öncelikle sisteminizde yüklü Java SE SDK olması gerekir eğer varsa kurmanıza gerek yok. Fakat yoksa, yüklemeniz gerekir yüklemek için aşağıdaki linke giriş yaparak indirme işlemini gerçekleştirebilirsiniz.

indirme işleminden sonra kurulum işlemlerinde olduğu gibi next diyerek devam edebilir ve kuruluma geçebilirsiniz.

Android SDK Kurmak ve İndirmek

Android geliştirici yeni iseniz bu adımlar size kolay ve tanıdık gelecektir, öncelikle Android SDK’yı indirmek ve yüklemek gerekir. Android Studio sisteminizde kurulu ise Android SDK sisteminizde var demektir. Eğer sadece sdk indirmek istiyorsanız SDK Manager sisteminizde yüklü olması gerek ve dilediğiniz paketi bu sdk manager üzerinden indirebilirsiniz. İndirme seçenekleri için aşağıdaki linkten erişebilirsiniz.

Java kurulum dosyasını çalıştırın ve kurmaya başlayın eğer sisteminizde yüklü ise size uyarı verecektir.

Eğer SDK Manager üzerinden yükleme işlemine başlarsanız gerekli olan checkbox’ların hepsi seçili gelecektir ve rahatlıkla indirmeye başlayabilirsiniz.

Android SDK Tools — Listenin en üstünde olmalıdır.
 Android SDK Platform-tools — Bu SDK araçları sonra doğru olacaktır.
 Android SDK Build-tools — İhtiyacınız var ise indirebilirsiniz.

buradaki adımları eksiksiz yaptıktan sonra SDK artık sisteminizde kurulu olacaktır.

Unity ile Cardboard Projesi Oluşturmak

Öncelikle ihtiyacımız olan Google CardBoard SDK linke giderek sisteminize indirin.

https://developers.google.com/vr/unity/download

İndirme işleminden sonra Unity ile cardboard projesi oluşturabiliriz.

Create Project ve 3D seçeneğini seçerek projeyi oluşturabilir ve başlayabiliriz.

Hemen üst menülerden Assets > Import Package > Custom Package diyerek Cardboard SDK .unitypackage Unity içerisine alıyoruz.

Eğer Unity 5 kullanıyorsanız, Legacy yani eski klasörlere ihtiyacınız yok işaretleri kaldırabilirsiniz.

Cardboard adında yeni bir klasör oluşturup bu klasörün içinde farklı klasörleri ile geliştirmemize devam edeceğiz.

Cardboard klasörü içine Editor, Prefabs, Resources, Scripts klasörlerini ekleyerek devam ediyoruz.

Prefabs klasörü içerisinde bulunan ‘CardBoardMain.prefab’ bulup sol tarafta bulunan hiyerarşi bölümüne sürükleyip bırakın ve Y pozisyonunu 2 olarak değiştirin.

“CardboardMain” prefabını açın ve içinde “Main Camera” bulacaksınız. Bu Google cardboard ile bakarken VR sahneyi görüntülemek için uyum içinde çalışan iki stereoskopik tarzı kameralardır. Biz “Main Camera” nesnemize, bir “Pyshic raycaster” ekleyeceğiz. Bunu yapmak için Main Cameraya bir kez tıklayın ardından sağ tarafta bulunan Inspector panelinden ‘add Componente’ tıklıyoruz ve Pyshic raycaster ekliyoruz. Burada Raycast eklememizin sebebi nesenelerin bir biri ile ile etkileşimini anlamak ve onlara bir takım görevler vererek hareket eklemek.

Şimdi ise bir ikon ekleyeceğiz eklememizin sebebi kullanıcı belirlediğimiz objeyi hedef alması için. Silah oyunlarından da hatırlayacağınız gibi hedef almak için ekleyeceğiz. Bunun için ücretsiz olan unity asset store içerisinden indirip hemen entegre edeceğiniz bir paket var linke giderek indirebilirsiniz.
 
 https://www.assetstore.unity3d.com/en/#!/content/36440

CardboardMain içerisinde Head içerisine boş bir GameObject yani game objesi oluşturun ve ismine Target diyebilirsiniz.

Alt tarafta olan ikonumuzu sol üst tarafta görmüş olduğunuz boş olan Target objesine sürükleyip bırakıyoruz. Bu yaptığımızın sonucunda cardboardımızı taktığımızda hedefimizi bu ikon ile belirleyeceğiz ve hedefleyeceğiz.

Google Cardboard Event Tepkileri

Şimdi ise kullanacağımız grafikleri Unity içerisine import ederek başlayacağız ve bu grafikleri MagicLamp Adlı klasör içine koyacağız. Kullandığımız grafikleri indirmek için aşağıdaki linki kullanabilir ve direkt olarak Unity içerisine ekleyebilirsiniz.

https://www.assetstore.unity3d.com/en/#!/content/9249
 https://www.assetstore.unity3d.com/en/#!/content/4042

MagicLamp içerisinde bulunan MagicLamp görselimizi sol tarafta bulunan Hierarchy(Hiyerarşi) bölümüne sürükleyip bırakıyoruz.

SkySphere paketini import sırasında Example klasörünü seçili halden kaldırabilirsiniz.

MagicLamp görselimizi yani objemizi sahne üzerindeki boyutunu ve pozisyonunu ayarlayacağız konumları {x: 0, y: 1.5, z: 2} rotation özelliği {x: -90, y: 90, z: 0} Scale özelliği ise 0.5 olarak ayarlayabilirsiniz.

SkySphere_V1 klasörünün içinde Meshes klasörünün içinde Skyball_WithoutCap adlı objemizi yani meshes özelliğini taşıyan objemizi sürükleyip hiyerarşi bölümüne bırakıyoruz. Ve position özelliğini { x:0, y:0, z:0 } olarak ayarlıyoruz.

Şimdi ise Lamp objesi üzerinde Carboard SDK ile etkileşimi için, objemiz üzerinde bazı kodlar ekleyeceğiz. Ekleyeceğimiz kodlar Lamp objesine bir süre odaklanıp baktıktan sonra Lamp objesi içinden dumanlar çıkacak ve gökyüzü değişecek.

using UnityEngine;

using UnityEngine.EventSystems;

using System.Collections;

public class Lamp : MonoBehaviour {

public Renderer skybox;

public Material sky1;

public Material sky2;

public Material sky3;

public Material sky4;

private int currentSky = 0;

void Start () {

}

public void stareAtLamp() {

switch (currentSky) {

case 0:

skybox.material = sky2;

currentSky++;

break;

case 1:

skybox.material = sky3;

currentSky++;

break;

case 2:

skybox.material = sky4;

currentSky++;

break;

case 3:

skybox.material = sky1;

currentSky = 0;

break;

}

}

}

anlaşılması oldukça kolay kodlar yazdık yukarıda olan değişkenlerde materyallerimiz tanımladık ve bir önceki currentSky değerini tutmak için bir değişken tanımladık koşullar içinde ise değer atayıp arttırma işlemleri yapıyoruz. Bu kodun çalışması için objemiz seçili haldeyken sürükleyip objemizin üzerine bırakıyoruz.

bu adımları yaptıktan sonra Unity’nin en güzel özelliklerinden bir tanesi olan yukarıda tanımladığımız değişkenleri panel üzerinde göreceksiniz. Materials klasörü içinde With_Planet klasörü içinde olan objeleri resimdeki gibi sürükleyip bıraktığınızda o değişkenlere o objeleri atamış olursunuz.

Şimdi ise Lamp objemize eklememiz için bir componente ihtiyacımız var ‘Event Trigger’ yani cardboard ile bir süre bakıldığında tetiklenmesi istenen olayları yapacağız veya Unity içerisinde test yaparken Mouse click ile kontrol edebiliriz dolayısıyla bu component ‘Event Trigger’. Lamp objecmizi seçelim ardından Add Component diyelim çıkan diolag box içerisinde arama kutusuna Event Trigger yazarak hızlıca erişebilir ve ekleyebiliriz. Ekleme işlemini yaptıktan sonra Add New Event Type diyerek ‘PointerExit’ eventini seçiyoruz.

PointerExit eventini ekledikten sonra hemen altında artı + iknonu vard ve ona tıklıyoruz tıkladıktan sonra MagicLamb objemizi sürükleyip bırakıyoruz.

sağ tarafta görmüş olduğunuz gibi dropdown menüsü var ve ona bir kez tıklıyoruz ‘No Functions’ olarak gelecektir ve orada Lamb objemizi bulup startAtLamp() fonksiyonumuzu seçin.

Eklemiş olduğumuz Event Trigger için yani tetiklenmesi için Unity içerisinde olan UI sistemini kullanarak sahnemize ekleyeceğiz. MagicLamp objemize geliyoruz hiyerarşi bölümünden ve sağ tık yaparak menüleri açıyoruz UI altında Event Systemi seçiyoruz

ekledikten sonra dilerseniz “Standalone Input Module” kaldırabilirsiniz. Bizim için öenmli olan bir component iekleyip kullanacağız hiyerarşi bölümünde EventSysteme bir kez tıklıyoruz ve add compnent diyoruz arama kutusuna GazeInputModule yazarak hızlı bir şekilde bu cardboard sdk tarafından oluşturulan classı yani sınıfı ekliyoruz.

Hiyerarşi bölümünde Target objemizi sürükleyip Gaze Input Module compnentinde bulunan cursor inputuna bırakıyoruz. Böylelikle hedefimizi bu objemiz ile seçeceğiz.

Şimdi yapmamız gereken lamp objemize collider eklemek yani biz ne zaman ki lamp objemize bakarsak bir çarpıma olacak ve bu çarpışma sonucunda yaptırmak istediğimiz bir animasyon ve dumanların çıkması gibi aşamalar olacak. Bunu yapmak için Lamp objemizi seçili haldeyken Add Component diyoruz ve ardından arama kutusuna ‘Sphere Collider’ yazıyoruz ve ekliyoruz.

eklediğimiz Sphere Collider objemiz etrafında yeşil bir kaplama çıkarttı bu yeil kaplamada pozisyon ve yarıçapını ayarlayabilirizi sizler dilerseniz sağ taftaki koordinatlar içerisinden objemizin boyutu kadar ayarlama yapabilirsiniz.

Sahneden Main Camera objesini silin artık yeni kameramız Cardboard Main Cameramız.

Şimdi ise test işlemlerine geçeceğiz. Sahnemize basit bir zemin koyacağız 3D Object > Plane diyerek sahnemize Zemin eklenecektir. Poziyon ayarlamaları ise {x: 0, y: 0, z: 0}. Scale çzelliği ise {x: 2, y: 1, z: 2}

Uygulamamızın Test Aşaması

VR uygulaması yazdınız ve test yapacaksınız her defasında build edip mobil cihazınıza atarak test etmeniz biraz zahmetli ve vakit alabilir fakat bunu Unity içierisinde hızlıca VR görünümü ile test edebiliriz.

· Play butonuna bastıktan sonra alt tuşuna basılı tutarak sahnemizde etrafı izler gibi izleyebilir objeleri control edebilirsiniz.

· Aynı zamanda Play butonuna bastıktan sonra maximize diyerek büyük sahnede izleyebilirsiniz.

Lamp objemize baktığınızda çıkan ikon

Tıklama Eventi ve Partikül Sistemi Kullanımı

Cardboard için tıklama olayları eklemek için, yeni bir event handleri eklemek gerekir. İlk olarak, biz bu olayın aslında ne yapması gerektiğini kurgulayacağız. Benim için, lamba yeterli kadar zevkli ve sihirli değil. Kullanıcı lamba objesine tıkladığında her zaman particle systemi devreye girmesini isitiyorum. Bunu yapmak

İçin lambayı seçili hale getiriyoruz ardından ve “Add Component” diyoruz, ardından arama kutusuna “Particle” yazın. “Particle System” buluduktan sonra hızlı bir şekilde ekliyoruz. Ekledikten sonra sahne üzerinde beyaz parçacıkların uçtuğunu göreceksiniz.

Eklediğimiz Partikül sistemi içinde ayarlamalar yapacağız bu ayalarmaların içinde zamanlama renk ve pozisyonlar olacak.

resimdeki ayarlamaları yaptıktan sonra hızlı bir şekilde Lamp sınıfımız içerisine ufak bir rubLamp() adında fonksiyon ekleyeceğiz.

public void rubLamp() {
GetComponent<ParticleSystem>().Emit(10);
}

Sonrasında Lamp objemizi tekrar seçiyoruz ve ardından Event Trigger altında Pointer Click ekliyoruz hatırlayacağınız gibi yukarıda da bir kez daha eklemistik.

hemen ardından rubLamp() fonksiyonunu ekliyoruz.

Tekrar Play butonuna basıp test ettiğimizde Lamp objesinin üzerine gelip tıkladığımızda değişikliği göreceksiniz.

Android Cihazlar için Yayınlama Ayarları

Yapmış olduğumuz VR (Sanal Gerçeklik) uygulamasını android cihazlar için yayınlama ve ayarlamalarını yapmakta Unity ile oldukça kolay.

Shift + command + B veya File – Build Settings diyerek yayınlama ve ayarlamalar paneli açılacaktır

Solda görmüş olduğunuz gibi Player Settings butonuna basıyoruz ve hızlı bir şekilde ayalamalar karşımıza çıkıyor. Burada istediğimiz özellikleri seçebiliriz Fakat biz bu uygulama için “Default Orientation” özelliğini “Landscape Left” yapıyoruz. Sizler dilerseniz uygulama ikonuda ekleyebilirsiniz.

Other Settings ayarlamalarınıda aşağıda olan resimdeki gibi yaptıktan sonra Build diyerek APK çıktısını alabilirim.

çıkan apk’yı android cihazınıa atarak ve ardından cardboard gözlüğünüze cihazınızı takarak test edebilirsiniz.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.