Unity'nin AR Foundation'ı kullanarak AR oyunu geliştirin

1. Genel Bakış

ARCore, akıllı telefonlarda artırılmış gerçeklik deneyimleri oluşturmak için Google'ın kullandığı çerçevedir. Platformlar arası AR uygulamaları oluşturmak için Unity'nin AR Foundation'ını kullanabilirsiniz.

Ne oluşturacaksınız?

Bu codelab'de, AR Foundation kullanarak basit bir oyun oluşturacaksınız. Oyunun amacı, el cihazınızla kontrol ettiğiniz bir arabayı kullanarak paketleri toplamaktır.

Ancak bu durum tamamen sanal bir dünyada gerçekleşmez. Oyuncunun etrafındaki ortamı anlayan bir oyun oluşturarak yeni bir oyuncu deneyimi yaratmak için fiziksel atomları ve dijital bitleri karıştıracaksınız.

Bu codelab'in sonunda oyununuz şunları yapabilecek:

  • Gerçek dünyadaki düzlemleri algılayıp üzerlerine oyun alanı çizin.
  • Kameranın görüş açısından ışınlar yansıtın ve düzlemlerle kesişimleri tespit edin.
  • Oyununuza ekstra gerçekçilik katmak için gerçek dünyadaki ışıklandırma koşullarına tepki verin.

Neler öğreneceksiniz?

  • Unity'nin AR Foundation'ını kullanan bir proje oluşturma
  • Yeni planlara abone olmak için ARPlaneManager nasıl kullanılır?
  • Sanal geometriyle kesişimleri bulmak için Raycast simgesini kullanma
  • Sahnenizi aydınlatmak için ARLightEstimationData kullanma

İhtiyacınız olanlar

2. Geliştirme ortamınızı kurma

Bu adımda, Unity'nin AR Foundation'ı ile geliştirme için ortamınızı hazırlayacaksınız.

Cihazınızın AR ile uyumlu olduğundan emin olun.

Android cihazlardaki AR deneyimleri, ARCore destekli cihazlarda kullanılabilen ARCore tarafından desteklenir. Geliştirme cihazınızın AR ile uyumlu olduğundan emin olun. Alternatif olarak, doğru şekilde yapılandırılmış bir AR uyumlu Android Emulator örneği kullanabilirsiniz.

Cihazınızda USB üzerinden hata ayıklamayı ayarlama

Hata ayıklama uygulamalarını çalıştırmak için cihazınızda Geliştirici seçenekleri'ni etkinleştirmeniz gerekir. Henüz yapmadıysanız Geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirme ile ilgili Android belgelerine bakın.

Unity'yi (2020.3 LTS) yükleyin

İş istasyonunuza Unity 2020 LTS'yi yükleyin. Bu codelab'de, Unity'nin 2020.3 (LTS) sürümündeki kullanıcı arayüzünün ekran görüntüleri gösterilmektedir. Unity'nin diğer sürümleri de çalışabilir ancak ek adımlar gerekebilir. Burada gösterilen ekran görüntülerinden farklı görünebilir.

Yeni proje oluştur

Universal Render Pipeline şablonunu kullanarak yeni bir proje oluşturun. Dosyaya açıklayıcı bir ad ve uygun bir konum verip OLUŞTUR'u tıklayın.

Gerekli çerçeveleri yükleyin

Unity'nin AR Foundation'ı Unity Package Manager'da bulunabilir.

  1. Window > Package Manager'ı (Pencere > Paket Yöneticisi) tıklayarak açın.

  1. Bu pencerede, bu codelab'de kullanacağınız paketleri yükleyin. simgesini kullanarak bu çerçevelerin girişini genişleterek en son sürümlerini görüntüleyin. Bu çerçevelerin her birinin en son sürümünü yükleyin:
    • AR Foundation
    • ARCore XR Eklentisi

İşlemi tamamladığınızda Paket Yöneticiniz aşağıdaki gibi görünmelidir:

Başlangıç paketini yükleme

Bu codelab'de, AR Foundation'ı nasıl kullanacağınızı anlamaya odaklanabilmeniz için codelab'in bazı bölümlerini hızlandıracak prefabrikler ve komut dosyaları içeren bir başlangıç paketi sağladık.

  1. Assets > Import Package > Custom Package... (Öğeler > Paket İçe Aktar > Özel Paket...) seçeneğini açıp starter-package.unitypackage seçeneğini açarak başlangıç paketini yükleyin.
  2. Açılan pencerede her şeyin seçili olduğundan emin olun.
  3. İçe Aktar'ı tıklayın.

Derleme Ayarlarını Değiştirme

Uygulama Android'de çalışacağından derleme platformunu Android olarak değiştirin:

  1. File > Build Settings'i (Dosya > Derleme Ayarları) açın.
  2. Platform bölmesinde Android'i seçin.
  3. İsteğe bağlı olarak, uygulamanız çalışırken hata ayıklama bilgilerini korumak için Geliştirme Derlemesi ve Komut Dosyası Hata Ayıklama'yı etkinleştirin.
  4. Platformu Değiştir'i tıklayın.

Proje ayarlarını değiştirme

AR Foundation'ın, başlangıçta XR sistemlerini başlatmak için yapılandırılması gerekir.

  1. Düzenle > Proje Ayarları...'yı açın ve XR Eklenti Yönetimi bölümünü tıklayın.
  2. Android sekmesinde ARCore'u etkinleştirin.

  1. Sol bölmede Oynatıcı bölümünü tıklayın.
  2. Android sekmesindeki Diğer Ayarlar bölümünde, Grafik API'leri'nden Vulkan'ı kaldırın.

  1. ARCore kullanan ve AR gerektiren uygulamalar için minimum API düzeyi 24 olmalıdır. Aşağı kaydırıp Minimum API Düzeyi'ni bulun. Minimum API düzeyini 24 olarak ayarlayın.

Gerekli sahne öğelerini ekleyin

Evrensel Render Ardışık Düzeni şablonunda, bu eğitimde kullanmayacağınız bazı oyun nesneleri bulunur.

  1. SampleScene içindeki tüm oyun nesnelerini silin.

  1. AR Foundation nesneleri ekleyin. Hiyerarşi bölmesini sağ tıklayın. Bu menüyü kullanarak şunları ekleyebilirsiniz:
  • XR > AR Oturumu: Bu nesne, bir AR deneyiminin yaşam döngüsünü kontrol eder.
  • XR > AR Session Origin: Bu nesne, AR koordinatlarını Unity dünya koordinatlarına dönüştürür.
  • Işık > Yönlü Işık: Oyun nesnelerini aydınlatmak için bir ışık kaynağı sağlar.

Hiyerarşiniz aşağıdaki gibi görünmelidir:

  1. Hiyerarşide oluşturduğunuz AR Session Origin'i genişletin ve AR Camera nesnesini seçin. İnceleyicide etiketini MainCamera olarak değiştirin.

Oluşturma ayarlarını yapma

Unity'nin Universal Render Pipeline'ının AR Foundation ile uyumlu olması için bir değişiklik yapılması gerekir.

  1. Proje bölmesinde, ForwardRenderer öğesini bulmak için Öğeler > Ayarlar'a gidin.

  1. ForwardRenderer'ı seçin.
  2. İnceleyici bölmesinde, AR Background Renderer Feature eklemek için Add Renderer Feature'ı (Renderleyici özelliği ekle) kullanın. Bu bileşen, sahnenizde kamera feed'ini oluşturur.

Kurulumu doğrulama

  1. Cihazınızın prize takılı olduğundan ve ADB hata ayıklamasının açık olduğundan emin olun.
  2. File > Build And Run... (Dosya > Oluştur ve Çalıştır) seçeneğini tıklayın. Bu işlem, uygulamayı cihazınıza yükler ve yüklendikten sonra başlatır.
  3. Kamera feed'ini cihazınızın ekranında görmeniz gerekir.

Sonraki adımda, uygulamanıza işlev eklemeye başlayacaksınız.

3. Gerçek dünyada uçakları tespit etme

Temel sahne oluşturulduğuna göre artık oyunu geliştirmeye başlayabilirsiniz. Bu adımda, düzlemleri algılayıp sahneye çizeceksiniz.

ARPlaneManager bileşeni ekleme

Bir ARPlaneManager, ARPlane'ları algılar ve cihazın ortam anlayışı değiştiğinde oyun nesnelerini oluşturur, günceller ve kaldırır.

  1. Hiyerarşi bölmesini kullanarak boş bir GameObject oluşturun.
  2. Driving Surface Manager olarak yeniden adlandırın. Bu bileşen, oyuncu bir uçak seçene kadar uçakları gösterir.
  3. Yeni oyun nesnesini seçin. İnceleyici bölmesinde, AR Plane Manager eklemek için Add Component'ı (Bileşen Ekle) tıklayın.

  1. ARPlaneManager alanını Plane Prefab alanını ayarlayarak yapılandırın:
    1. None simgesinin yanındaki düğmeyi tıklayarak Select GameObject (Oyun Nesnesi Seç) penceresini açın.
    2. Öğeler sekmesini seçin ve Sürüş Yüzeyi Düzlemi'ni arayın.

Başlangıç paketindeki bu hazır öğe, düzlem dekorasyonu olarak kullanılacak pürüzlü bir zemin dokusu sağlar.

  1. Detection Mode değerini Horizontal olarak değiştirin. Bu ayar, ARPlaneManager'nın yalnızca yatay düzlemler sağlamasını yapılandırır. Bu düzlemler, araba kullanmak için idealdir.

ARRaycastManager bileşeni ekleme

ARRaycastManager, ışın dökümü işlevini kullanıma sunar. Sonraki adımda, kullanıcıya kontrolleri sağlamak için bu nesneyi kullanacağız.

  1. Hiyerarşi bölmesinde Driving Surface Manager adlı nesnenin seçili olduğundan emin olun.
  2. İnceleyici'de, oyun nesnenize ARRaycastManager bileşeni eklemek için Add Component'ı (Bileşen Ekle) tıklayın.

Bu bileşen için başka yapılandırma gerekmez.

DrivingSurfaceManager bileşeni ekleme

DrivingSurfaceManager, Başlangıç Paketindeki yardımcı bir komut dosyasıdır ve ARPlane seçilmesine olanak tanır. ARPlane seçildiğinde diğer tüm düzlemler gizlenir ve yeni düzlemler devre dışı bırakılır.

  1. Hiyerarşi bölmesinde Driving Surface Manager adlı nesnenin seçili olduğundan emin olun.
  2. İnceleyici'de, oyun nesnenize DrivingSurfaceManager bileşeni eklemek için Add Component'ı (Bileşen Ekle) tıklayın.

Bu bileşen için başka yapılandırma gerekmez.

Uygulamayı çalıştırma

  1. Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır...'ı tıklayın.
  2. Cihazınızı yatay bir gerçek dünya yüzeyine doğrultun ve ARCore'un dünyayı daha iyi anlaması için cihazınızı hareket ettirin.

  1. ARCore bir düzlem algıladığında gerçek dünyadaki yüzeylerin üzerinde toprak dokusu görünür. ARPlaneManager, algılanan her düzlem için belirtilen Plane Prefab öğesini oluşturur. Driving Surface Plane prefab'inde, belirli bir ARPlane için ağ oluşturan bir ARPlaneMeshVisualizer bileşeni bulunur.

Bir sonraki adımda, algılanan bir düzlemi oyun alanı olarak kullanacaksınız.

4. Algılanan düzlemlere karşı isabet testi gerçekleştirme

Önceki adımda, düzlemleri algılayabilen bir uygulama programladınız. Bu düzlemler, oyununuzun sahnesine yansıtılır. Artık, hedefleme retikülü ve algılanan düzlemin yüzeyinde hareket edecek bir araba oluşturarak bu düzlemlerle etkileşim ekleyeceksiniz.

Nişan alma retikülü oluşturma

Bu uygulamanın kontrol şemasında oyuncu, telefonunu bir yüzeye doğru tutar. Belirlenen konum için net görsel geri bildirim vermek amacıyla bir nişan alma retikülü kullanırsınız.

Bu nişangahı bir AR düzlemine "yapıştırmak" için isabet testi kullanın. İsabet testi, belirli bir yönde ışın gönderirken kesişimleri hesaplayan bir tekniktir. Kameranın görüş yönündeki kesişimi algılamak için isabet testi kullanırsınız.

Retikülü ekleme

  1. Ekranın alt kısmındaki Proje bölmesinde Öğeler > Başlangıç Paketi'ne gidin.
  2. Reticle Prefab'ı, projenin Hierarchy pane'ine sürükleyerek sahneye yerleştirin.
  3. Hiyerarşide artı işareti seçin.
  4. İnceleyicide Add Component'ı (Bileşen Ekle) tıklayın. Başlangıç paketindeki ReticleBehaviour komut dosyasını ekleyin. Bu komut dosyası, nişangahı kontrol etmek için bazı standart metinler içerir.
  5. ReticleBehaviour komut dosyası, daha önce oluşturduğunuz Driving Surface Manager öğesine bağlıdır. Bu nedenle, Driving Surface Manager seçiciyi tıklayarak bağımlılığı ekleyin. Sahne sekmesini seçin ve Driving Surface Manager simgesini belirleyin.

ReticleBehaviour öğesini düzenleme

ReticleBehavior komut dosyası, nişangahı cihazın görüntü alanının ortasındaki düzleme yerleştirir.

  1. ReticleBehaviour.cs komut dosyasını Script alanını çift tıklayarak açın.
  2. KamerayıViewToScreenPoint kullanarak ekranın merkezini belirleyin. Aşağıdakileri eklemek için Update() yöntemini düzenleyin:
var screenCenter = Camera.main.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
  1. Işın dökümü yapmak için bu noktayı kullanın. Aşağıdakileri ekleyin:
var hits = new List<ARRaycastHit>();
DrivingSurfaceManager.RaycastManager.Raycast(screenCenter, hits, TrackableType.PlaneWithinBounds);

hits değişkeni, ray ile kesişen izlenebilir öğeler üzerindeki noktaları açıklayan ARRaycastHit'leri içerir.

  1. hits listesine sorgu göndererek önemli yer kesişim noktasını belirleyin. DrivingSurfaceManager içinde bulunan kilitli düzleme öncelik verin. Bu düzlem yoksa ilk düzlem isabetini kullanın. Update() dosyasının sonuna aşağıdakileri ekleyin:
CurrentPlane = null;
ARRaycastHit? hit = null;
if (hits.Length > 0)
{
    // If you don't have a locked plane already...
    var lockedPlane = DrivingSurfaceManager.LockedPlane;
    hit = lockedPlane == null
        // ... use the first hit in `hits`.
        ? hits[0]
        // Otherwise use the locked plane, if it's there.
        : hits.SingleOrDefault(x => x.trackableId == lockedPlane.trackableId);
}
  1. hit bir sonuç içeriyorsa bu GameObject öğesinin dönüşümünü isabet konumuna taşıyın.
if (hit.HasValue)
{
    CurrentPlane = DrivingSurfaceManager.PlaneManager.GetPlane(hit.Value.trackableId);
    // Move this reticle to the location of the hit.
    transform.position = hit.Value.pose.position;
}
Child.SetActive(CurrentPlane != null);

Retikülü test etme

  1. Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır...'ı tıklayın.
  2. Cihazınızı bir düzleme doğrulttuğunuzda, nişangahın kameranızın hareketlerini takip ettiğini görmeniz gerekir.

Araba oluşturma

Oyuncu, nişangahın bulunduğu yere doğru ilerleyen bir oyuncak arabayı kontrol eder. Başlangıç paketinde bu araba için bir model ve davranış sağlanır.

Sahnenize CarManager ekleme

  1. Hiyerarşi'de yeni bir boş GameObject oluşturun.
  2. Car Spawner olarak yeniden adlandırın.
  3. Oluşturduğunuz nesneyi seçin. Hiyerarşi bölmesinde, CarManager bileşenini eklemek için Bileşen Ekle'yi tıklayın.
  4. Her alan için seçiciyi tıklayarak CarManager'nın bağımlılıklarını ayarlayın:
    • Car Prefab: Assets (Öğeler) bölümünde Car Prefab'ı (Araba Prefabrik) seçin.
    • Reticle (Retikül): Scene (Sahne) bölümünde Reticle Prefab'ı (Retikül Prefabrik) seçin.
    • Sürüş Yüzeyi Yöneticisi: Sahne'de Sürüş Yüzeyi Yöneticisi'ni seçin.

Bu CarManager davranış, artı işaretinin bulunduğu düzlemde oyuncak bir araba oluşturur. İsterseniz arabanın nasıl programlandığını öğrenmek için CarBehaviour komut dosyasına göz atın.

Test sürüşü

  1. Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır'ı tıklayın.
  2. Bir uçağa dokunduğunuzda, o konumda küçük bir araba görünür. Bu araba, retikülü takip eder.

Oyun öğesini ekleme

Artık oyuncu sahnedeki bir öğeyi kontrol edebildiğine göre, oyuncuya doğru sürmesi gereken bir hedef verin.

  1. Hiyerarşide yeni bir boş GameObject oluşturun.
  2. Package Spawner olarak yeniden adlandırın.
  3. Oluşturduğunuz nesneyi seçin. Hiyerarşi bölmesinde, PackageSpawner bileşenini eklemek için Bileşen Ekle'yi tıklayın.
  4. Her alan için seçiciyi tıklayarak PackageSpawner'nın bağımlılıklarını ayarlayın:
    • Package Prefab: Assets (Öğeler) bölümünde Package Prefab'ı (Paket Prefabrik) seçin.
    • Sürüş Yüzeyi Yöneticisi Sahne'de Sürüş Yüzeyi Yöneticisi'ni seçin.

Bu PackageSpawner davranış, kilitli bir ARPlane üzerinde rastgele bir konumda yeni bir paket oluşturur (paket yoksa).

Oyunu test etme

  1. Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır'ı tıklayın. 2. Araba oluşturduktan sonra bir paket ortaya çıkar.
  2. Arabanızı paketin bulunduğu yere sürün.
  3. Yeni bir tane rastgele bir konumda görünür.

5. Işık tahminini ayarlama

Temel oyun tamamlandığına göre, AR sahnenize gerçekçilik katın. Bu adımda, gelen kamera karelerine göre gerçek dünyadaki ışığı algılamak için ARCore'un Lighting Estimation API'sini kullanacaksınız. Bu bilgiler, sahnenizin ışıklandırmasını gerçek dünyadaki ışıklandırmaya uyarlamak için kullanılır.

Işık tahminini etkinleştirme

  1. Hierarchy'de AR Session Origin'i genişletin ve AR Camera nesnesini seçin.
  2. Inspector'da AR Camera Manager komut dosyasını genişletin.
  3. Işık Tahmini alanını Her şey olarak değiştirin.

Yönlü ışığı değiştirme

  1. Hierarchy (Hiyerarşi) bölümünde Directional Light (Yönlü Işık) nesnesini seçin.
  2. Buna LightEstimation bileşenini ekleyin. Başlangıç Paketindeki bu bileşen, ışıklandırma değişikliklerine abone olmak için bazı standart metinler sağlar.
  3. FrameReceived() işlevine şunu ekleyin:
ARLightEstimationData lightEstimation = args.lightEstimation;

if (lightEstimation.averageBrightness.HasValue)
    Light.intensity = lightEstimation.averageBrightness.Value;

if (lightEstimation.averageColorTemperature.HasValue)
    Light.colorTemperature = lightEstimation.averageColorTemperature.Value;

if (lightEstimation.colorCorrection.HasValue)
    Light.color = lightEstimation.colorCorrection.Value;

if (lightEstimation.mainLightDirection.HasValue)
    Light.transform.rotation = Quaternion.LookRotation(lightEstimation.mainLightDirection.Value);

if (lightEstimation.mainLightColor.HasValue)
    Light.color = lightEstimation.mainLightColor.Value;

if (lightEstimation.mainLightIntensityLumens.HasValue)
    Light.intensity = lightEstimation.averageMainLightBrightness.Value;

if (lightEstimation.ambientSphericalHarmonics.HasValue)
{
    RenderSettings.ambientMode = AmbientMode.Skybox;
    RenderSettings.ambientProbe = lightEstimation.ambientSphericalHarmonics.Value;
}

Değişikliklerinizi test etme

  1. Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır'ı tıklayın.
  2. Sahnedeki nesnelere baktığınızda, ortamın ışıklandırmasına bağlı olarak renklendirildiklerini fark edebilirsiniz.
  3. Mümkünse ışıklandırmanızı değiştirmeyi deneyin. Örneğin, bulunduğunuz odadaki ışıkları kapatmayı deneyin. Nesnelerdeki ışıklandırmanın, gerçek dünyadaki ışıklandırmadaki değişikliğe uyum sağladığını görmeniz gerekir.

6. Özet

Tebrikler! Unity AR Foundation ile ilgili bu codelab'in sonuna geldiniz.

Kapsamda olanlar

  • Unity'nin AR Foundation'ı ve Universal Rendering Pipeline'ı kullanarak temel bir proje oluşturma
  • Yeni planlara abone olmak için ARPlaneManager nasıl kullanılır?
  • Sanal geometriyle kesişimleri bulmak için Raycast nasıl kullanılır?
  • Sahnenizi aydınlatmak için ARLightEstimationData kullanma

Sonraki adımlar

Bonus atamalar

Burada oluşturduğunuz oyunu geliştirmek istiyorsanız aşağıdaki fikirleri değerlendirebilirsiniz:

  • PackageManager yeni bir paket oluşturduğunda TextMeshPro öğesini değiştirerek oyununuza bir puan sayacı ekleyin.
  • Performans yer paylaşımını etkinleştirerek oyununuz çalışırken performans bilgilerini kontrol edin.
  • Öncelikle sahnenize yeni nesneler yerleştirmek için Kalıcı Işın Yayınları'nı kullanın. Bu alanda bir düzlem algılandığında, nesne bu düzleme tutturulacak şekilde güncellenir.