Table of Contents
مقدمه ای بر ایجاد تجربه واقعیت افزوده با واقعیتKit
واقعیت افزوده (AR) محتوای دیجیتال را بر جهان فیزیکی قرار می دهد، ایجاد تجارب تعاملی که واقعیت را با اشیاء مجازی ترکیب می کند، چارچوب واقعیت مجازی اپل توسعه دهندگان را با یک API سطح بالا، اجرا کننده برای ساخت برنامه های AR برای iOS، این مقاله گسترش می دهد در اصول، پوشش، معماری اجزای نهاد، تعامل کاربر، انیمیشن، همکاری فیزیک، و بهینه سازی، با استفاده از واقعیت های عملی و درک چگونگی ایجاد یک واقعیت جلاد.
شروع کار: پروژه راه اندازی و الزامات
برای توسعه برنامه های AR با واقعیتKit، شما نیاز به Xcode 13 یا بعد، یک دستگاه iOS فیزیکی با تراشه A9 یا جدیدتر (iPhones SE، 6s و بعد؛ iPads 5 gen و بعد)، و یک حساب توسعه دهنده اپل برای تست.
یک پروژه جدید Xcode ایجاد کنید و برنامه واقعیت افزوده را انتخاب کنید، SwiftUI یا UIKit بسته به اولویت شما - واقعیتKit به طور یکپارچه با هر دو کار می کند.
در عوض، شما می توانید واقعیتKit را به یک پروژه موجود با وارد کردن چارچوب اضافه کنید:
import RealityKit
import ARKit
از این رو، در این زمینه به عنوان مثال، به عنوان مثال، در این زمینه به عنوان یک گزینه در طراحی سایت خود استفاده کنید.
برای جزئیات بیشتر، به اسناد Apple (FLT:0 RealityKit [FLT 1 ] و ARKit] مراجعه کنید.
درک سیستم Entity-Component
واقعیت کیت از یک معماری بهره می برد ، که برای ساخت صحنه ها اساسی است یک ظرف است که اجزای آن را تعریف می کند، رفتار، ظاهر، فیزیک و سایر خواص نهاد را به عنوان مثال، یک تعریف یک 3D، یک شبیه سازی محتوا / مقیاس فیزیکی.
این رویکرد مدولار باعث می شود که شما به راحتی اشیاء پیچیده را ایجاد کنید، اجزای متصل را ایجاد کنید و آنها را در یک سلسله مراتب قرار دهید. ریشه صحنه یک (FLT:8) است که محتوای مجازی را به یک مکان واقعی شناخته شده توسط ARKit متصل می کند.
ایجاد یک Anchor و اضافه کردن محتوا
رایج ترین لنگر یک لنگر هواپیما است که محتوا را به سطوح افقی یا عمودی متصل می کند.در اینجا چگونگی قرار دادن یک مدل 3D در هر هواپیمای شناخته شده را ذکر می کنیم:
// 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)
همچنین می توانید لنگرها را در موقعیت های خاص جهان با استفاده از ایجاد کنید یا محتوای متصل را برای شناسایی تصاویر یا چهره ها با استفاده از [FLT 11] یا ایجاد کنید.
ساخت یک صحنه پایه AR با واقعیتKit
فراتر از قرار دادن مدل ساده، شما باید چرخه عمر AR View را در یک برنامه UIKit مدیریت کنید، یک کنترل کننده دید خود را اضافه کنید:
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
}
}
در این میان، در این میان، در این میان، به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به کار گرفته می شود.
تعامل کاربر: Gestures و Hit-Testing
برای تعاملی برنامه AR خود، شما باید ضربه های کاربر، کشیدن و چرخش را کنترل کنید. RealityKit تست های ضربه ای را برای شناسایی اینکه کاربر چه نهادی را لمس کرده است، فراهم می کند.
به مکان یا Interact ضربه بزنید
در این میان، به [[FLT 17]]، ، ، ، [[رده:رده:رده:
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)
}
ریبری در برابر سطوح دنیای واقعی قابل اعتماد تر از آزمایش های سازمانی است که می خواهید محتوا را روی یک هواپیما قرار دهید.
کشیدن و چرخش با Gestures
برای فعال کردن کشیدن، یک [FLT 22] را به اشتراک بگذارید و موقعیت شرکت را در امتداد هواپیما به روز کنید.
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)
}
برای اجرای قوی، استفاده از را از بسته واقعیتKit (FLT 26) یا [FLT 27] مالکیت حرکتی در iOS 16+ در نظر بگیرید.
ویژگی های پیشرفته: انیمیشن ها، فیزیک و همکاری
انیمیشن ها
RealityKit از انیمیشن های اسکلتی (از فایل های USDZ) و انیمیشن های مبتنی بر مالکیت پشتیبانی می کند تا یک انیمیشن داخلی را بر روی یک مدل با منابع انیمیشن ایجاد کند:
guard let model = try? ModelEntity.load(named: "dancing_character") else { return }
model.playAnimation(model.availableAnimations[0].repeat(duration: .infinity), transitionDuration: 0.5, startsPaused: false)
همچنین می توانید پارامترهایی را که از روش های (FLT 29) استفاده می کنند، تغییر دهید، یا از آن استفاده کنید.
شبیه سازی فیزیک
و در این میان، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر و رو می شود:
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)
جعبه بر روی هواپیما سقوط می کند و به برخوردها پاسخ می دهد.
جلسات همکاری AR
با جلسات مشترک ARKit، چندین دستگاه می توانند همان دنیای AR را به اشتراک بگذارند.با تنظیم گزینه های همکاری جلسه:
config.collaborationEnabled = true
arView.session.run(config)
ارسال (FLT36) به دیگر همتایان از طریق یک چارچوب شبکه (به عنوان مثال، Multipeer Connectivity) هر صحنه واقعیتKit دستگاه همگام سازی شده است.این ایده آل برای بازی های چند نفره یا بررسی های طراحی مشترک است.
بهینه سازی عملکرد برای تجربه های AR صاف
برنامه های AR خواستار نرخ فریم بالا (60 fps) برای جلوگیری از بیماری حرکت هستند:
- استفاده از مدل های کم-poly و بهینه سازی فایل های USDZ. Keep vertex کم است و از بافت های فشرده (KTX یا PNG) استفاده کنید.
- [در این میان] از تعداد اشخاص [در این زمینه] استفاده کنید.
- [[۱] [۱۰] [۱] [۱۰] [۱] [۳]] با استفاده از instancing، همان مدل را در چندین نهاد به اشتراک بگذارید.
- [در این میان] [در این میان] کیفیت را با در دستگاه های قدیمی تر [در برابر آن] مقایسه کنید.
- استفاده از [FLT 39] بارگیری مدل برای جلوگیری از مسدود کردن مدل های اصلی بار در صف پس زمینه و ارائه آنها در هنگام آماده.
- [در این باره]، [در این باره]، [[۱]]، [[۱]]: [[۱۰]] [۱] [۱۰] [۱] [۱] [۱] [۱] [۱۰] [۱] [۱۰] [۱] [۱] [۱۰] [۱] [۱] [۱] [۱] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۱] [۱] [۳] [۳] [۳] [۳] [۱] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۱] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳
برای راهنمایی دقیق، ببینید که اپل (FLT:0) تجربه ARmmersive را تجربه می کند و تست و عیب یابی تجربه AR خود را [FLT3].
طراحی رابط های AR بصری
تجربه کاربری در AR با برنامه های سنتی متفاوت است.
- بازخورد تشخیص چهره : تجسم هواپیماهای شناسایی شده با یک شبکه یا طرح، بنابراین کاربران می دانند که کجا اشیاء را قرار دهند.
- از نظر طبیعی [FLT 1]: استفاده از دستکاری مستقیم (نفت، کشیدن، پیپ) به جای کنترل انتزاعی.
- نشانه های بصری اثبات [FLT 1]: نهادهای تعاملی با نور بالا یا نشان دادن یک مو زمانی که کاربر در یک هواپیمای معتبر اشاره می کند.
- [FLT: 1 ] [[: RealityKit می تواند به طور خودکار نور دنیای واقعی را تخمین بزند و آن را به اشیاء مجازی اعمال کند.
- تست در محیط های مختلف : نورپردازی مختلف، بافت ها و اندازه اتاق ها بر ردیابی AR تاثیر می گذارد.
دانلود بازی Debugging and Testing AR Apps
تست دستگاه واقعی غیر قابل مذاکره است و از ویژگی های Xcode استفاده می کند.
- قابلیت استفاده از (FLT:42) برای نشان دادن نقاط ویژگی، منشأ جهان و چارچوب های سیمی فیزیک
- استفاده از ورق]] برای مشاهده زمانی که سطوح شناسایی شده است.
- به اضافه کنید تا حالت و خطا را بررسی کنید.
- تست در چندین نسل دستگاه (به عنوان مثال، آیفون 8 در مقابل آیفون 14 Pro) برای اندازه گیری عملکرد.
برای تست UI خودکار، می توانید داده های AR را به صورت خودکار به تصویر بکشید، اما تست دستی برای دقت ضروری است.
نتیجه گیری
واقعیتKit بسیاری از پیچیدگی توسعه AR را خلاصه می کند، اما ساخت یک تجربه جلای نیاز به توجه به معماری سازمانی، تعامل کاربر، عملکرد و طراحی دارد.با ترکیب تکنیک های پوشش داده شده - از تنظیمات صحنه و حرکت به فیزیک و همکاری - شما می توانید برنامه های AR را ایجاد کنید که کاربران را درگیر می کنند و از پتانسیل کامل سخت افزار iOS استفاده می کنند.