用于 UNET 的通用序列化程序(用于读取字节数组)
此类与 NetworkWriter 配合使用,用于将数据序列化以便用于 UNet 命令、RPC 调用、事件和低级别消息。
using UnityEngine; using UnityEngine.Networking;
public class ExampleScript : MonoBehaviour { // Writing data to a NetworkWriter and then // Converting this to a NetworkReader. void Start() { // The data you add to your writer must be prefixed with a message type. // This is in the form of a short. short myMsgType = 143;
NetworkWriter writer = new NetworkWriter();
// You start the message in your writer by passing in the message type. // This is a short meaning that it will take up 2 bytes at the start of // your message. writer.StartMessage(myMsgType);
// You can now begin your message. In this case we will just use strings. writer.Write("Test data 1"); writer.Write("Test data 2"); writer.Write("Test data 3");
// Make sure to end your message with FinishMessage() writer.FinishMessage();
// You can now access the data in your writer. ToArray() returns a copy // of the bytes that the writer is using and AsArray() returns the // internal array of bytes, not a copy. byte[] writerData = writer.ToArray();
CreateNetworkReader(writerData); }
void CreateNetworkReader(byte[] data) { // We will create the NetworkReader using the data from our previous // NetworkWriter. NetworkReader networkReader = new NetworkReader(data);
// The first two bytes in the buffer represent the size // of the message. This is equal to the NetworkReader.Length // minus the size of the prefix. byte[] readerMsgSizeData = networkReader.ReadBytes(2); short readerMsgSize = (short)((readerMsgSizeData[1] << 8) + readerMsgSizeData[0]); Debug.Log(readerMsgSize);
// The message type added in NetworkWriter.StartMessage // is to be read now. It is a short and so consists of // two bytes. It is the second two bytes on the buffer. byte[] readerMsgTypeData = networkReader.ReadBytes(2); short readerMsgType = (short)((readerMsgTypeData[1] << 8) + readerMsgTypeData[0]); Debug.Log(readerMsgType);
// If all of your data is of the same type (in this case the // data on our buffer is comprised of only strings) you can // read all the data from the buffer using a loop like so. while (networkReader.Position < networkReader.Length) { Debug.Log(networkReader.ReadString()); } } }
NetworkReader | 创建一个新的 NetworkReader 对象。 |
ReadBoolean | 从流中读取一个布尔值。 |
ReadByte | 从流中读取一个字节。 |
ReadBytes | 从流中读取多个字节。 |
ReadBytesAndSize | 从流中读取一个 16 位字节和一个同样大小的字节数组。 |
ReadChar | 从流中读取一个字符。 |
ReadColor | 读取一个 Unity Color 对象。 |
ReadColor32 | 读取一个 Unity color32 对象。 |
ReadDecimal | 从流中读取一个小数。 |
ReadDouble | 从流中读取一个双精度数。 |
ReadGameObject | 从流中读取一个对游戏对象的引用。 |
ReadInt16 | 从流中读取一个带符号的 16 位整数。 |
ReadInt32 | 从流中读取一个带符号的 32 位整数。 |
ReadInt64 | 从流中读取一个带符号的 64 位整数。 |
ReadMatrix4x4 | 读取一个 Unity Matrix4x4 对象。 |
ReadMessage | 一个实用函数,用于从流中读取输入的网络消息。 |
ReadNetworkHash128 | 读取 NetworkHash128 assetId。 |
ReadNetworkId | 从流中读取 NetworkInstanceId。 |
ReadNetworkIdentity | 从流中读取一个对 NetworkIdentity 的引用。 |
ReadPackedUInt32 | 读取一个 32 位可变长度编码值。 |
ReadPackedUInt64 | 读取一个 64 位可变长度编码值。 |
ReadPlane | 读取一个 Unity Plane 对象。 |
ReadQuaternion | 读取一个 Unity Quaternion 对象。 |
ReadRay | 读取一个 Unity Ray 对象。 |
ReadRect | 读取一个 Unity Rect 对象。 |
ReadSByte | 从流中读取一个带符号字节。 |
ReadSceneId | 从流中读取一个 NetworkSceneId。 |
ReadSingle | 从流中读取一个浮点数。 |
ReadString | 从流中读取一个字符串。(最大 32k 个字节)。 |
ReadTransform | 从流中读取一个对变换组件的引用。 |
ReadUInt16 | 从流中读取一个不带符号的 16 位整数。 |
ReadUInt32 | 从流中读取一个不带符号的 32 位整数。 |
ReadUInt64 | 从流中读取一个不带符号的 64 位整数。 |
ReadVector2 | 读取一个 Unity Vector2 对象。 |
ReadVector3 | 读取一个 Unity Vector3 对象。 |
ReadVector4 | 读取一个 Unity Vector4 对象。 |
SeekZero | 将读取器的流的当前位置设置为流的起始位置。 |
ToString | 返回读取器缓冲区的字符串表示形式。 |