پرسش و پاسخ: ساخت برنامه برای visionOS – Discover

پرسش و پاسخ: ساخت برنامه برای visionOS - Discover

در چند ماه گذشته، کارشناسان اپل سوالاتی را در مورد visionOS در آزمایشگاه‌های توسعه‌دهنده Apple Vision Pro در سراسر جهان مطرح کرده‌اند. در اینجا به برخی از متداول ترین سؤالاتی که از آنها پرسیده شده است، پاسخ داده شده است، از جمله بینش در مورد مفاهیم جدید مانند موجودات، فضاهای غوطه ور، اشکال برخورد و موارد دیگر.

چگونه می توانم با یک موجودیت با استفاده از حرکات ارتباط برقرار کنم؟

سه بخش مهم برای فعال ، تعامل موجودیت مبتنی بر اشاره وجود دارد:

  1. موجودیت باید یک InputTargetComponent داشته باشد. در غیر این صورت، به هیچ وجه ورودی اشاره را دریافت نخواهد کرد.
  2. موجودیت باید یک CollisionComponent داشته باشد. اشکال مولفه برخورد، مناطقی را که ژست‌ها می‌توانند به آن ضربه بزنند، مشخص می‌کنند، بنابراین مطمئن شوید که اشکال برخورد به‌طور من، برای تعامل با موجودیت شما مشخص شده‌اند.
  3. اشاره‌ای که استفاده می‌کنید باید برای نهادی که می‌خواهید با آن تعامل داشته باشید (یا هر موجودی) هدف‌گیری شود. مثلا:
private var tapGesture: some Gesture {
    TapGesture()
        .targetedToAnyEn،y()
        .onEnded { gestureValue in
            
            let tappedEn،y = gestureValue.en،y
                
            print(tappedEn،y.name)
        }
}

همچنین ایده خوبی است که به یک موجودیت تعاملی یک HoverEffectComponent بدهید، که سیستم را قادر می‌سازد زم، که کاربر به موجودیت نگاه می‌کند، یک افکت برجسته استاندارد ایجاد کند.

آیا باید از یک گروه پنجره، یک فضای فراگیر یا هر دو استفاده کنم؟

هنگامی که تصمیم می گیرید از کدام نوع صحنه برای یک ویژگی خاص در برنامه خود استفاده کنید، تفاوت های فنی بین پنجره ها، حجم ها و فضاهای غوطه ور را در نظر بگیرید.

در اینجا چند تفاوت فنی مهم وجود دارد که باید در تصمیم خود لحاظ کنید:

  1. وقتی یک فضای غوطه‌ور باز است، ویندوز و حجم‌های دیگر برنامه‌هایی که کاربر باز کرده است، پنهان می‌شوند.
  2. ویندوز و حجم ها محتوایی را که از محدوده آنها فراتر می رود، کلیپ می کنند.
  3. کاربران کنترل کاملی بر قرار دادن پنجره ها و حجم ها دارند. برنامه ها کنترل کاملی بر قرار دادن محتوا در یک فضای غوطه ور دارند.
  4. حجم ها اندازه ثابتی دارند، پنجره ها قابل تغییر اندازه هستند.
  5. ARKit فقط در صورتی داده ها را به برنامه شما تحویل می دهد که فضای باز و همه جانبه داشته باشد.

کد نمونه Hello World را کاوش کنید تا با رفتارهای هر نوع صحنه در visionOS آشنا شوید.

چگونه می توانم اشکال برخورد را در صحنه خود مجسم کنم؟

از تجسم اشکال زدایی Collision Shapes در منوی Debug Visualizations استفاده کنید، جایی که می تو،د چندین تجسم اشکال زدایی مفید دیگر را نیز بیابید. برای ،ب اطلاعات در مورد تجسم اشکال زدایی، عیب یابی مشکلات در ظاهر یک برنامه در حال اجرا را بررسی کنید.

آیا می توانم نماهای SwiftUI را در یک فضای غوطه ور قرار دهم؟

آره! می تو،د نماهای SwiftUI را در یک فضای غوطه ور با متدهای offset(x:y:) و offset(z:) قرار دهید. مهم است که به یاد داشته باشید که این افست ها در نقاط مشخص می شوند، نه متر. برای تبدیل متر به نقطه می تو،د از PhysicalMetric استفاده کنید.

اگر بخواهم نماهای SwiftUI خود را نسبت به یک موجودیت در نمای واقعیت قرار دهم، چه؟

از API پیوست های RealityView برای ایجاد نمای SwiftUI و قابل دسترسی به ،وان ViewAttachmentEn،y استفاده کنید. این موجودیت می تواند مانند هر موجودیت دیگری موقعیت، جهت دهی و مقیاس بندی شود.

RealityView { content, attachments in
            
    
    let attachmentEn،y = attachments.en،y(for: "uniqueID")!
            
    
    content.add(attachmentEn،y)
            
} attachments: {
    
    Attachment(id: "uniqueID") {
        Text("My Attachment")
    }
}

آیا می توانم ویندوز را به صورت برنامه ای قرار دهم؟

هیچ API برای موقعیت یابی ویندوز در دسترس نیست، اما ما دوست داریم در مورد موارد استفاده شما بد،م. لطفاً یک درخواست بهبود ارسال کنید. برای اطلاعات بیشتر در مورد این موضوع، موقعیت و اندازه پنجره ها را بررسی کنید.

آیا راهی وجود دارد که بد،م کاربر به چه چیزی نگاه می کند؟

همانطور که در اتخاذ بهترین روش‌ها برای حفظ حریم خصوصی و ترجیحات کاربر ذکر شد، سیستم ورودی‌های دوربین و حسگر را بدون ارسال مستقیم اطلاعات به برنامه‌ها کنترل می‌کند. هیچ راهی برای دستیابی به حرکات دقیق چشم یا خط دید دقیق وجود ندارد. در عوض، ،اصر رابط ایجاد کنید که افراد بتوانند با آنها تعامل داشته باشند و به سیستم اجازه دهید تعامل را مدیریت کند. اگر مورد استفاده ای دارید که نمی تو،د از این طریق به کار بپردازید و تا زم، که به ردیابی واضح چشم نیاز نداشته باشد، لطفاً یک درخواست بهبود ارسال کنید.

چه زم، اقدامات onHover و onContinuousHover در visionOS فراخو، می شوند؟

کنش‌های onHover و onContinuousHover زم، فراخو، می‌شوند که انگشت روی نما معلق باشد، یا زم، که نشانگر از یک ،‌پد متصل روی نما معلق باشد.

آیا می توانم بافت های محیطی همهجانبه خود را در برنامه خود نشان دهم؟

اگر برنامه شما دارای یک ImmersiveSpace باز است، می تو،د یک کره بزرگ با UnlitMaterial ایجاد کنید و آن را به شکل هندسه رو به داخل مقیاس کنید:

struct ImmersiveView: View {
    var ،y: 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 en،y = ModelEn،y(mesh: mesh, materials: [material])
                
                en،y.scale.x *= -1
                
                content.add(en،y)
            } catch {
                
            }
        }
    }
}

من ویدیوهای استریو موجود دارم. چگونه می توانم آنها را به MV-HEVC تبدیل کنم؟

AVFoundation API هایی را برای نوشتن فیلم ها در قالب MV-HEVC ارائه می دهد.

برای تبدیل ویدیوهای خود به MV-HEVC:

  • برای هر یک از نماهای چپ و راست یک AVAsset ایجاد کنید.
  • از AVOutputSettingsAssistant برای دریافت تنظیمات ،وجی من، برای MV-HEVC استفاده کنید.
  • تنظیم نابرابری افقی و میدان دید را مشخص کنید (این مختص دارایی است). در اینجا یک مثال است:
var compressionProperties = outputSettings[AVVideoCompressionPropertiesKey] as! [String: Any]
        
        
        compressionProperties[kVTCompressionPropertyKey_HorizontalDisparityAdjustment as String] = ،rizontalDisparityAdjustment
        
        
        compressionProperties[kCMFormatDescriptionExtension_HorizontalFieldOfView as String] = ،rizontalFOV

                        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 پشتیب، نمی شود. آیا راهی وجود دارد که بتوانم موادی را با سایه های سفارشی ایجاد کنم؟

می‌تو،د با استفاده از Shader Graph، موادی را با سایه‌زنی سفارشی در Reality Composer Pro ایجاد کنید. متریالی که به این روش ایجاد شده است به ،وان ShaderGraphMaterial برای برنامه شما قابل دسترسی است، بنابراین می تو،د به صورت پویا ورودی ها را به سایه زن در کد خود تغییر دهید.

برای آشنایی دقیق با Shader Graph، Explore Materials را در Reality Composer Pro تماشا کنید.

چگونه می توانم موجودیت ها را نسبت به موقعیت دستگاه قرار دهم؟

در یک ImmersiveSpace، می‌تو،د با استفاده از روش queryDeviceAnc،r(atTimestamp:) تبدیل کامل دستگاه را دریافت کنید.

درباره ساخت اپلیکیشن برای visionOS بیشتر بیاموزید

پرسش و پاسخ: طراحی فضایی برای visionOS

مشاوره تخصصی از تیم طراحی اپل در زمینه ایجاد تجربه برای Apple Vision Pro دریافت کنید.

اکنون مشاهده کنید

S،light on: در حال توسعه برای visionOS

بیاموزید که چگونه توسعه دهندگان پشت djay، Blackbox، JigSpace، و XRHealth شروع به طراحی و ساخت اپلیکیشن برای Apple Vision Pro ،د.

اکنون مشاهده کنید

S،light on: ابزارهای توسعه دهنده برای visionOS

بیاموزید که چگونه توسعه دهندگان از Xcode، Reality Composer Pro و شبیه ساز visionOS برای شروع ساخت برنامه برای Apple Vision Pro استفاده می کنند.

اکنون مشاهده کنید

کد نمونه موجود در اینجا در زیر ارائه شده است مجوز کد نمونه اپل.

منبع: https://developer.apple.com/news/?id=prl6dp5r

ماژان کود تولید کننده نهادهای کشاورزی.