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
ARPlaneManagernasıl kullanılır? - Sanal geometriyle kesişimleri bulmak için
Raycastsimgesini kullanma - Sahnenizi aydınlatmak için
ARLightEstimationDatakullanma
İhtiyacınız olanlar
- Geliştirme makinenize USB kablosuyla bağlı desteklenen bir ARCore cihazı.
- AR için Google Play Hizmetleri 1.23 veya sonraki bir sürüm.
- Unity Hub veya Unity 2020 LTS'nin yüklü olması gerekir.
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.
- Window > Package Manager'ı (Pencere > Paket Yöneticisi) tıklayarak açın.

- 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.
- Assets > Import Package > Custom Package... (Öğeler > Paket İçe Aktar > Özel Paket...) seçeneğini açıp
starter-package.unitypackageseçeneğini açarak başlangıç paketini yükleyin. - Açılan pencerede her şeyin seçili olduğundan emin olun.
- İçe Aktar'ı tıklayın.
Derleme Ayarlarını Değiştirme
Uygulama Android'de çalışacağından derleme platformunu Android olarak değiştirin:
- File > Build Settings'i (Dosya > Derleme Ayarları) açın.
- Platform bölmesinde Android'i seçin.
- İ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.
- 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.
- Düzenle > Proje Ayarları...'yı açın ve XR Eklenti Yönetimi bölümünü tıklayın.
- Android sekmesinde ARCore'u etkinleştirin.

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

- 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.
SampleSceneiçindeki tüm oyun nesnelerini silin.

- 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:

- 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.
- Proje bölmesinde, ForwardRenderer öğesini bulmak için Öğeler > Ayarlar'a gidin.

- ForwardRenderer'ı seçin.
- İ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
- Cihazınızın prize takılı olduğundan ve ADB hata ayıklamasının açık olduğundan emin olun.
- 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.
- 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.
- Hiyerarşi bölmesini kullanarak boş bir
GameObjectoluşturun. Driving Surface Managerolarak yeniden adlandırın. Bu bileşen, oyuncu bir uçak seçene kadar uçakları gösterir.- Yeni oyun nesnesini seçin. İnceleyici bölmesinde, AR Plane Manager eklemek için Add Component'ı (Bileşen Ekle) tıklayın.

ARPlaneManageralanınıPlane Prefabalanını ayarlayarak yapılandırın:Nonesimgesinin yanındaki düğmeyi tıklayarak Select GameObject (Oyun Nesnesi Seç) penceresini açın.- Öğ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.
Detection ModedeğeriniHorizontalolarak 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.
- Hiyerarşi bölmesinde
Driving Surface Manageradlı nesnenin seçili olduğundan emin olun. - İnceleyici'de, oyun nesnenize
ARRaycastManagerbileş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.
- Hiyerarşi bölmesinde
Driving Surface Manageradlı nesnenin seçili olduğundan emin olun. - İnceleyici'de, oyun nesnenize
DrivingSurfaceManagerbileş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
- Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır...'ı tıklayın.
- 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.

- 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 belirtilenPlane Prefaböğesini oluşturur.Driving Surface Planeprefab'inde, belirli birARPlaneiçin ağ oluşturan birARPlaneMeshVisualizerbileş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
- Ekranın alt kısmındaki Proje bölmesinde Öğeler > Başlangıç Paketi'ne gidin.
- Reticle Prefab'ı, projenin Hierarchy pane'ine sürükleyerek sahneye yerleştirin.
- Hiyerarşide artı işareti seçin.
- İnceleyicide Add Component'ı (Bileşen Ekle) tıklayın. Başlangıç paketindeki
ReticleBehaviourkomut dosyasını ekleyin. Bu komut dosyası, nişangahı kontrol etmek için bazı standart metinler içerir. ReticleBehaviourkomut dosyası, daha önce oluşturduğunuzDriving Surface Manageröğesine bağlıdır. Bu nedenle,Driving Surface Managerseçiciyi tıklayarak bağımlılığı ekleyin. Sahne sekmesini seçin veDriving Surface Managersimgesini belirleyin.

ReticleBehaviour öğesini düzenleme
ReticleBehavior komut dosyası, nişangahı cihazın görüntü alanının ortasındaki düzleme yerleştirir.
ReticleBehaviour.cskomut dosyasınıScriptalanını çift tıklayarak açın.- Kamerayı
ViewToScreenPointkullanarak ekranın merkezini belirleyin. Aşağıdakileri eklemek içinUpdate()yöntemini düzenleyin:
var screenCenter = Camera.main.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
- 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.
hitslistesine sorgu göndererek önemli yer kesişim noktasını belirleyin.DrivingSurfaceManageriç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);
}
hitbir sonuç içeriyorsa buGameObjectöğ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
- Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır...'ı tıklayın.
- 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
- Hiyerarşi'de yeni bir boş
GameObjectoluşturun. Car Spawnerolarak yeniden adlandırın.- Oluşturduğunuz nesneyi seçin. Hiyerarşi bölmesinde,
CarManagerbileşenini eklemek için Bileşen Ekle'yi tıklayın. - 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üşü
- Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır'ı tıklayın.
- 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.
- Hiyerarşide yeni bir boş
GameObjectoluşturun. Package Spawnerolarak yeniden adlandırın.- Oluşturduğunuz nesneyi seçin. Hiyerarşi bölmesinde,
PackageSpawnerbileşenini eklemek için Bileşen Ekle'yi tıklayın. - 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
- 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.
- Arabanızı paketin bulunduğu yere sürün.
- 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
- Hierarchy'de AR Session Origin'i genişletin ve AR Camera nesnesini seçin.
- Inspector'da AR Camera Manager komut dosyasını genişletin.
- Işık Tahmini alanını Her şey olarak değiştirin.

Yönlü ışığı değiştirme
- Hierarchy (Hiyerarşi) bölümünde Directional Light (Yönlü Işık) nesnesini seçin.
- Buna
LightEstimationbileşenini ekleyin. Başlangıç Paketindeki bu bileşen, ışıklandırma değişikliklerine abone olmak için bazı standart metinler 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
- Değişikliklerinizi test etmek için Dosya > Oluştur ve Çalıştır'ı tıklayın.
- Sahnedeki nesnelere baktığınızda, ortamın ışıklandırmasına bağlı olarak renklendirildiklerini fark edebilirsiniz.
- 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
ARPlaneManagernasıl kullanılır? - Sanal geometriyle kesişimleri bulmak için
Raycastnasıl kullanılır? - Sahnenizi aydınlatmak için
ARLightEstimationDatakullanma
Sonraki adımlar
- Unity'nin AR Foundation örneklerine göz atın.
- AR Foundation belgelerine göz atın.
- Google'ın Unity'nin AR Foundation'ı için ARCore Uzantıları ile ilgili dokümanlarını inceleyin.
Bonus atamalar
Burada oluşturduğunuz oyunu geliştirmek istiyorsanız aşağıdaki fikirleri değerlendirebilirsiniz:
PackageManageryeni bir paket oluşturduğundaTextMeshProöğ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.