GerçekKitle Gerçek Deneyimleri Oluşturmaya Giriş

Artırılmış Gerçeklik (AR) fiziksel dünyaya dijital içerik aşırı yükleme, varlık sorumlu mimarisi, kullanıcı etkileşimi, animasyon, fizik, işbirliği ve optimizasyon ile geliştiricilere, Swift ve RealityKit kullanarak AR deneyimlerinizi nasıl oluşturacağınızı pratik bir anlayış sağlayacaktır.

Başlayın: Proje Kurulum ve Gereksinimler

AR uygulamaları GerçeklikKit ile geliştirmek için, Xcode 13 veya daha sonra, A9 çip veya yeni bir (iPhones SE, 6s ve daha sonra; iPads 5th gen ve daha sonra), ve bir Apple Developer hesabı test için gereklidir.

Yeni bir Xcode projesi oluşturun ve [[Dönetici:0)Augmented Reality App) şablonu seçin SwiftUI veya UIKit tercihinize bağlı olarak seçin – RealityKit hem de tam olarak çalışır.The şablon bir alışkanlık kurulum sağlar.

Alternatif olarak, çerçeveyi ithal ederek mevcut bir projeye GerçeklikKit ekleyebilirsiniz:

import RealityKit
import ARKit

Sağın sağ tarafı:0)NSCameraUsageDescription) sizin [[Üye/2) ayarlandığında, uygulamanın neden kamera erişimine ihtiyaç duyduğunu açıklayan bir kullanıcı dostu dize.

Daha fazla ayrıntı için Apple'ın [[0)RealityKit belgeleri[Dönem:0) ve [[Dönem:2)ARKit belgesi[Dönetici: 3).

Entity-Component Sistemini Anlayın

GerçeklikKit, bir kaliteye sahip olmak için bir uyarı kullanır.[0]Entity-Component[DD) Mimarlık, hangi sahneleri inşa etmek için temeldir. AnurFLT:3) Bu, bileşenleri tanımlayan bir konteynerdir.

Bu modüler yaklaşım karmaşık nesneler oluşturmak için kolaylaşır. Varlıklar yaratırsınız, bileşenler yaratırsınız ve onları hiyerarşik olarak düzenlersiniz. Sahnenin kökü bir aritFLT:7). (tipik olarak bir şekilde AİLFLT:8), ARKit tarafından tespit edilen gerçek dünya konumuna bağlar.

Bir Anchor oluşturmak ve İçerik Ekle

En yaygın demir, içeriği yatay veya dikey yüzeylere bağlayan bir uçak demiridir. İşte herhangi bir bilinen uçakta 3D modeli nasıl yerine getireceğiniz:

// Load a USDZ model
guard let model = try? ModelEntity.load(named: "robot") else { return }

// Create an anchor on any horizontal plane
let anchor = AnchorEntity(plane: .horizontal, classification: .any, minimumBounds: [0.2, 0.2])

// Attach the model to the anchor
anchor.addChild(model)

// Add the anchor to the ARView’s scene
arView.scene.addAnchor(anchor)

Ayrıca, belirli dünya pozisyonlarında demirler oluşturabilirsiniz, yoksa görüntüleri tespit etmek veya kullanımları tespit etmek için içerik ekleyebilir veya [[DÜT:11) veya [[DÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN

GerçekKitle Temel Bir AR Sahnesi Yapın

Basit model yerleştirmenin ötesinde, AR görüntü yaşam döngüsünü yönetmek zorundasınız. bir UIKit uygulamasında, görünüm kontrolörünize bir taneciklik ekleyin:

class ViewController: UIViewController {
 @IBOutlet var arView: ARView!

 override func viewDidLoad() {
 super.viewDidLoad()
 arView.session.delegate = self
 // Configure session
 let config = ARWorldTrackingConfiguration()
 config.planeDetection = [.horizontal, .vertical]
 arView.session.run(config)
 loadContent()
 }

 func loadContent() {
 // Create and add anchors
 }
}

SwiftUI için, SwiftUI hiyerarşisine köprüler 16.30'a gömülür.

Kullanıcı Etkileşimi: Gestures and HitTesting

AR uygulamanızı interaktif hale getirmek için, kullanıcı dokunuşlarını, sürüklemeleri ve rotasyonları ele almanız gerekir. RealityKit, kullanıcının hangi kişiye dokunduğunu tanımlamak için hit test eder.

Yere veya Interact

Affüz'e ait bir uyarıda bulunan bir söze göre, "Aman'a" (Sekiz) "(S)" denir.

arView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))))

@objc func handleTap(_ sender: UITapGestureRecognizer) {
 let location = sender.location(in: arView)
 if let entity = arView.entity(at: location) {
 // Scale the entity
 var transform = entity.transform
 transform.scale *= 1.2
 entity.move(to: transform, relativeTo: entity.parent, duration: 0.3, timingFunction: .easeInOut)
 } else {
 // Place a new object at the tapped location
 placeObject(at: location)
 }
}

func placeObject(at screenPoint: CGPoint) {
 let results = arView.raycast(from: screenPoint, allowing: .estimatedPlane, alignment: .any)
 guard let result = results.first else { return }
 let anchor = AnchorEntity(world: result.worldTransform)
 let box = ModelEntity(mesh: .generateBox(size: 0.1), materials: [SimpleMaterial(color: .blue, isMetallic: false)])
 anchor.addChild(box)
 arView.scene.addAnchor(anchor)
}

Gerçek dünya yüzeylere karşı Raycasting, bir uçakta içeriği yerleştirmek istediğinizde varlık tarafından vurulandan daha güvenilirdir.Bu nedenle bu için [[Gruplarca kullanım için.

Drag ve Rotate with Gestures

sürüklenme, aritFLT:22'i ekleyin ve uçağın konumunu uçakta güncelle.For rotasyon için, aİLFLT:23 kullanın:

let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
arView.addGestureRecognizer(panGesture)

@objc func handlePan(_ sender: UIPanGestureRecognizer) {
 let location = sender.location(in: arView)
 guard let entity = arView.entity(at: location) else { return }
 guard let parent = entity.parent as? HasAnchoring else { return }
 // Translate the entity in the anchor’s local plane
 let translation = sender.translation(in: arView)
 // ... (convert to 3D movement)
}

Güçlü bir uygulama için, RealityKit'un “Ücretsiz” paketinden veya www.FLT:27) yararlanın.

Gelişmiş Özellikler: Animasyonlar, Fizik ve İşbirliği

Animasyonlar

RealityKit hem iskelet animasyonları ( USDZ dosyalarından) hem de mülk tabanlı animasyonları destekler. animasyon kaynakları ile bir modelde inşa edilmiş animasyonu tetikler:

guard let model = try? ModelEntity.load(named: "dancing_character") else { return }
model.playAnimation(model.availableAnimations[0].repeat(duration: .infinity), transitionDuration: 0.5, startsPaused: false)

Ayrıca animate transformleri, opakity veya daha önce görülen özel parametreler. karmaşık diziler için, [[ENFLT:30) veya [[DÜŞT:31'i kullanın.

Fizik Simülasyonu

Yerküre, çarpışmalar ve kuvvetlere olanak sağlamak için birFLT:32 aparat verin:

let box = ModelEntity(mesh: .generateBox(size: 0.1), materials: [SimpleMaterial(color: .red, isMetallic: false)])
box.position = [0, 0.5, 0] // above a plane

let physicsBody = PhysicsBodyComponent(
 massProperties: .default,
 material: .generate(staticFriction: 0.8, dynamicFriction: 0.5, restitution: 0.3),
 mode: .dynamic
)
box.components.set(physicsBody)

let collision = CollisionComponent(shapes: [.generateBox(size: [0.1, 0.1, 0.1])])
box.components.set(collision)
// Add box to anchor anchor.addChild(box)

Kutu uçakta düşecek ve çarpışmalara cevap verecek. Statik nesneler ( duvarları gibi) İZFLT:34 olmalıdır.

Collaborative AR Sessions

ARKit'in işbirliği seansları ile, birden fazla cihaz aynı AR dünyasını paylaşabilir. Oturumun işbirliği seçeneklerini belirleyerek enable işbirliği:

config.collaborationEnabled = true
arView.session.run(config)

SendFLT:36, bir ağ çerçevesi (örneğin Multipeer Connectivity) ile diğer akranlarına göre (örneğin, Multipeer Connectivity).Her cihazın RealityKit sahne senkronize kalır. Bu, multiplayer oyunlar veya paylaşılan tasarım yorumları için idealdir.

Parlak AR Deneyimleri için Performansı

AR uygulamaları, hareket hastalıklarını takip etmek için yüksek çerçeve oranları (60 fps) talep eder:

  • [[Dönetici:0) Düşük-poli modellerini [Döneticileri) kullanın ve optimize edilmiş USDZ dosyaları kullanın.Gruplar düşük sayılır ve sıkıştırılmış dokular (KTX veya PNG).
  • [FONT=0]Limit the number of entities in the scene. UseurFLT:37] to debug say.
  • [FONT:0)Mini not çekme çağrılarını [Döneticileri kullanarak) döndürür - birden çok varlıkla aynı modeli paylaşır.
  • [0][0)[değiştir | kaynağı değiştir] [Döneticileri, eski cihazlar üzerinde bulunan [[DüzDÜT:0).
  • [FONT:0)UseENFLT:39] Model yükleme), ana konuyu engellemeyi önlemek için. Arka kuyruktaki yükleme modelleri ve hazır olduklarında onları sunmak.
  • [FONT:0) AR seansı yaşam döngüsü[Dönetici: çağrı: $ 0:40) Uygulama arka plana gittiğinde ve konfigürasyonu ön planda yeniden çalıştırın.

ayrıntılı rehberlik için Apple'ın “Dönetici:0) Immersive AR Deneyimi) ve )Testing ve Sorun Gidering Your AR Experience).

Intuitive AR Interfaces

AR'daki kullanıcı deneyimi geleneksel uygulamalardan farklıdır. Bu ilkeleri takip edin:

  • [[DÜDÜ:0)Surface algılama geri bildirim geri bildirim[[DÜT:1): Bir ağla tespit edilen uçaklara göre algılanır veya kullanıcıların nesneler nerede yer alacağını bilir.
  • [FONT:0)Gestures doğal hissetmeli : Doğrudan manipülasyonu kullanın (tap, sürükle, pinch) soyut kontrollerden ziyade.
  • [FONT:0)Provide görsel ipuçları[[Dönetici: Yüksek ışık etkileşimli varlıklar veya geçerli bir uçakta kullanıcı puanları zaman bir çaprazhair göster.
  • [FONT:0]Handle aydınlatma[[[Dönem: RealityKit otomatik olarak gerçek dünya ışıkını tahmin edebilir ve sanal nesnelere uygulayabilir.UseurFLT:41).
  • [FONT=0) Çeşitli ortamlardaki testler[[Dönetici: Farklı aydınlatma, dokular ve oda boyutları AR takipini etkiler. Ortalama koşullar için optimize edin.

Debugging ve Test AR Apps

Gerçek zamanlı test, Xcode'un [[0) kullanım kolaylığı değildir.Affınlık Özellikleri).

  • EnableFLT:42, özel puanlar, dünya kökeni ve fizik tel çerçevelerini göstermek için.
  • UseFLT:43) Yüzeylerin tespit edildiği zaman görmek için oturumlar.
  • Devletin ve hataları izlemek için birFLT:44 ekleyin.
  • Birden fazla cihaz nesillere test edin (örneğin, iPhone 8 vs. iPhone 14 Pro) performans ölçmek için.

Otomatik UI testi için AR verilerini alay edebilirsiniz, ancak manuel test doğruluk için önemlidir.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

GerçeklikKit AR geliştirmenin karmaşıklığını özetliyor, ancak parlatılmış bir deneyim, varlık mimarisine, kullanıcı etkileşimine, performansa ve tasarıma dikkat gerektirir.Brezilyalı bir deneyimle ilgili olarak, tasarım ve tasarıma sahip olan teknikleri birleştirin - sahne kurulumu ve jest işlemlerine ve işbirliğine giriş yaparak – kullanıcıların ve iOS donanımın tam potansiyelini yaratabilirsiniz.