วิดีโอเกม F1 2020 จะมอบแพ็คเกจข้อมูล UDP ให้คุณในรูปแบบของอาร์เรย์ไบต์ ( byte[] ) มีแพ็กเก็ตข้อมูลหลายประเภทที่เกมจะออกอากาศ นำเข้าเนมสเปซต่อไปนี้เพื่อใช้ทรัพยากรพื้นฐานสำหรับการอ่านข้อมูล:
using Codemasters.F1_2020;
แพ็กเก็ตทุกประเภทมาจากคลาสพื้นฐานเดียวกัน นั่นคือ Packet คลาส Packet มีคุณสมบัติดังต่อไปนี้:
PacketFormat - อธิบายเกมที่มาจากแพ็คเก็ต (F1 2020)
GameMajorVersion - เวอร์ชันหลักของเกม ณ เวลาที่ออกอากาศ
GameMinorVersion - เวอร์ชันรองของเกม ณ เวลาที่ออกอากาศ
PacketVersion
PacketType - ประเภทของแพ็คเก็ตข้อมูลนี้ (เช่น การวัดและส่งข้อมูลทางไกล สถานะ ข้อมูลรอบ ฯลฯ)
UniqueSessionId - ID เฉพาะของเซสชันของคุณ
SessioTime - การประทับเวลาของเซสชันปัจจุบันเมื่อมีการบันทึกและออกอากาศแพ็กเก็ตนี้
FrameIdentifier - การจัดกลุ่มแพ็คเก็ตข้อมูลนี้เป็นของอะไร
PlayerCarIndex - ดัชนีรถยนต์ของผู้เล่นในอาร์เรย์ฟิลด์ในแพ็กเก็ตที่เกี่ยวข้องทั้งหมด
SecondaryPlayerCarIndex - หากคุณกำลังเล่นผู้เล่นสองคน (แยกหน้าจอ) นี่จะเป็นดัชนีของผู้เล่นคนที่ 2 ในอาร์เรย์ฟิลด์
หากต้องการบอกว่าอาร์เรย์ของไบต์ที่คุณได้รับเป็นแพ็กเก็ตประเภทใด ให้ใช้ CodemastersToolkit ตัวแปร bytes ด้านล่างจะมาจากการออกอากาศการวัดและส่งข้อมูลทางไกลของคุณ หรือจากไฟล์ดีซีเรียลไลซ์หากคุณบันทึกการวัดและส่งข้อมูลทางไกลไว้บนดิสก์
byte[] bytes; //Your telemetry data package
PacketType pt = CodemastersToolkit.GetPacketType(bytes);
Console.WriteLine(pt.ToString());
เอาต์พุตคอนโซลด้านบน: "CarTelemetry"
เนื่องจากเรารู้ว่าแพ็คเกจข้อมูลนี้เป็นแพ็กเก็ตการตรวจวัดทางไกล เราจึงสามารถสร้างแพ็คเกจการตรวจวัดทางไกลได้:
TelemetryPacket tp = new TelemetryPacket();
tp.LoadBytes(bytes);
คลาส TelemetryPacket มีอาร์เรย์ของ CarTelemetryData หนึ่งชุดสำหรับรถแต่ละคันในภาคสนาม
ตามตัวอย่าง โค้ดด้านล่างจะพิมพ์แรงดันคันเร่งที่คนขับทุกคนใช้ในขณะที่ข้อมูลนี้ถูกเผยแพร่
foreach (TelemetryPacket.CarTelemetryData ctd in tp.FieldTelemetryData)
{
Console.WriteLine(ctd.Throttle.ToString());
}
แพ็กเก็ตจำนวนมากมีรูปแบบคล้ายกันดังที่เห็นข้างต้นด้วย TelemetryPacket
คุณสามารถแปลงแพ็คเกจอาร์เรย์ไบต์ทั้งหมดที่คุณได้รับ ตัวอย่าง:
List<byte[]> telemetry;
Packet[] packets = CodemastersToolkit.BulkConvertByteArraysToPackets(telemetry);
จากนั้นคุณสามารถแปลงแต่ละแพ็กเก็ตจากอาร์เรย์ที่ส่งคืนของแพ็กเก็ตได้ ตัวอย่างเช่น การแปลง Packet เป็น TelemetryPacket :
foreach (Packet p in packets)
{
if (p.PacketType == PacketType.CarTelemetry)
{
TelemetryPacket telpack = (TelemetryPacket)p;
}
}
ตัวอย่างเช่น คุณอาจต้องค้นหา CarStatusPacket ที่มาพร้อมกันสำหรับ TelemetryPacket หนึ่งๆ เมื่อต้องการทำสิ่งนี้:
TelemetryPacket telpack;
CarStatusPacket csp = (CarStatusPacket)telpack.GetRelatedPacket(packets, PacketType.CarStatus);
**หากก่อนหน้านี้คุณใช้ Codemasters.F1_2020.Analysis เนมสเปซ และตอนนี้พบว่าหายไป: เนมสเปซการวิเคราะห์ถูกย้ายภายใต้แพ็คเกจ ApexVisual.F1_2020 NuGet (https://www.nuget.org/packages/ApexVisual.F1_2020/)