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

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

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

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

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

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

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

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

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

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

ตรวจสอบว่าคุณเข้าใจแนวคิด 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 อยู่ใน Container Object แล้ว ให้แยกไบต์ของข้อมูลที่กำหนดเอง

// 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!
}

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