أسئلة وأجوبة: إنشاء تطبيقات لنظام التشغيل VisionOS – اكتشف
على مدار الأشهر القليلة الماضية، طرح خبراء Apple أسئلة حول VisionOS في مختبرات مطوري Apple Vision Pro في جميع أنحاء العالم. فيما يلي إجابات لبعض الأسئلة الأكثر شيوعًا التي تم طرحها عليهم، بما في ذلك الرؤى حول المفاهيم الجديدة مثل الكيانات والمساحات الغامرة وأشكال التصادم وغير ذلك الكثير.
كيف يمكنني التفاعل مع كيان باستخدام الإيماءات؟
هناك ثلاث أجزاء مهمة لتمكين تفاعل الكيان القائم على الإيماءات:
- يجب أن يحتوي الكيان على InputTargetComponent. وإلا فلن يتلقى إدخال الإيماءات على الإطلاق.
- يجب أن يحتوي الكيان على CollisionComponent. تحدد أشكال مكون التصادم المناطق التي يمكن أن تصل إليها الإيماءات فعليًا، لذا تأكد من تحديد أشكال التصادم بشكل مناسب للتفاعل مع كيانك.
- يجب أن تستهدف الإيماءة التي تستخدمها الكيان الذي تحاول التفاعل معه (أو أي كيان). على سبيل المثال:
private var tapGesture: some Gesture {
TapGesture()
.targetedToAnyEntity()
.onEnded { gestureValue in
let tappedEntity = gestureValue.entity
print(tappedEntity.name)
}
}
إنها فكرة جيدة أيضًا إعطاء كيان تفاعلي HoverEffectComponent، والذي يمكّن النظام من تشغيل تأثير تمييز قياسي عندما ينظر المستخدم إلى الكيان.
هل يجب أن أستخدم مجموعة نوافذ أم مساحة غامرة أم كليهما؟
ضع في الاعتبار الاختلافات الفنية بين النوافذ ووحدات التخزين والمساحات الغامرة عندما تقرر نوع المشهد الذي تريد استخدامه لميزة معينة في تطبيقك.
فيما يلي بعض الاختلافات الفنية المهمة التي يجب أن تأخذها في الاعتبار عند اتخاذ قرارك:
- يتم إخفاء النوافذ ووحدات التخزين من التطبيقات الأخرى التي فتحها المستخدم عند فتح مساحة غامرة.
- تقوم النوافذ ووحدات التخزين بقص المحتوى الذي يتجاوز حدودها.
- يتمتع المستخدمون بالتحكم الكامل في وضع النوافذ ووحدات التخزين. تتمتع التطبيقات بالتحكم الكامل في وضع المحتوى في مساحة غامرة.
- المجلدات لها حجم ثابت، والنوافذ يمكن تغيير حجمها.
- يقوم ARKit بتسليم البيانات إلى تطبيقك فقط إذا كان يحتوي على مساحة مفتوحة وغامرة.
استكشف نموذج التعليمة البرمجية لـ Hello World للتعرف على سلوكيات كل نوع مشهد في VisionOS.
كيف يمكنني تصور أشكال التصادم في المشهد الخاص بي؟
استخدم تصور تصحيح أخطاء Collision Shapes في قائمة Debug Visualizations، حيث يمكنك العثور على العديد من تصورات تصحيح الأخطاء المفيدة أيضًا. للحصول على معلومات حول تصورات تصحيح الأخطاء، راجع تشخيص المشكلات في مظهر التطبيق قيد التشغيل.
هل يمكنني وضع طرق عرض SwiftUI في مساحة غامرة؟
نعم! يمكنك وضع طرق عرض SwiftUI في مساحة غامرة باستخدام أساليب الإزاحة(x:y:) والإزاحة(z:). من المهم أن تتذكر أن هذه الإزاحات محددة بالنقاط، وليس بالأمتار. يمكنك استخدام PhysicalMetric لتحويل العدادات إلى نقاط.
ماذا لو كنت أرغب في وضع عروض SwiftUI الخاصة بي بالنسبة إلى كيان ما في عرض واقعي؟
استخدم واجهة برمجة تطبيقات مرفقات RealityView لإنشاء عرض SwiftUI وإتاحته كـ ViewAttachmentEntity. يمكن تحديد موضع هذا الكيان وتوجيهه وقياسه تمامًا مثل أي كيان آخر.
RealityView { content, attachments in
let attachmentEntity = attachments.entity(for: "uniqueID")!
content.add(attachmentEntity)
} attachments: {
Attachment(id: "uniqueID") {
Text("My Attachment")
}
}
هل يمكنني وضع النوافذ برمجياً؟
لا توجد واجهة برمجة تطبيقات متاحة لتحديد موضع النوافذ، ولكننا نود أن نعرف حالة الاستخدام الخاصة بك. يرجى تقديم طلب التحسين. لمزيد من المعلومات حول هذا الموضوع، راجع تحديد موضع النوافذ وتغيير حجمها.
هل هناك أي طريقة لمعرفة ما ينظر إليه المستخدم؟
كما هو مذكور في اعتماد أفضل الممارسات المتعلقة بالخصوصية وتفضيلات المستخدم، يتعامل النظام مع مدخلات الكاميرا وأجهزة الاستشعار دون تمرير المعلومات إلى التطبيقات مباشرة. لا توجد طريقة للحصول على حركات عين دقيقة أو خط رؤية دقيق. بدلاً من ذلك، قم بإنشاء عناصر الواجهة التي يمكن للأشخاص التفاعل معها والسماح للنظام بإدارة التفاعل. إذا كانت لديك حالة استخدام لا يمكنك العمل بها بهذه الطريقة، وطالما أنها لا تتطلب تتبعًا واضحًا للعين، فيرجى تقديم طلب تحسين.
متى يتم استدعاء إجراءات onHover وonContiniousHover على VisionOS؟
يتم استدعاء الإجراءين onHover وonContiniousHover عندما يحوم الإصبع فوق العرض، أو عندما يحوم المؤشر من لوحة التعقب المتصلة فوق العرض.
هل يمكنني عرض أنسجة البيئة الغامرة الخاصة بي في تطبيقي؟
إذا كان تطبيقك يحتوي على ImmersiveSpace مفتوحًا، فيمكنك إنشاء كرة كبيرة باستخدام UnlitMaterial وتوسيع نطاقها بحيث تكون ذات هندسة مواجهة للداخل:
struct ImmersiveView: View {
var body: some View {
RealityView { content in
do {
let mesh = MeshResource.generateSphere(radius: 10)
var material = UnlitMaterial(applyPostProcessToneMap: false)
let textureResource = try await TextureResource(named: "example")
material.color = .init(tint: .white, texture: .init(textureResource))
let entity = ModelEntity(mesh: mesh, materials: [material])
entity.scale.x *= -1
content.add(entity)
} catch {
}
}
}
}
لدي مقاطع فيديو استريو موجودة. كيف يمكنني تحويلها إلى MV-HEVC؟
يوفر AVFoundation واجهات برمجة التطبيقات لكتابة مقاطع الفيديو بتنسيق MV-HEVC. للحصول على مثال كامل، قم بتنزيل نموذج مشروع التعليمات البرمجية تحويل الفيديو ثلاثي الأبعاد جنبًا إلى جنب إلى HEV متعدد العروض.
لتحويل مقاطع الفيديو الخاصة بك إلى MV-HEVC:
- قم بإنشاء AVAsset لكل من طرق العرض اليمنى واليسرى.
- استخدم AVOutputSettingsAssistant للحصول على إعدادات الإخراج التي تعمل مع MV-HEVC.
- حدد تعديل التباين الأفقي ومجال الرؤية (هذا خاص بالأصول). هنا مثال:
var compressionProperties = outputSettings[AVVideoCompressionPropertiesKey] as! [String: Any]
compressionProperties[kVTCompressionPropertyKey_HorizontalDisparityAdjustment as String] = horizontalDisparityAdjustment
compressionProperties[kCMFormatDescriptionExtension_HorizontalFieldOfView as String] = horizontalFOV
let taggedBuffers: [CMTaggedBuffer] = [
.init(tags: [.videoLayerID(0), .stereoView(.leftEye)], pixelBuffer: leftSample.imageBuffer!),
.init(tags: [.videoLayerID(1), .stereoView(.rightEye)], pixelBuffer: rightSample.imageBuffer!)
]
let didAppend = adaptor.appendTaggedBuffers(taggedBuffers,
withPresentationTime: leftSample.presentationTimeStamp)
كيف يمكنني إضاءة المشهد الخاص بي في RealityKit على نظام VisionOS؟
يمكنك إضاءة المشهد الخاص بك في RealityKit على VisionOS من خلال:
- استخدام بيئة الإضاءة التلقائية التي يوفرها النظام والتي يتم تحديثها بناءً على البيئة المحيطة بالعالم الحقيقي.
- توفير الإضاءة المبنية على الصور الخاصة بك عبر ImageBasedLightComponent. لرؤية مثال، قم بإنشاء تطبيق VisionOS جديد، وحدد RealityKit باعتباره Immersive Space Renderer، وحدد Full باعتباره Immersive Space.
أرى أن CustomMaterial غير مدعوم على نظام التشغيل VisionOS. هل هناك طريقة يمكنني من خلالها إنشاء مواد ذات تظليل مخصص؟
يمكنك إنشاء مواد ذات تظليل مخصص في Reality Composer Pro باستخدام Shader Graph. يمكن لتطبيقك الوصول إلى المادة التي تم إنشاؤها بهذه الطريقة باعتبارها ShaderGraphMaterial، بحيث يمكنك تغيير المدخلات إلى التظليل في التعليمات البرمجية الخاصة بك ديناميكيًا.
للحصول على مقدمة تفصيلية عن Shader Graph، شاهد استكشاف المواد في Reality Composer Pro.
كيف يمكنني تحديد موضع الكيانات بالنسبة لموضع الجهاز؟
في ImmersiveSpace، يمكنك الحصول على التحويل الكامل للجهاز باستخدام طريقة queryDeviceAnchor(atTimestamp:).
تعرف على المزيد حول إنشاء تطبيقات لنظام التشغيل VisionOS
سؤال وجواب: التصميم المكاني لنظام التشغيل VisionOS
احصل على مشورة الخبراء من فريق تصميم Apple بشأن إنشاء تجارب لـ Apple Vision Pro.
عرض الآن
تسليط الضوء على: التطوير لنظام VisionOS
تعرف على كيفية قيام مطوري djay وBlackbox وJigSpace وXRHealth بتصميم وبناء تطبيقات لـ Apple Vision Pro.
عرض الآن
تسليط الضوء على: أدوات المطورين لنظام التشغيل VisionOS
تعرّف على كيفية استخدام المطورين لـ Xcode وReality Composer Pro ومحاكي VisionOS لبدء إنشاء تطبيقات لـ Apple Vision Pro.
عرض الآن
يتم توفير نموذج التعليمات البرمجية الموجود هنا ضمن ترخيص نموذج كود Apple.
اكتشاف المزيد من عالم الآيفون
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.