Important: UNet adalah solusi yang diuraikan, dan Solusi Multiplayer baru dan NetworkingSistem Unity yang memungkinkan game multiplayer di jaringan komputer. More info Lihat di Glossary (Netcode untuk GameObjects) sedang berkembang. Untuk informasi lebih lanjut dan langkah selanjutnya melihat informasi di . |
Gunakan kelas NetworkReader dan NetworkWriter untuk menulis data ke aliran byte.
Multiplayer APISistem untuk membangun kemampuan multiplayer untuk permainan Unity. Ini dibangun di atas lapisan komunikasi real-time transportasi tingkat bawah, dan menangani banyak tugas umum yang diperlukan untuk permainan multiplayer. More info
Lihat di Glossary dibangun menggunakan kelas ini, dan menggunakannya secara luas. Namun, Anda dapat menggunakannya langsung jika Anda ingin menerapkan fungsi transportasi khusus Anda sendiri. Mereka memiliki fungsi serialisasi khusus untuk banyak tipe Unity (Lihat Login Login untuk daftar penuh jenis).
Untuk menggunakan kelas, membuat instance penulis, dan menulis variabel individu ke dalamnya. Ini serialisasi secara internal ke array byte, dan ini dapat dikirim melalui jaringan. Di sisi penerima penting bahwa instance pembaca untuk array byte membaca kembali variabel dalam urutan yang sama mereka ditulis.
Ini dapat digunakan dengan kelas MessageBase untuk membuat array byte yang berisi pesan jaringan serial.
void SendMessage(short msgType, MessageBase msg, int channelId)
{
// write the message to a local buffer
NetworkWriter writer = new NetworkWriter();
writer.StartMessage(msgType);
msg.Serialize(writer);
writer.FinishMessage();
myClient.SendWriter(writer, channelId);
}
Pesan ini diformat dengan benar sehingga fungsi handler pesan dapat diinvoked untuk itu.
Sampel kode berikut adalah demonstrasi tingkat yang agak rendah, menggunakan kelas tingkat terendah dari API tingkat tinggi untuk mengatur konektivitas.
Ini adalah kode untuk menghubungkan klien dan server bersama:
using UnityEngine;
using UnityEngine.Networking;
public class Serializer : MonoBehaviour {
NetworkServerSimple m_Server;
NetworkClient m_Client;
const short k_MyMessage = 100;
// When using a server instance like this it must be pumped manually
void Update() {
if (m_Server != null)
m_Server.Update();
}
void StartServer() {
m_Server = new NetworkServerSimple();
m_Server.RegisterHandler(k_MyMessage, OnMyMessage);
if (m_Server.Listen(5555))
Debug.Log("Started listening on 5555");
}
void StartClient() {
m_Client = new NetworkClient();
m_Client.RegisterHandler(MsgType.Connect, OnClientConnected);
m_Client.Connect("127.0.0.1", 5555);
}
void OnClientConnected(NetworkMessage netmsg) {
Debug.Log("Client connected to server");
SendMessage();
}
}
Bagian berikutnya dari kode mengirim pesan menggunakan pembaca jaringan dan penulis jaringan, tetapi menggunakan handler pesan yang dibangun ke kelas ini:
void SendMessage() {
NetworkWriter writer = new NetworkWriter();
writer.StartMessage(k_MyMessage);
writer.Write(42);
writer.Write("What is the answer");
writer.FinishMessage();
m_Client.SendWriter(writer, 0);
}
void OnMyMessage(NetworkMessage netmsg) {
Debug.Log("Got message, size=" + netmsg.reader.Length);
var someValue = netmsg.reader.ReadInt32();
var someString = netmsg.reader.ReadString();
Debug.Log("Message value=" + someValue + " Message string='" + someString + "'");
}
Ketika mengatur pesan untuk penuntut pesan, Anda harus selalu menggunakan NetworkWriter.StartMessage()
(dengan ID jenis pesan) dan JaringanWriter. FinishMesssage() panggilan. Ketika tidak menggunakan array byte, Anda dapat melewatkan langkah itu.