เพิ่มข้อมูลที่กำหนดเองขณะบันทึกบน AR Foundation ที่กำหนดเป้าหมายเป็น Android

Recording & Playback API ช่วยให้คุณบันทึกเซสชันและใช้แทนฟีดกล้องแบบเรียลไทม์ได้ อย่างไรก็ตาม ไฟล์บันทึกเหล่านี้จะมีเฉพาะข้อมูลวิดีโอและเซ็นเซอร์เท่านั้น นอกจากนี้ คุณยังเพิ่มข้อมูลที่กำหนดเองลงในไฟล์บันทึกเซสชันและรับข้อมูลดังกล่าวระหว่างการเล่นได้ ราวกับว่าข้อมูลเป็นส่วนหนึ่งของรูปภาพจากกล้อง

ARCore จะไม่รวมข้อมูลที่กำหนดเองไว้ในไฟล์บันทึกโดยอัตโนมัติ แต่ช่วยให้คุณเพิ่มข้อมูลที่กำหนดเองลงในเฟรม ARCore ขณะบันทึก และดึงข้อมูลเดียวกันนั้นจากเฟรมระหว่างการเล่นได้ คุณจะต้องเขียนโปรแกรมแอปในลักษณะที่ผู้ใช้จะได้รับข้อมูลที่คาดหวังเมื่อเล่นเซสชันซ้ำ

Use Case สําหรับข้อมูลที่กําหนดเอง

การเพิ่มข้อมูลที่กำหนดเองลงในไฟล์บันทึกเสียงจะช่วยขยายความเป็นไปได้สำหรับแอป AR ต่อไปนี้เป็นกรณีการใช้งานที่เฉพาะเจาะจง

ใช้ AR ได้ทุกที่ทุกเวลา

ก่อนหน้านี้ ผู้ใช้เข้าถึงประสบการณ์ AR ได้ก็ต่อเมื่ออยู่ในสถานที่และเวลาที่เหมาะสมเท่านั้น หากต้องการวางโคมไฟ AR ในห้องนั่งเล่น ผู้ใช้ต้องยืนอยู่ที่ตำแหน่งนั้นเพื่อดูว่าโคมไฟจะมีลักษณะอย่างไร เมื่อใช้แทร็กที่กำหนดเอง ผู้ใช้จะบันทึกห้องนั่งเล่นเพียงครั้งเดียวและเพิ่มเฟอร์นิเจอร์เสมือนจริงลงในฉากได้ทุกเมื่อที่ต้องการ

สร้างประสบการณ์ AR ร่วมกัน

การที่ไม่ต้องมีเซสชันการถ่ายทอดสดช่วยให้ผู้ใช้มีตัวเลือกในการแก้ไข AR มากขึ้น ซึ่งทำให้ผู้ใช้สามารถสร้างและเข้าถึงเนื้อหา AR ที่ไม่ซ้ำกันได้ทุกที่ทุกเวลา เช่น บันทึกสภาพแวดล้อมหนึ่งๆ เพิ่มเอฟเฟกต์ความจริงเสริม แล้วแชร์กับเพื่อนๆ

ข้อกำหนดเบื้องต้น

โปรดทำความเข้าใจแนวคิดพื้นฐานของ AR และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ

เริ่มต้นการบันทึกด้วยข้อมูลที่กำหนดเอง

ทําตามขั้นตอนต่อไปนี้เพื่อเริ่มต้นการบันทึกด้วยข้อมูลที่กําหนดเอง หากต้องการเริ่ม หยุด และตรวจสอบเซสชันการบันทึก โปรดดูหัวข้อบันทึกและเล่นเซสชัน AR ซ้ำ

  1. รับ ARCoreRecordingConfig
  2. สร้าง Track ใหม่ที่มี UUID ที่กําหนดเอง ระบบจะบันทึกข้อมูลที่กำหนดเองทั้งหมดไว้ที่นี่
  3. เพิ่ม Track ลงใน ARCoreRecordingConfig ที่คุณสร้างระหว่างการกำหนดค่าเซสชัน
// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
var track = new Track {
 Id = Guid.Parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;

ระบบจะถือว่าแทร็กใหม่ทั้งหมดเป็นการบันทึกแยกต่างหาก โดยแต่ละแทร็กที่บันทึกจะมี UUID ของตัวเอง

กำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติม

กำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติมที่อธิบายการบันทึกเซสชัน เช่น คุณสามารถ "ติดแท็ก" แทร็กได้โดยเพิ่มโน้ตที่อธิบายสถานที่และเวลาที่บันทึกเซสชัน เช่น "บันทึกเซสชันนี้ที่ห้างสรรพสินค้าในช่วงบ่าย"

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;

กำหนดค่าแทร็กด้วยประเภท MIME

กำหนดค่าแทร็กด้วยประเภท MIME ที่อธิบายประเภทข้อมูลที่บันทึกไว้ในแทร็กเพื่อให้เข้ากันได้กับเครื่องมือภายนอก

หากคุณไม่ได้ระบุประเภท ระบบจะจัดหมวดหมู่ข้อมูลเป็น application/text ARCore จะไม่สนใจประเภท MIME เมื่ออ่านข้อมูล

// Set a MIME type for compatibility with external tools.
track.MimeType = "text/csv";

บันทึกแทร็กข้อมูลที่กำหนดเอง

ข้อมูลแทร็กที่กำหนดเองทั้งหมดจะได้รับการบันทึกลงในเฟรม เวลาที่คุณบันทึกข้อมูลลงในเฟรมคือเวลาที่ระบบจะแสดงข้อมูลระหว่างการเล่น ตัวอย่างเช่น หากคุณเรียกใช้ RecordTrackData() ที่มีค่า "A" ที่ 00:07:02 คุณจะได้รับ "A" กลับมาที่เครื่องหมาย 00:07:02 เมื่อเล่นแทร็ก

หากต้องการบันทึกแทร็กข้อมูลที่กำหนดเอง ให้กด RecordTrackData()

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  // Convert the lamp data into a byte array.
  var lampData = new byte[] { (byte) Lamp.FLOOR };  // a floor lamp
  recordingManager.RecordTrackData(trackGuid, lampData);
}

เล่นแทร็กข้อมูลที่กำหนดเอง

ดึงข้อมูลที่กำหนดเองจากการบันทึกเซสชันระหว่างการเล่น

เริ่มต้นการเล่น

การเริ่มต้นการเล่นด้วยข้อมูลที่กำหนดเองจะเหมือนกับการเริ่มเล่นการบันทึกเซสชันตามปกติ

แสดงข้อมูลที่กำหนดเอง

เรียกใช้ GetUpdatedTrackData() เพื่อเรียกข้อมูลที่กำหนดเองซึ่งบันทึกไว้ในเฟรม คุณสามารถดึงข้อมูลแทร็กหลายรายการจากเฟรมเดียวกันได้ ตัวอย่างเช่น หากคุณเรียกใช้ RecordTrackData() 2 ครั้งในเฟรมเดียวกันระหว่างการบันทึก คุณจะได้รับ TrackData 2 รายการระหว่างการเล่น

// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);

เมื่อ TrackData อยู่ในออบเจ็กต์คอนเทนเนอร์ ให้ดึงข้อมูลไบต์ที่กำหนดเอง

// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
  var data = trackData.Data;
  Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}

สิ่งที่จะเกิดขึ้นหลังจากนี้