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
- USB kablosuyla geliştirme makinenize bağlanmış, desteklenen bir ARCore cihazı.
- AR için Google Play Hizmetleri 1.23 veya sonraki sürümler.
- Unity Hub veya Unity 2020 LTS kurulumu.
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.
- Pencere > Paket Yöneticisi'ne gidin.
- 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.
- Öğeler > Paketi İçe Aktar > Özel Paket... ve
starter-package.unitypackage
açılıyor. - Açılan pencerede tüm öğelerin seçili olduğundan emin olun.
- İç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:
- Dosya > Derleme Ayarları.
- Platform bölmesinde Android'i seçin.
- İ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.
- 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.
- Düzenle > Proje Ayarları... seçeneğini tıklayın ve XR Eklenti Yönetimi bölümünü tıklayın.
- Android sekmesinde ARCore'u etkinleştirin.
- Sol bölmedeki Oynatıcı bölümünü tıklayın.
- Android sekmesinde, Diğer Ayarlar'ın altında Grafik API'leri bölümünden Vulkan'ı kaldırın.
- 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.
SampleScene
içindeki tüm oyun nesnelerini silin.
- 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:
- 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.
- Proje bölmesinde Öğeler > Ayarlar ile ForwardRenderer öğesini bulun.
- ForwardRenderer (Yönlendirici) seçin.
- 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
- Cihazınızın fişe takılı ve ADB hata ayıklama özelliğinin açık olduğundan emin olun.
- Dosya > Derleyin ve Çalıştırın... Bu işlem, uygulamayı cihazınıza yükler ve yüklendiğinde başlatır.
- 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.
- Hiyerarşi bölmesini kullanarak boş bir
GameObject
oluşturun. - Albümü
Driving Surface Manager
olarak yeniden adlandır. Bu bileşen, oynatıcı tarafından seçilene kadar düzlemler gösterir. - Yeni oyun nesnesini seçin. Denetleyici bölmesinde Bileşen Ekle'yi tıklayarak bir AR Düzlemi Yöneticisi ekleyin.
Plane Prefab
alanını ayarlayarakARPlaneManager
politikasını yapılandırın:- Select GameObject (Oyun Nesnesi Seç) penceresini açmak için
None
öğesinin yanındaki düğmeyi tıklayın. - Öğeler sekmesini seçin ve Sürüş Yüzey Düzlemi araması yapın.
- Select GameObject (Oyun Nesnesi Seç) penceresini açmak için
Başlangıç paketindeki bu prefabrik, uçak dekorasyonu olarak kullanılacak cesur bir zemin dokusu sağlar.
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.
- Hiyerarşi bölmesinde
Driving Surface Manager
adlı nesnenin seçildiğinden emin olun. - 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.
- Hiyerarşi bölmesinde
Driving Surface Manager
adlı nesnenin seçildiğinden emin olun. - 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
- Dosya > Derle ve Çalıştır...'ı tıklayın.
- 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.
- 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 belirtilenPlane Prefab
öğesini örneklendirir.Driving Surface Plane
prefabrik, belirli birARPlane
için örgü oluşturan birARPlaneMeshVisualizer
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
- Ekranın alt tarafındaki Proje bölmesinde Öğeler > Başlangıç Paketi.
- Reticle Prefab'i (Reticle Prefab) projenin Hiyerarşi bölmesine sürükleyerek sahneye yerleştirin.
- Hiyerarşideki retikülü seçin.
- İ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. ReticleBehaviour
komut dosyası, daha önce oluşturduğunuzDriving Surface Manager
öğesine bağımlıdır. Bu nedenle,Driving Surface Manager
seçiciyi tıklayarak bağımlılığı ekleyin. Sahne sekmesini ve ardındanDriving 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.
Script
alanını çift tıklayarakReticleBehaviour.cs
komut dosyasını açın.- Kamera
ViewToScreenPoint
aracını kullanarak ekranın ortasını belirleyin. Aşağıdakileri eklemek içinUpdate()
yöntemini düzenleyin:
var screenCenter = Camera.main.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
- 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.
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);
}
hit
bir sonuç içeriyorsa buGameObject
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
- Dosya > Derle ve Çalıştır...'ı tıklayın.
- 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
- Hiyerarşi'de yeni, boş bir
GameObject
oluşturun. - Albümü
Car Spawner
olarak yeniden adlandır. - Oluşturduğunuz nesneyi seçin. Hiyerarşi bölmesinde
CarManager
bileşenini eklemek için Bileşen Ekle'yi tıklayın. - 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üşü
- Dosya > Derleme ve Çalıştırma başlıklı makaleyi inceleyin.
- 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.
- Hiyerarşide yeni, boş bir
GameObject
oluşturun. - Albümü
Package Spawner
olarak yeniden adlandır. - Oluşturduğunuz nesneyi seçin. Hiyerarşi bölmesinde
PackageSpawner
bileşenini eklemek için Bileşen Ekle'yi tıklayın. - 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
- Dosya > Derleme ve Çalıştırma başlıklı makaleyi inceleyin. 2. Bir araba oluşturduktan sonra bir paket ortaya çıkar.
- Arabanızı pakete götürün.
- 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
- Hiyerarşi'de, AR Oturumu Kaynağı'nı genişletin ve AR Kamerası nesnesini seçin.
- İnceleyici'de AR Kamera Yöneticisi komut dosyasını genişletin.
- Işıklandırma Tahmini alanını Her şey olarak değiştirin.
Yön ışığını değiştir
- Hiyerarşi'de Yönsel Işık nesnesini seçin.
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.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
- Dosya > Derleme ve Çalıştırma başlıklı makaleyi inceleyin.
- Sahnedeki nesnelere bakarken, ortamdaki ışıklandırmaya göre renklendirildiğini fark edebilirsiniz.
- 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
- Unity'nin AR Foundation örneklerine göz atın.
- AR Foundation dokümanlarına göz atın.
- Unity'nin AR Foundation için ARCore Uzantıları ile ilgili Google dokümanlarına göz atın.
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 birTextMeshPro
da 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.