Bu codelab hakkında
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
- 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 yüklü olmalıdır.
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.
- Pencere > Paket Yöneticisi'ni tıklayarak açın.
- 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.
- Öğ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ğından derleme platformunu Android olarak değiştirin:
- Dosya > Derleme Ayarları'nı açın.
- 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.
- Soldaki 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 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.
SampleScene
içindeki tüm oyun nesnelerini silin.
- 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:
- 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.
- Proje bölmesinde Öğeler > Ayarlar'a giderek ForwardRenderer öğesini bulun.
- ForwardRenderer (Yönlendirici) seçin.
- İ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
- Cihazınızın fişe takılı ve ADB hata ayıklama özelliğinin açık olduğundan emin olun.
- 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.
- 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.
- 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. AR Uçak Yöneticisi eklemek için İnceleme bölmesinde Bileşen Ekle'yi tıklayın.
Plane Prefab
alanını ayarlayarakARPlaneManager
öğesini yapılandırın:- Nesne Seç penceresini açmak için
None
simgesinin yanındaki düğmeyi tıklayın. - Öğeler sekmesini seçin ve Sürüş Yüzeyi Düzlemi'ni arayın.
- Nesne Seç penceresini açmak için
Başlangıç paketindeki bu hazır model, uçak dekorasyonu olarak kullanılacak pürüzlü bir zemin dokusu sağlar.
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.
- 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çili olduğundan 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ırma
- 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
hazır bileşeninde, belirli birARPlane
için bir ağ oluşturan birARPlaneMeshVisualizer
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
- Ekranın alt tarafındaki Proje bölmesinde Öğeler > Başlangıç Paketi.
- Nişangah hazır öğesini 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ı, nişangahı kontrol etmek için bazı standart metinler içerir. ReticleBehaviour
komut dosyası, daha önce oluşturduğunuzDriving 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ındanDriving 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.
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 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.
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);
}
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);
Nişangahı test etme
- Değişikliklerinizi test etmek için 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, 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
- Hiyerarşi'de yeni bir boş
GameObject
oluşturun. - Albümü
Car Spawner
olarak yeniden adlandır. - Oluşturduğunuz nesneyi seçin.
CarManager
bileşenini eklemek için Hiyerarşi bölmesinde Bileşen Ekle'yi tıklayın. - 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üşü
- 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:- 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
- 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 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
- 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önlü ışığı değiştirme
- Hiyerarşi'de Yönsel Işık nesnesini seçin.
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.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
- Dosya > Derleme ve Çalıştırma başlıklı makaleyi inceleyin.
- Sahnedeki nesnelere baktığınızda, çevrenin aydınlatması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 ışığı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
- 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ıyla 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, bu nesne o uçağa kilitlenecek şekilde güncellenir.