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

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

Bu codelab hakkında

subjectSon güncelleme Haz 25, 2021
account_circleYazan: Dereck Bridie

1. Genel Bakış

ARCore, Google'ın akıllı telefonlarda artırılmış gerçeklik deneyimleri oluşturmak için kullandığı çerçevedir. Platformlar arası AR uygulamaları oluşturmak için Unity'nin AR Foundation'unu 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şmeyecek. Fiziksel atomları ve dijital bitleri karıştırarak oyuncunun etrafındaki ortamı anlayan bir oyun oluşturarak yeni bir tür oyuncu deneyimi yaratacaksı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 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 ortamınızı geliştirmeye 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 AR ile uyumlu olduğundan emin olun. Alternatif olarak, doğru yapılandırılmış bir AR uyumlu Android Emulator örneği kullanabilirsiniz.

Cihazınızda USB hata ayıklama özelliğini 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 hata ayıklama özelliğini etkinleştirme ile ilgili Android belgelerine bakın.

Unity'yi (2020.3 LTS) yükleyin

İş istasyonunuza Unity 2020 LTS'yi yükleyin. Bu kod laboratuvarında, 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 çalışabilir ancak ek adımlar gerekebilir. Bu sayfadaki 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ükleme

Unity'nin AR Foundation'ı Unity Paket Yöneticisi'nde bulunabilir.

  1. Pencere > Paket Yöneticisi'ni tıklayarak açın.

  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 son sürümleri yükleyin:
    • Artırılmış Gerçeklik (AR) Vakfı
    • ARCore XR Eklentisi

İşlem tamamlandığında Paket Yöneticiniz aşağıdaki gibi görünecektir:

Başlangıç paketini yükleme

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ğından derleme platformunu Android olarak değiştirin:

  1. Dosya > Derleme Ayarları'nı açın.
  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. Soldaki 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 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 Render Pipeline şablonu, bu eğitimde 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. Şunları 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 Başlangıcı: 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 Oturum Başlangıcı'nı genişletin ve AR Kamera nesnesini seçin. İnceleyicide, etiketini MainCamera olarak değiştirin.

Oluşturma işlemini ayarlama

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 Öğeler > Ayarlar'a giderek ForwardRenderer öğesini bulun.

  1. ForwardRenderer (Yönlendirici) seçin.
  2. İnceleyici 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 > Derle ve Çalıştır...'ı tıklayı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 uçakları algılayıp sahneye çizeceksiniz.

ARPlaneManager bileşeni ekleme

ARPlaneManager, ARPlane'leri algılar ve cihazın ortamla ilgili anlayışı değiştiğinde oyun nesneleri 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. AR Uçak Yöneticisi eklemek için İnceleme bölmesinde Bileşen Ekle'yi tıklayın.

  1. Plane Prefab alanını ayarlayarak ARPlaneManager öğesini yapılandırın:
    1. Nesne Seç penceresini açmak için None simgesinin yanındaki düğmeyi tıklayın.
    2. Öğeler sekmesini seçin ve Sürüş Yüzeyi Düzlemi'ni arayın.

Başlangıç paketindeki bu hazır model, uçak dekorasyonu olarak kullanılacak pürüzlü bir zemin dokusu sağlar.

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

ARRaycastManager bileşeni ekleyin

ARRaycastManager, ışın izleme işlevini gösterir. 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ç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çili olduğundan 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ırma

  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 hazır bileşeninde, belirli bir ARPlane için bir ağ oluşturan bir ARPlaneMeshVisualizer bileşeni vardır.

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 düzlemler oyununuzun sahnesine yansıtılır. Şimdi, bir nişangah ve algılanan düzlem yüzeyinde sürüş yapacak bir araba oluşturarak bu düzlemlerle etkileşim ekleyin.

Hedefleme nişangahı oluşturma

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.

Bu nişangahı bir AR düzleminde "sabitlemek" için isabet testi kullanın. Çarpışma testi, bir ışın belirli bir yöne doğru yayınlanırken kesişimleri hesaplayan bir tekniktir. Kameranın görüş yönündeki bir kesişimi algılamak 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. Nişangah hazır öğesini 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ı, nişangahı kontrol etmek için bazı standart metinler içerir.
  5. ReticleBehaviour komut dosyası, daha önce oluşturduğunuz Driving Surface Manager dosyasına bağlı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ı, nişangahı cihazın görüntü alanının ortasındaki düzlemde konumlandırır.

  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 izleme 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 bulunan kilitli uçağa öncelik verin. Bu uçak yoksa ilk uçak isabeti kullanılmalıdır. 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);

Nişangahı test etme

  1. Değişikliklerinizi test etmek için 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, nişangahın konumuna doğru giden 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 bir boş GameObject oluşturun.
  2. Albümü Car Spawner olarak yeniden adlandır.
  3. Oluşturduğunuz nesneyi seçin. CarManager bileşenini eklemek için Hiyerarşi bölmesinde Bileşen Ekle'yi tıklayın.
  4. Her alanın seçicisini tıklayarak CarManager'nin bağımlılıkları ayarlayın:
    • Araba hazır öğesi: Öğeler bölümünde Araba hazır öğesi'ni seçin.
    • Retikül: Sahne'de Retikle Prefab'i seçin.
    • Sürüş yüzeyi yöneticisi: Sahnede Sürüş yüzeyi yöneticisi'ni seçin.

Bu CarManager davranışı, retikülün bulunduğu uçakta bir oyuncak araba oluşturuyor. Dilerseniz aracın nasıl programlandığını öğrenmek için CarBehaviour komut dosyasına göz atın.

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:
    • Prefab'i Paketle: Öğeler bölümünde Prefab'i Paketle'yi seçin.
    • Sürüş yüzeyi yöneticisi Sahne bölümünde 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&#39;ni ayarlama

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

Aydınlatma Tahmini'ni etkinleştirme

  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önlü ışığı değiştirme

  1. Hiyerarşi'de Yönsel Işık nesnesini seçin.
  2. LightEstimation bileşenini 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 şunları 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 baktığınızda, çevrenin aydınlatması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 ışığın, gerçek dünyadaki ışıktaki değişime uyum sağladığını görürsünüz.

6. Son adım

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

İşledikleriniz

  • Unity'nin AR Foundation ve Universal Rendering Pipeline'ı kullanarak temel 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 aydınlatmak için ARLightEstimationData'ü kullanma.

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, bu nesne o uçağa kilitlenecek şekilde güncellenir.