ARCore SDK สำหรับอินเทอร์เฟซ iOS กับ ARKit เพื่อให้บริการ Cloud Anchor ทำให้คุณสามารถแชร์ Anchor ระหว่างอุปกรณ์ iOS และ Android ใน ในสภาพแวดล้อมเดียวกัน
ดูวิธีใช้ ARCore Cloud Anchor API หรือบริการ ARCore Cloud Anchor ในแอปของคุณเอง
ข้อกำหนดเบื้องต้น
- Xcode เวอร์ชัน 13.0 ขึ้นไป
- CocoaPods 1.4.0 ขึ้นไปหากใช้ CocoaPods
- อุปกรณ์ Apple ที่เข้ากันได้กับ ARKit ที่ใช้ iOS 12.0 ขึ้นไป (ต้องมีเป้าหมายการทำให้ iOS 12.0 ขึ้นไปใช้งานได้)
หากคุณเพิ่งเริ่มใช้ Cloud Anchor ให้ทำดังนี้
โปรดตรวจสอบว่าคุณเข้าใจกระบวนการที่ใช้ในการโฮสต์และแก้ไขระบบคลาวด์ โฆษณา Anchor
อ่านการเริ่มต้นอย่างรวดเร็วเพื่อดูความต้องการของระบบ และคำแนะนำในการติดตั้ง
ดูตัวอย่าง Cloud Anchor
เปิดใช้ Cloud Anchor ในแอป
หากต้องการใช้ Cloud Anchors API คุณต้องสร้าง
GARSessionConfiguration
และตั้งค่าพร็อพเพอร์ตี้ cloudAnchorMode
สำหรับรายการดังกล่าว ตามที่อธิบายไว้ใน
กำหนดค่าเซสชัน ARCore ใน iOS ใช้
setConfiguration:error: (GARSession)
เพื่อกำหนดค่าการกำหนดค่า
คุณต้องเปิดใช้ ARCore API ด้วย สำหรับแอปพลิเคชันของคุณ
โฮสต์และแก้ไข Anchor
คุณโฮสต์และแก้ไข Cloud Anchor ได้ด้วย ARCore Cloud Anchor API API รวมเมธอด Callback สำหรับการดำเนินการที่เสร็จสมบูรณ์ และออบเจ็กต์ในอนาคต ที่ใช้ตอบแบบสำรวจได้
โฮสต์ Anchor
การโฮสต์ ARAnchor
จะวางสมอไว้ในระบบพิกัดร่วมสำหรับ
พื้นที่ทางกายภาพ
คำขอของโฮสต์จะส่งข้อมูลภาพไปยังเซิร์ฟเวอร์ของ Google ซึ่งแมปARAnchor
ตำแหน่งในระบบพิกัดที่แสดงถึงพื้นที่ทางกายภาพปัจจุบัน ต
คำขอของโฮสต์ที่สำเร็จจะแสดงรหัส Cloud Anchor ใหม่ซึ่งสามารถแชร์และ
ซึ่งใช้เพื่อแก้ไขแท็ก Anchor ในภายหลัง
- (void)addAnchorWithTransform:(matrix_float4x4)transform {
self.arAnchor = [[ARAnchor alloc] initWithTransform:transform];
[self.sceneView.session addAnchor:self.arAnchor];
__weak ExampleViewController *weakSelf = self;
self.hostFuture = [self.cloudAnchorManager
hostCloudAnchor:self.arAnchor
completion:^(NSString *anchorId, GARCloudAnchorState cloudState) {
[weakSelf handleHostAnchor:anchorId cloudState:cloudState];
}
error:nil];
[self enterState:HelloARStateHosting];
}
แก้ไขแท็ก Anchor
การแก้ไข ARAnchor
จะทำให้อุปกรณ์ Android และ iOS เข้าถึงพื้นที่ทางกายภาพที่กำหนดได้
เพื่อเพิ่ม Anchor ที่โฮสต์ก่อนหน้านี้
ไปยังฉากใหม่
คำขอแก้ไขจะส่งรหัส Anchor ในระบบคลาวด์พร้อมข้อมูลภาพแก่เซิร์ฟเวอร์ของ Google จากเฟรมปัจจุบัน เซิร์ฟเวอร์จะพยายามจับคู่ข้อมูลภาพนี้ ด้วยภาพของตำแหน่งที่มีการทำแผนที่ Cloud Anchor ที่โฮสต์อยู่ในปัจจุบัน วันและเวลา การแก้ไขสำเร็จ จะมีการเพิ่ม Anchor ใหม่ในเซสชันและแสดงผล
- (void)resolveAnchorWithIdentifier:(NSString *)identifier {
GARResolveCloudAnchorFuture *garFuture =
[self.gSession resolveCloudAnchorWithIdentifier:identifier
completionHandler:completion
error:&error];
}
// Pass the ARFRame to the ARCore session every time there is a frame update.
// This returns a GARFrame that contains a list of updated anchors. If your
// anchor's pose or tracking state changed, your anchor will be in the list.
- (void)cloudAnchorManager:(CloudAnchorManager *)manager didUpdateFrame:(GARFrame *)garFrame {
for (GARAnchor *garAnchor in garFrame.updatedAnchors) {
if ([garAnchor isEqual:self.garAnchor] && self.resolvedAnchorNode) {
self.resolvedAnchorNode.simdTransform = garAnchor.transform;
self.resolvedAnchorNode.hidden = !garAnchor.hasValidTransform;
}
}
}
รูปแบบแบบสำรวจ GARSession
ที่ไม่บังคับ
หากคุณใช้ Metal หรือต้องการตัวเลือกแบบสำรวจ และแอปของคุณทำงานที่
อย่างน้อย 30 fps ให้ใช้รูปแบบต่อไปนี้เพื่อส่งผ่าน ARFrame
ไปยัง
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
โควต้า API
ARCore API มีโควต้าต่อไปนี้สำหรับแบนด์วิดท์คำขอ
ประเภทโควต้า | สูงสุด | ระยะเวลา | ใช้กับ |
---|---|---|---|
จำนวน Anchor | ไม่จำกัด | ไม่มี | โปรเจ็กต์ |
คำขอสำหรับโฮสต์ Anchor | 30 | นาที | ที่อยู่ IP และโปรเจ็กต์ |
คำขอ Anchor แก้ปัญหา | 300 | นาที | ที่อยู่ IP และโปรเจ็กต์ |
ปัญหาที่ทราบและวิธีแก้ไขเบื้องต้น
มีปัญหาที่ทราบ 2-3 รายการเมื่อทำงานกับ ARCore SDK สำหรับ iOS
การตั้งค่ารูปแบบเริ่มต้นทําให้แอปขัดข้องเป็นพักๆ
มีการเปิดใช้การตั้งค่ารูปแบบ GPU Frame Capture และการตรวจสอบ API ของ Metal API ค่าเริ่มต้น ซึ่งบางครั้งอาจทำให้แอปขัดข้องภายใน SDK
วิเคราะห์ข้อขัดข้องของแอป
เมื่อใดก็ตามที่คุณสงสัยว่าเกิดข้อขัดข้อง ให้ตรวจสอบสแต็กเทรซ
หากเห็น MTLDebugComputeCommandEncoder
ในสแต็กเทรซ แสดงว่าอาจเป็นเพราะ
เป็นการตั้งค่าชุดรูปแบบเริ่มต้น
วิธีแก้ปัญหา
ไปที่ Product > Scheme > Edit Scheme…
เปิดแท็บ Run
คลิก Options เพื่อดูการตั้งค่าปัจจุบัน
ตรวจสอบว่าปิดใช้ทั้ง GPU Frame Capture และ Metal API Validation แล้ว
สร้างและเรียกใช้แอป
ดู CocoaPods CHANGELOG
สำหรับปัญหาที่ทราบเพิ่มเติม
ข้อจำกัด
ARCore SDK สำหรับ iOS ไม่รองรับการเรียกใช้เมธอด ARKit setWorldOrigin(relativeTransform:)
ข้อพิจารณาด้านประสิทธิภาพ
การใช้งานหน่วยความจำจะเพิ่มขึ้นเมื่อคุณเปิดใช้ ARCore API คาดหวังว่า การใช้งานแบตเตอรี่ของอุปกรณ์จะเพิ่มขึ้นเนื่องจากการใช้งานเครือข่ายและการใช้งาน CPU มากขึ้น