データのシリアライズ

ヘルパー機能を使って IMultipeerNetworking 用データをシリアライズする。

シリアライズヘルパー

MultipeerNetworking(またはARNetworking)オブジェクトを介してデータを送信するには、 byte[] である必要があります。APIの利便性を高めるために、ARDKには、一般的に使用されるオブジェクトタイプをネットワーク経由で渡せるように byte[] をシリアライズし、到達時にそれをデシリアライズするためのユーティリティスクリプトが付属しています。

Vector3 の使用例は次のとおりです。

using System.IO;
using Niantic.ARDK.Utilities.BinarySerialization;

private static byte[] SerializeVector3(Vector3 vector)
{
  using (var stream = new MemoryStream())
  {
    GlobalSerializer.Serialize(stream, vector);
    return stream.ToArray();
  }
}
using System.IO;
using Niantic.ARDK.Utilities.BinarySerialization;

private static Vector3 DeserializeVector3(byte[] data)
{
  using (var stream = new MemoryStream(bytes))
    return (Vector3)GlobalSerializer.Deserialize(stream);
}

複数のフィールドやオブジェクトを BinarySerializer で1つの byte[] にシリアライズすることができます。

using System.IO;
using Niantic.ARDK.Utilities.BinarySerialization;

private static byte[] SerializePositionAndRotation(Vector3 position, Vector3 rotation)
{
  using (var stream = new MemoryStream())
  {
    using (var serializer = new BinarySerializer(stream))
    {
      serializer.Serialize(position);
      serializer.Serialize(rotation);
      // here any other object can be serialized.
      return stream.ToArray();
    }
  }
}
using System.IO;
using Niantic.ARDK.Utilities.BinarySerialization;

private static Vector3[] DeserializePositionAndRotation(byte[] data)
{
  using (var stream = new MemoryStream(data))
  {
    using (var deserializer = new BinaryDeserializer(stream))
    {
      var result = new Vector3[2];
      result[0] = (Vector3)deserializer.Deserialize(); // position
      result[1] = (Vector3)deserializer.Deserialize(); // rotation
      // The number and order of the Deserialize() calls should match the Serialize() calls.
      return result;
    }
  }
}

こちらもご覧ください

低レベルネットワーク

高レベルネットワークAPI(Hlapi)