F1 2020 電玩遊戲將以位元組數組 ( byte[]
) 的形式向您提供 UDP 資料包。遊戲將廣播多種不同類型的資料包。匯入以下命名空間以使用讀取資料的基礎資源:
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;
}
}
例如,您可能需要找到特定TelemetryPacket
隨附的CarStatusPacket
。為此:
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/ ) 下