Unity Multiplayer 套件之transport

以下是官方代码验证。
下面展示一些 内联代码片

 ServerBehaviour.cs
using UnityEngine;
using UnityEngine.Assertions;

using Unity.Collections;
using Unity.Networking.Transport;

public class ServerBehaviour : MonoBehaviour
{
	public NetworkDriver m_Driver;
    private NativeList<NetworkConnection> m_Connections;
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        m_Driver = NetworkDriver.Create();
		var endpoint = NetworkEndpoint.AnyIpv4;
		endpoint.Port = 9000;
		if (m_Driver.Bind(endpoint) != 0)
			Debug.Log("Failed to bind to port 9000");
		else
			m_Driver.Listen();

		m_Connections = new NativeList<NetworkConnection>(16, Allocator.Persistent);
    }

    // Update is called once per frame
    void Update()
    {
        m_Driver.ScheduleUpdate().Complete();
		// Clean up connections
		for (int i = 0; i < m_Connections.Length; i++)
		{
			if (!m_Connections[i].IsCreated)
			{
				m_Connections.RemoveAtSwapBack(i);
				--i;
			}
		}
		// Accept new connections
		NetworkConnection c;
		while ((c = m_Driver.Accept()) != default(NetworkConnection))
		{
			m_Connections.Add(c);
			Debug.Log("Accepted a connection");
		}
		DataStreamReader stream;
		for (int i = 0; i < m_Connections.Length; i++)
		{
			if (!m_Connections[i].IsCreated)
				continue;
			NetworkEvent.Type cmd;
			while ((cmd = m_Driver.PopEventForConnection(m_Connections[i], out stream)) != NetworkEvent.Type.Empty)
			{
				if (cmd == NetworkEvent.Type.Data)
				{
					uint number = stream.ReadUInt();
					Debug.Log("Got " + number + " from the Client adding + 2 to it.");
					number +=2;

					m_Driver.BeginSend(NetworkPipeline.Null, m_Connections[i], out var writer);
					writer.WriteUInt(number);
					m_Driver.EndSend(writer);
				}
				else if (cmd == NetworkEvent.Type.Disconnect)
				{
					Debug.Log("Client disconnected from server");
					m_Connections[i] = default(NetworkConnection);
					
				}
			}
		}
    }
	public void OnDestroy()
	{
		if (m_Driver.IsCreated)
		{
			m_Driver.Dispose();
			m_Connections.Dispose();
		}
	}
}

ClientBehaviour.cs
using UnityEngine;
using Unity.Networking.Transport;

public class ClientBehaviour : MonoBehaviour {

    public NetworkDriver m_Driver;
    public NetworkConnection m_Connection;
    public bool Done;

    void Start () 
	{
		m_Driver = NetworkDriver.Create();
		m_Connection = default(NetworkConnection);

		var endpoint = NetworkEndpoint.LoopbackIpv4;
		endpoint.Port = 9000;
		m_Connection = m_Driver.Connect(endpoint);
	}
    public void OnDestroy() 
	{
		m_Driver.Dispose();
	}
    void Update()
	{
		m_Driver.ScheduleUpdate().Complete();

		if (!m_Connection.IsCreated)
		{
			if (!Done)
				Debug.Log("Something went wrong during connect");
			return;
		}
		Unity.Collections.DataStreamReader stream;
		NetworkEvent.Type cmd;
		while ((cmd = m_Connection.PopEvent(m_Driver, out stream)) != NetworkEvent.Type.Empty)
		{
			if (cmd == NetworkEvent.Type.Connect)
			{
				Debug.Log("We are now connected to the server");

				uint value = 1;
				m_Driver.BeginSend(m_Connection, out var writer);
				writer.WriteUInt(value);
				m_Driver.EndSend(writer);
			}
			else if (cmd == NetworkEvent.Type.Data)
			{
				uint value = stream.ReadUInt();
				Debug.Log("Got the value = " + value + " back from the server");
				Done = true;
				m_Connection.Disconnect(m_Driver);
				m_Connection = default(NetworkConnection);
			}
			else if (cmd == NetworkEvent.Type.Disconnect)
            {
                Debug.Log("Client got disconnected from server");
                m_Connection = default(NetworkConnection);
            }
        }
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值