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

1. Genel Bakış

ARCore, Google'ın akıllı telefonlarda artırılmış gerçeklik deneyimleri oluşturmaya yönelik altyapısıdır. Platformlar arası AR uygulamaları geliştirmek için Unity'nin AR Foundation'ı kullanabilirsiniz.

Neler oluşturacaksınız?

Bu codelab'de, AR Foundation'ı kullanarak basit bir oyun geliştireceksiniz. Oyunun amacı, avuç içi cihazınızla kontrol ettiğiniz bir arabayı kullanarak paket toplamaktır.

Ancak bu tamamen sanal bir dünyada gerçekleşmez. Oyuncunun bulunduğu ortamı anlayan bir oyun geliştirerek yeni bir oyuncu deneyimi oluşturmak için fiziksel atomlarla dijital bitleri karıştıracaksınız.

Bu codelab'in sonunda oyununuz şunları yapabilecek:

  • Gerçek uçakları tespit edip üzerlerine bir oyun alanı çizin.
  • Kameranın görüş açısıyla ışınlar yayır ve uçaklarla kesişen noktaları algılar.
  • 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'ı kullanan bir proje oluşturma.
  • Yeni uçaklara abone olmak için ARPlaneManager nasıl kullanılır?
  • Sanal geometriyle kesişimleri bulmak için Raycast nasıl kullanılır?
  • Sahnenizi ışıklandırmak için ARLightEstimationData nasıl kullanılır?

Gerekenler

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

Bu adımda, Unity'nin AR Foundation'ı kullanarak ortamınızı gelişime hazır hale getireceksiniz.

Cihazınızın artırılmış gerçeklik (AR) ile uyumlu olduğundan emin olun

Android cihazlardaki AR deneyimleri, ARCore destekli cihazlarda bulunan ARCore ile sağlanır. Geliştirme cihazınızın artırılmış gerçeklik (AR) ile uyumlu olduğundan emin olun. Alternatif olarak, doğru yapılandırılmış AR uyumlu bir Android Emulator örneği kullanabilirsiniz.

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

Hata ayıklama uygulamalarını çalıştırmak için cihazınızda Geliştirici seçeneklerini etkinleştirmeniz gerekir. Henüz yapmadıysanız Geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirme konulu Android dokümanlarına bakın.

Unity'yi (2020.3 LTS) yükleyin

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

Yeni proje oluştur

Evrensel Oluşturma Ardışık Düzeni şablonunu kullanarak yeni bir proje oluşturun. Açıklayıcı bir ad ve uygun bir konum girip OLUŞTUR'a basın.

Gerekli çerçeveleri yükleyin

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

  1. Pencere > Paket Yöneticisi'ne gidin.

  1. Bu pencerede, bu codelab'de kullanacağınız paketleri yükleyin. simgesini kullanıp girişini genişleterek bu çerçevelerin en son sürümlerini görüntüleyin. Şu çerçevelerin her biri için en yeni sürümleri yükleyin:
    • Artırılmış Gerçeklik (AR) Vakfı
    • ARCore XR Eklentisi

İşiniz bittiğinde, Paket Yöneticiniz şu şekilde görünmelidir:

Başlangıç paketini yükleyin

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

  1. Öğeler > Paketi İçe Aktar > Özel Paket... ve starter-package.unitypackage açılıyor.
  2. Açılan pencerede tüm öğelerin seçili olduğundan emin olun.
  3. İçe Aktar'ı tıklayın.

Derleme Ayarlarını Değiştir

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

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

Proje Ayarlarını Değiştir

AR Foundation'ın, başlangıçta XR sistemlerini başlatacak şekilde yapılandırılması gerekir.

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

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

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

Gerekli sahne öğelerini ekleyin

Universal Oluşturma Ardışık Düzeni şablonu, bu eğiticide kullanmayacağınız bazı oyun nesneleriyle birlikte gelir.

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

  1. AR Foundation nesneleri ekleyin. Hiyerarşi bölmesini sağ tıklayın. Aşağıdakileri eklemek için bu menüyü kullanın:
  • XR > AR Oturumu: Bu nesne, AR deneyiminin yaşam döngüsünü kontrol eder.
  • XR > AR Oturumu Kaynağı: Bu nesne, AR koordinatlarını Unity dünya koordinatlarına dönüştürür.
  • Açı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 Oturumu Kaynağı'nı genişletin ve AR Kamera nesnesini seçin. İnceleyicide, etiketini MainCamera olarak değiştirin.

Oluşturmayı ayarla

Unity'nin Universal Oluşturma Ardışık Düzeni'nin, AR Foundation ile uyumlu olması için bir değişiklik yapması gerekiyor.

  1. Proje bölmesinde Öğeler > Ayarlar ile ForwardRenderer öğesini bulun.

  1. ForwardRenderer (Yönlendirici) seçin.
  2. Denetleyici bölmesinde, AR Arka Plan Oluşturucu Özelliği eklemek için Oluşturucu Özelliği Ekle'yi kullanın. Bu bileşen, sahnenizdeki kamera feed'ini oluşturur.

Kurulumu doğrulama

  1. Cihazınızın fişe takılı ve ADB hata ayıklama özelliğinin açık olduğundan emin olun.
  2. Dosya > Derleyin ve Çalıştırın... Bu işlem, uygulamayı cihazınıza yükler ve yüklendiğinde başlatır.
  3. Kamera feed'i cihazınızın ekranında görünür.

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

3. Uçakları gerçek dünyada tespit edin

Temel bir sahne ayarlandıktan sonra oyunu geliştirmeye başlayabilirsiniz. Bu adımda düzlemleri tespit edip sahneye çizeceksiniz.

ARPlaneManager bileşeni ekleyin

ARPlaneManager, ortamın algılanmasında ARPlane'ları algılayıp oyun nesnelerini oluşturur, günceller ve kaldırır.

  1. Hiyerarşi bölmesini kullanarak boş bir GameObject oluşturun.
  2. Albümü Driving Surface Manager olarak yeniden adlandır. Bu bileşen, oynatıcı tarafından seçilene kadar düzlemler gösterir.
  3. Yeni oyun nesnesini seçin. Denetleyici bölmesinde Bileşen Ekle'yi tıklayarak bir AR Düzlemi Yöneticisi ekleyin.

  1. Plane Prefab alanını ayarlayarak ARPlaneManager politikasını yapılandırın:
    1. Select GameObject (Oyun Nesnesi Seç) penceresini açmak için None öğesinin yanındaki düğmeyi tıklayın.
    2. Öğeler sekmesini seçin ve Sürüş Yüzey Düzlemi araması yapın.

Başlangıç paketindeki bu prefabrik, uçak dekorasyonu olarak kullanılacak cesur bir zemin dokusu sağlar.

  1. Detection Mode ayarını, Horizontal olarak değiştirin. Bu yapılandırma, ARPlaneManager yalnızca yatay düzlemler sağlayacak şekilde yapılandırılır ve sürüş için ideal olur.

ARRaycastManager bileşeni ekleyin

ARRaycastManager, raycast işlevini gösterir. Sonraki adımda, kullanıcıya denetimler sağlamak için bu nesneyi kullanacağız.

  1. Hiyerarşi bölmesinde Driving Surface Manager adlı nesnenin seçildiğinden emin olun.
  2. Oyun nesnenize ARRaycastManager bileşeni eklemek için Denetleyici'de Bileşen Ekle'yi tıklayın.

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

DrivingSurfaceManager bileşeni ekleyin

DrivingSurfaceManager, Başlangıç Paketi'nde bulunan ve ARPlane seçilmesine olanak tanıyan bir yardımcı komut dosyasıdır. Bir 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çildiğinden emin olun.
  2. Oyun nesnenize DrivingSurfaceManager bileşeni eklemek için Denetleyici'de Bileşen Ekle'yi tıklayın.

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

Uygulamayı çalıştırın

  1. Dosya > Derle ve Çalıştır...'ı tıklayın.
  2. Cihazınızı yatay bir gerçek dünya yüzeyine doğru tutun ve ARCore'un dünyayı daha iyi anlamasını sağlamak için cihazınızı hareket ettirin.

  1. ARCore bir uçak algıladığında, gerçek dünyadaki yüzeylerin üzerini kaplayan bir kir dokusu görmeniz gerekir. ARPlaneManager, algılanan her düzlem için belirtilen Plane Prefab öğesini örneklendirir. Driving Surface Plane prefabrik, belirli bir ARPlane için örgü oluşturan bir ARPlaneMeshVisualizer bileşenine sahiptir.

Sonraki adımda, oyun alanı olarak algılanan bir uçağı kullanacaksınız.

4. Algılanan uçaklara karşı isabet testi uygulama

Önceki adımda uçakları algılayabilen bir uygulama programladınız. Bu uçaklar oyun sahnenizde yansıtılır. Şimdi, nişan alan bir retikül ve algılanan uçağın yüzeyinde gidebilecek bir araba oluşturarak bu uçaklarla etkileşimlilik özelliği ekleyeceksiniz.

Nişangah yapan bir retikül oluştur

Bu uygulamanın kontrol şeması, oyuncunun telefonunu bir yüzeye doğrultmasını içerir. Belirlenen konumla ilgili net görsel geri bildirim sağlamak için nişan alan bir retikül kullanmalısınız.

Sürekli iyileştirme yapmak için AR uçağına vurmak için vuruş testi yapın. Çarpışma testi, bir ışın belirli bir yöne doğru yayınlanırken kesişimleri hesaplayan bir tekniktir. Kamera görüş yönünde bir kesişimi tespit etmek için isabet testi kullanırsınız.

Retikül ekleme

  1. Ekranın alt tarafındaki Proje bölmesinde Öğeler > Başlangıç Paketi.
  2. Reticle Prefab'i (Reticle Prefab) projenin Hiyerarşi bölmesine sürükleyerek sahneye yerleştirin.
  3. Hiyerarşideki retikülü seçin.
  4. İnceleyicide, Bileşen Ekle'yi tıklayın. Başlangıç Paketi'nden ReticleBehaviour komut dosyasını ekleyin. Bu komut dosyası, retikülleri kontrol etmek için gereken ortak metni içerir.
  5. ReticleBehaviour komut dosyası, daha önce oluşturduğunuz Driving Surface Manager öğesine bağımlıdır. Bu nedenle, Driving Surface Manager seçiciyi tıklayarak bağımlılığı ekleyin. Sahne sekmesini ve ardından Driving Surface Manager simgesini seçin.

ReticleBehaviour sütununu düzenleyin

ReticleBehavior komut dosyası, retikülü cihazın görüntü alanının ortasında bulunan düzleme yerleştirir.

  1. Script alanını çift tıklayarak ReticleBehaviour.cs komut dosyasını açın.
  2. Kamera ViewToScreenPoint aracını kullanarak ekranın ortasını 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 yayını 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, izlenebilir içeriklerde ray ile kesişen noktaları açıklayan ARRaycastHit değişkenlerini içerir.

  1. hits listesini sorgulayarak kesişim noktasını belirleyin. DrivingSurfaceManager içinde yer alan kilitli düzleme önceliklendirin ve bu yoksa ilk düzlem isabetini kullanın. Update() öğesinin sonuna şunu 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 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 edin

  1. Dosya > Derle ve Çalıştır...'ı tıklayın.
  2. Cihazınızı uçağa doğru tuttuğunuzda retikülün kameranızın hareketlerini takip ettiğini göreceksiniz.

Araba oluştur

Oyuncu, retikülün bulunduğu yere doğru ilerleyen bir oyuncak arabayı kontrol eder. Bu araba için model ve davranış, Başlangıç Paketi'nde sağlanmıştır.

Sahnenize CarManager ekleyin

  1. Hiyerarşi'de yeni, boş bir GameObject oluşturun.
  2. Albümü Car Spawner olarak yeniden adlandır.
  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 bağımlılarını ayarlayın:
    • Otomobil Prefabosu: Öğeler bölümünde Araba Prefabosu'nu seçin.
    • Retikül: Sahne'de Retikle Prefab'i seçin.
    • Sürüş Yüzeyi Yöneticisi: Sahne'de Sürüş Yüzeyi Yöneticisi'ni seçin.

Bu CarManager davranışı, retikülün bulunduğu uçakta bir oyuncak araba oluşturuyor. İsterseniz arabanın nasıl programlandığını öğrenmek için CarBehaviour komut dosyasını inceleyebilirsiniz.

Test sürüşü

  1. Dosya > Derleme ve Çalıştırma başlıklı makaleyi inceleyin.
  2. Bir uçağa dokunduğunuzda, ilgili konumda küçük bir araba görmeniz gerekir. Bu araba retikülü takip edecek.

Oyun öğesini ekleyin

Oyuncu artık sahnedeki bir varlığı kontrol edebildiğine göre oyuncuya gitmek için bir hedef konum belirleyin.

  1. Hiyerarşide yeni, boş bir GameObject oluşturun.
  2. Albümü Package Spawner olarak yeniden adlandır.
  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 bağımlılarını ayarlayın:
    • Paket Prefab: Öğeler'de Paket Prefab'i 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 (Halihazırda paket yoksa).

Oyunu test edin

  1. Dosya > Derleme ve Çalıştırma başlıklı makaleyi inceleyin. 2. Bir araba oluşturduktan sonra bir paket ortaya çıkar.
  2. Arabanızı pakete götürün.
  3. Rastgele bir konumda yeni bir mesaj görünür.

5. Işıklandırma Tahmini'ni ayarlama

Temel oyun tamamlandıktan sonra AR sahnenize gerçekçilik katabilirsiniz. Bu adımda, gelen kamera karelerine dayalı olarak gerçek dünyadaki ışığı algılamak için ARCore'un Lighting Estimation API'sini kullanacaksınız. Bu bilgiler, sahnenizin ışığını gerçek ışıklandırmaya uyacak şekilde uyarlamak için kullanılır.

Aydınlatma Tahminini Etkinleştir

  1. Hiyerarşi'de, AR Oturumu Kaynağı'nı genişletin ve AR Kamerası nesnesini seçin.
  2. İnceleyici'de AR Kamera Yöneticisi komut dosyasını genişletin.
  3. Işıklandırma Tahmini alanını Her şey olarak değiştirin.

Yön ışığını değiştir

  1. Hiyerarşi'de Yönsel Işık nesnesini seçin.
  2. LightEstimation bileşenini buna ekleyin. Başlangıç Paketi'ndeki bu bileşen, ışıklandırma değişikliklerine abone olmak için gereken temel bilgileri 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. Dosya > Derleme ve Çalıştırma başlıklı makaleyi inceleyin.
  2. Sahnedeki nesnelere bakarken, ortamdaki ışıklandırmaya göre renklendirildiğini fark edebilirsiniz.
  3. Mümkünse ışıklandırmanızı değiştirmeyi deneyin. Örneğin, bulunduğunuz odadaki ışıkları kapatmayı deneyin. Nesnelerin üzerindeki ışıklandırmanın gerçek dünyadaki ışıklandırmadaki değişikliğe uyum sağladığını görmeniz gerekir.

6. Son adım

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

İşledikleriniz

  • Unity'nin AR Foundation'ı ve Evrensel Oluşturma Ardışık Düzeni'ni kullanarak temel proje oluşturma.
  • Yeni uçaklara abone olmak için ARPlaneManager nasıl kullanılır?
  • Sanal geometriyle kesişimleri bulmak için Raycast nasıl kullanılır?
  • Sahnenizi ışıklandırmak için ARLightEstimationData nasıl kullanılır?

Sonraki adımlar

Bonus atamalar

Burada oluşturduğunuz oyunla ilgili daha ayrıntılı bilgi edinmek isterseniz uygulayabileceğiniz bazı fikirler aşağıda verilmiştir:

  • PackageManager yeni paket oluşturduğunda bir TextMeshProda değişiklik yaparak oyununuza skor sayacı ekleyin.
  • Performance Overlay'i (Performans Yerleşimi) etkinleştirerek oyununuz çalışırken performans bilgilerine göz atın.
  • Sahnenize ilk olarak yeni nesneler yerleştirmek için Kalıcı Raycast'leri kullanın. Bu alanda bir uçak algılandığında, o nesne güncellenerek söz konusu düzlemeye tutturulur.