วิดีโอเกม 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/)