I daha önce denendi birleştirerek Unity oyun motoru ve Çarpıntı (Google'ın yerel olarak derlenmiş çapraz platform uygulamaları için kullanıcı arayüzü araç takımı) 2019'un sonlarında, 2020'nin başlarında; karışık sonuçlarla. O sırada bir iş üzerinde çalışıyordum. AR bir Flutter eklentisinin mevcut olmadığı (ve hala mevcut olmadığı) bir çerçeve olan Vuforia'yı kullanan prototip. Her durumda Flutter aslında bir 2D platformdur, Unity ise en popüler gerçek zamanlı 3D geliştirme araçlarından biridir. Kapak tarafında, Unity yerel hissi veren mobil arayüz için zayıf bir desteğe sahip. Dolayısıyla, bu iki teknolojinin kombinasyonu harika bir eşleşme olmalıdır.
Ayrıca, Unity tarafından oluşturulmuş uygulamaları gömmek için bir Flutter bileşeni zaten Flutter eklenti dizininde yayınlanmıştı. Bununla birlikte, o zamanlar, Google'ın yerel yazılımı olan ne Vuforia ne de ArCore ile iki teknoloji arasında istikrarlı bir entegrasyonu doğrulayamıyordum. AR araç takımı. Ancak yaklaşım, Apple'ın AR yazılım kiti ARKit ile doğrulandı, ancak ARKit'in sağlamadığı bir çapraz platform çözümü arıyordum. Bu yüzden Unity-Flutter AR yaklaşımını bir tarafa koymak zorunda kaldım.
O zamandan beri animasyon olmayanlar için ARCore ve Flutter ile çalıştım. AR nesne yerleştirme ve bu, uzaktan kumandayı kullanarak iyi çalışır GLB formatındaki dosyalar. Ancak son zamanlarda, bir kez daha daha karmaşık bir AR kullanıcı durumuyla çalışmak için yeni bir fırsatım var. Unity'nin fizik ve animasyon yeteneklerini gerektirecek bir şey. İlk Unity-Flutter denememden bu yana bir buçuk yıl sonra, yaklaşımı yeniden test etmek için yeni bir fırsatım var.
1. VR, trans hümanizmi kitlelere nasıl getirebilir?
2. Artırılmış Gerçeklik (AR) Yemek Hizmetleri Sektörünü Nasıl Yeniden Şekillendiriyor?
4.ExpiCulture — Orijinal Bir Dünyayı Seyahat Eden Sanal Gerçeklik Deneyimi Geliştirme
beta sürümlerini takip ettim Birlik MARS 2020 boyunca büyük ilgi gördü. MARS, Unity'nin AR geliştirme için Profesyonel düzeyde bir iş akışı olarak tanımladığı şeydir. sağlar AR geliştiricilerin karmaşık, veri odaklı uygulamalar yazmasına, kod düzenlemelerinden sonra derlemeleri beklemeden düzenleyici içinde test etmesine ve "gerçek dünyaya duyarlı bir şekilde uyum sağlayan çalışma zamanı mantığına" sahip uygulamalar sunmasına olanak tanır.
MARS aracı, son derece beğenilen Wallace & Grommet AR etkileşimli hikaye anlatımı uygulamasının arkasındaki yaratıcı ekip tarafından benimsendi — Büyük Düzeltme. Ayrıca, üç İngiliz tasarım/yazılım şirketinden oluşan yaratıcı bir konsorsiyum olan projenin arkasındaki ekip, uygulamanın kullanıcı arayüzü için Flutter'ı seçti ve böylece görünüşte harika sonuçlar veren gömülü Unity-Flutter yaklaşımını izledi. Konsorsiyumun adı olan Fictioneers'da ürün müdürü Beth, projenin hedefini şöyle açıkladı:
“Akıllı telefonunuza anlamlı içerik sunan yenilikçi bir uygulama yaratmanın amaçlandığı bir Hikaye Anlatma deneyimi”
Beth, Ürün Müdürü @ Fictioneers
ile ilk denediğimde daha önce çok sayıda zorluk yaşamıştım. Çarpıntı Birlik Widget'ıperformans, Unity iletişim sorunları ve genel Unity sürümü uyumluluk sorunları dahil. Ancak bu, Kasım 3.0.0'de bu sorunların çoğunu ele alan ana 2020 sürümünün yanı sıra, Mart 4.0.0'in başlarında iOS ile ilgili bir dizi kritik düzeltme ve performans sorununu içeren başka bir 2021 sürümünün yayınlanmasından çok önceydi. diğer iyileştirmeler.
İlk testim için Unity MARS paketinde sağlanan örnek oyunu kullanmaya karar verdim. Yüzeyler üzerinde hareket edebilen ve hatta zemin seviyesinde net bir geçiş olmadığında bir yüzeyden diğerine sıçrayabilen hareketli bir robot içeren karmaşık bir oyun dahil olmak üzere birkaç örnek sahne vardır. Robot, AR alanında da üretilen yüzen taşları toplar. Bu, denemem için güzel, nispeten karmaşık bir test vakası gibi görünüyordu.
Testler için Unity'nin en son 2020 LTS sürümüyle çalıştım ve yeni küçük sürümler çıktıkça güncel tuttum; yazarken 2020.3.11f1 kullanıyorum
Flutter 2.1 kullanıyorum ve bir Google Pixel 3XL fiziksel cihazla test ediyorum.
Gradle derleme dosyalarım ve yerel özelliklere dayalı yerel özellikler için gereken birkaç özel ince ayar vardı. Bunların çoğu, widget'lar dokümantasyon sayfasında belirtilmiştir. Bunları da bu yazıda not ettim.
Genel olarak, sorunsuz bir süreçti. Karmaşık oyun sahnesini kurduktan ve Flutter Widget Unity paketini kurduktan sonra, bir APK oluşturabildim ve bunun Unity yerleşik gömülü bir Flutter uygulaması olduğunu netleştirmek için birkaç Material AppBar Widget'ı ile basit bir Flutter UI kurdum. boyut. Ve güzel çalıştı!
Mevcut bir proje prototipi amacıyla, gerçek dünya zemininin üzerine yüzen sanal nesneler yerleştirmek istiyorum.
Bu nesneler, fiziksel çarpışmalara tepki vermelidir, örneğin, AR deneyiminin kullanıcısı bir nesneye girdiğinde, ilk konumuna ve durumuna geri dönmeden önce, bu nesne kilterden düşecek, ileri geri sallanacaktır.
Nesneler, hareket ederken kullanıcının konumuna bağlı olarak deneyime 'beslenir', bu nedenle çalışma zamanında dinamik olarak yüklenirler ve önceden yapılandırılmamışlardır; Unity uygulamasının dışından ve bulut tabanlı bir veritabanındaki verilere dayandıkları için.
Akışkanlığı en üst düzeye çıkarmak için, MARS ile iyi bir uygulama buldum, yumurtlama noktaları. Ortaya çıkma noktaları, benim durumumda zemin olan yüzey düzlemleri veya diğer ilgi noktalarıdır. Bir yumurtlama noktası, üzerine sanal bir nesnenin yerleştirileceği istenen düzlemde bir konumdur. MARS'ın önemli bir özelliği, bu kavramlar için kullandığı dikkatle düşünülmüş anlambilimdir.
Örneğin, gerçek dünyada önceden yapılandırılmış bir koşulla eşleşen bir özelliğe, vekil. MARS belgeleri, proxy'yi, bir uygulamanın etkileşimde bulunabileceği fiziksel bir gerçek dünya nesnesinin veya alanının sanal bir temsili olarak tanımlar - dijital içerik yerleştirme ( prefabrik) üzerine, vb. Unity kılavuzu şöyle devam eder: proxy'leri şu şekilde düşünün: tutucuları bir uygulamadaki dijital içerikle gerçek dünyayı birbirine bağlayan Örneğin, bir yüz, bir masa, bir duvar veya bir zemin. Geçerli proxy'leri tanımlarken uygulanacak mevcut koşullar arasında boyut, yükseklik, dolgu ve benzeri yer alır. Bununla birlikte, Unity'nin uzun vadeli hedefi, zaman veya mevcut hava durumu gibi daha fazla soyutlamayı eşleştirmek için entegre etmektir (yağmur düşünün!).
Bir yumurtlama noktası, gerçek dünyadaki bir konumdur ve bir vekil, bir karakter gibi bir gameobject'in görüneceği (yumurtlayacağı) yer. Deneylerim ve MARS örnek karmaşık oyunundan ilham almak için bir MARS kullandım. çoğaltıcı hedeflenen yüzeyde sınırsız sayıda yumurtlama noktası oluşturmak için, her biri bir sentetik nesne atamak için ekli anlamsal etiket. sonra daha fazlasını yaratabilirim vekiller istediğim ile OyunNesnesi (karakter, vb) yumurtlama noktalarından bir anlamsal etiket koşulu. Özetlemek gerekirse, genelleştirilmiş yumurtlama noktaları, tespit edilir edilmez gerçek zamanlı olarak oluşturulur. Bunlar geneldir, çünkü yalnızca bazı temel koşullara sahiptirler. Benim durumumda, bir metrekareden fazla olan yatay ve dikey düzlemler mevcuttur. Daha sonra bu önceden belirlenmiş yumurtlama noktalarında çok daha hassas bir kontrolle karakterlerimi ve diğer AR nesneleri oluşturabilirim; örneğin, onları yalnızca belirli bir süre sonra veya belirli bir sırayla veya gelecekte yalnızca yumurtlama noktası belirli bir renk veya doku olduğunda isteyebilirim!
Genel olarak MARS ve Unity/Flutter'ı birlikte kullanırken dikkat edilmesi gereken birkaç nokta vardır. İşte bunlardan birkaçı, yol boyunca not ederek, umarım bu küçük ama bazen engelleyici tuzaklarla karşılaşan herkes için faydalı olabilir.
Fizik — Unity'nin daha gerçekçi bir his için yerleşik Fizik kullanımına izin veren ve aynı zamanda daha az genelleyici olan Rigid Body yaklaşımını kullanmanızı tavsiye ederim. İşte, AR'ye uyarlanmamış popüler bir oyunda bunu gösteren harika bir video buldum - bu, AR'ye uyarlanabilir. ( https://youtu.be/qdskE8PJy6Q)
Çalışma Zamanı Proxy'leri — çalışma zamanında yeni proxy'ler oluştururken, örneğin bir veritabanındaki harici olaylar yeni AR nesnelerini tetiklediğinde ve tetiklediğinde, Proxy'nin SyncModifications() yöntemini kullanarak yeni durumu ana MARS sistemiyle senkronize etmek esastır.
MARS DB, performans için bir arka plan iş parçacığı üzerinde çalışan daha optimal bir biçimde saklanan durum verilerinin kendi kopyalarına sahip olduğundan bu gereklidir. Tüm proxy'ler dahil her şey denetçide önceden yapılandırıldığında, eşitleme otomatik olarak gerçekleştirilir. Ancak çalışma zamanında değişiklik yaparken, yeni/değiştirilmiş proxy'nin sisteme bildirilmesi gerekir. Bu konuda bana yardımcı olan ve bunu açıklayan Unity Technologies'den Thomas Key'e çok teşekkürler: "SyncModifications()'ı çağırmak, sorgu db'sini bir değişiklik hakkında bilgilendirir ve bir "değişiklik" değişiklik eylemi planlar. db sorgusu zamanlama iş parçacığı, bir eylem arabelleği aracılığıyla ana iş parçacığıyla aralıklı olarak eşitlendiğinden, bir değişiklik değişikliğinin alınması birkaç kare alabilir.
İlgili sınıflara bağlantılar:
https://docs.unity3d.com/Packages/c…Proxy.html#Unity_MARS_Proxy_SyncModifications
https://docs.unity3d.com/Packages/c…_ProxyGroup_SyncModifications_System_Boolean_
gölgeler — Bir Android fiziksel cihazla test ediyorum, bu nedenle ARCore, ağır kaldırma işini yapan bileşendir. Neden olduğundan emin değilim ama GameObjects, MARS kullanırken uçaklarda otomatik olarak gölgeler oluşturmuyor. Bunun manuel olarak ayarlanması gerekir. Flutter/ARCore denemelerimde ve geliştirmemde bu, ARCore yerel ve animasyonsuz GLB nesneleri ile doğal olarak çalıştığı için şaşırdım. Her neyse, Unity ile bunu animasyonlu nesnelerim için manuel olarak ayarlamak zorunda kaldım. Bu, GameObject'ime bir Shader ve bir Rigidbody bileşeni ekleyerek sağlandı. Kullandığım Shader burada bulunabilir: https://github.com/dilmerv/ARFoundationOcclusion/tree/feature/URPOcclusion/Assets/Shaders
Bu, daha sonra ana Plan Görselleştirici bileşenine atanan ana Plan Görselleştirici Düzleminin bir klonuna uygulanır.
Çarpıntı — benim kullanım durumum için birkaç ince ayar gerekliydi, bunlar kuruluma bağlı olarak gerekli olabilir veya olmayabilir.
androidappbuild.gradle
ekle/düzenle:
unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist
lintOptions {'InvalidPackage' checkReleaseBuilds false öğesini devre dışı bırakın}
gradle.özellikler:
unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist
androidunityLibrarynuild.gradle
eklemek:
ndk.dir=C:/Program Files/Unity/Hub/Editor/2020.3.8f1/Editor/Data/PlaybackEngines/AndroidPlayer/NDK
def getNdkDir() { Properties local = new Properties() local.load(new FileInputStream("${rootDir}/local.properties")) return local.getProperty('ndk.dir') }
local.properties'e ekleyin:
ndk.dir=C:/Program Files/Unity/Hub/Editor/2020.3.8f1/Editor/Data/PlaybackEngines/AndroidPlayer/NDK
İşte ilkel 3B nesneler kullanarak yaptığım deneylerin bir demosunun bağlantısı.
Bu nesneler çalışma zamanında dinamik olarak oluşturulur ve mevcut yumurtlama noktalarına yerleştirilir. Nesneler birbirleriyle fiziksel olarak etkileşir ve algılanan düzlemlere ve birbirlerine gölgeler bırakır. Bu, projem için bir gereklilik olduğundan, işlevsellik bir kayan etki içeriyor; ve kullanıcının nesnelerden birini kendisine doğru getirmesini ve tekrar orijinal yerine geri döndürmesini sağlayan, gerçekçi bir fizik efekti ile yolundaki herhangi bir şeyle çarpışan bir özellik. Ayrıca MARS konum belirleme koşullarını kullanıyorum ve bu çalışmayı tek bir oturumda 100 metrelik bir mesafede test ettim ve onayladım. AR deneyimi, bu iki teknolojinin birlikte çalıştığını göstermek için bir barebone Flutter UI içine yerleştirilmiştir.
Unity MARS ve Flutter Unity Widget, daha önce yaklaşımı denediğimden beri, son 12 ayda çok yol kat etti. Unity 2020 ve Flutter 2.1 kullanarak süreci nispeten basit ve istikrarlı buldum. MARS iş akışı, yeni yapılara gerek kalmadan simülasyon ortamıyla geliştirme sürecinin erken aşamasını gerçekten hızlandırır. MARS'ı kullanmak, geliştiricinin, yakın gelecekte hava durumu algılama, nesne tanıma ve benzeri gibi yeni AR özellikleri/koşulları eklemenin iş akışına doğal olarak yerleştirilebileceği bilgisi ile tamamen işlevsel bir AR deneyiminin çerçevesini oluşturmasına olanak tanır.
Sonraki adımlarım, Flutter ve Unity arasındaki kıyaslama testi iletişimini içeriyor. Özellikle, doğrudan Unity Firebase (db) bağlantısı ile Flutter Unity ile birleştirilmiş Flutter Firebase arasındaki performans farkının ne olacağını anlamak istiyorum. Şu anda felsefem, Unity'yi kesinlikle 3D / AR işlevselliği için kullanmak ve diğer tüm iş mantığı ve sunum katmanı için Flutter'a öncelik vermek. Önümüzdeki haftalarda olayların bu tarafında bulgularımı ve karar verme sürecimi yayınlayacağım.
Coinsmart. Europa İçindeki En İyi Bitcoin-Börse
Source: https://arvrjourney.com/using-unity-mars-and-flutter-to-author-cross-platform-augmented-reality-ar-experiences-6aec23a80ac1?source=rss—-d01820283d6d—4