データのシリアライズ
ヘルパー機能を使って 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; } } }