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/) 下