40
COPYRIGHT 2014 @ UNITY TECHNOLOGIES UNITY NETWØRK1NG: НØВЫЕ ВØ3МØЖНØСТИ Валентин Симонов Field Engineer @ Unity Technologies E-mail: [email protected] Skype: simonov.valentin

Unity Networking: new possibilities

Embed Size (px)

Citation preview

Page 1: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

UNITY NETWØRK1NG:НØВЫЕ ВØ3МØЖНØСТИ

Валентин СимоновField Engineer @ Unity TechnologiesE-mail: [email protected]

Skype: simonov.valentin

Page 2: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

Валентин СимоновField Engineer @ Unity Technologies

• Помогаю разработчикам

выжимать максимум из Unity

• Рассказываю про Unity

• Перевожу книги по Unity

• Веду курсы по Unity

• Поддерживаю open source проекты:• https://github.com/TouchScript/TouchScript

E-mail: [email protected]

Skype: simonov.valentin

Page 3: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

ПРОШЛОЕ: RAKNET

• Стороннее решение

• Для небольших мультиплеер игр

• Акцент на простоту интеграции в IDE

• Нет low-level доступа

• Не предназначено для ММО с авторитарным

сервером

Page 4: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

БУДУЩЕЕ: UNITY NETWORKING

• Производительное, стабильное и удобное решение

• Рассчитано на самые разные типы игр

• Client hosted и server based

• Большое количество одновременных подключений

• Native в Unity

• High Level и Low Level API

• Match making, relay server для обхода NAT

• Серверные библиотеки и simulation server

Page 5: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

НАСТОЯЩЕЕ

5.1: http://unity3d.com/unity/beta

• Протокол на основе UDP• Multi-channel дизайн• Разные уровни QoS (Quality of Service) на канал• Поддержка peer-to-peer и client-server• High Level и Low Level API• Relay/match making сервер

Page 6: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

Page 7: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

http://forum.unity3d.com/threads/networking-sample-projects.325096/

Page 8: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2014 @ UNITY TECHNOLOGIES

LOW LEVEL API

Page 9: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

LOW LEVEL API

config = new ConnectionConfig();

channel = config.AddChannel(QosType.Reliable);

NetworkTransport.Init();

Page 10: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

КАНАЛЫ

Каналы — логическое разделение потока сообщений для соединения

QoS:• Unreliable, Unreliable Fragmented, Unreliable

Sequenced• Reliable, Reliable Fragmented, Reliable Sequenced• State Update, All Cost Delivery

Page 11: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

// server

HostTopology topology = new HostTopology(config, 12);

host = NetworkTransport.AddHost(topology, port, null);

// client

host = NetworkTransport.AddHost(topology, 0);

connection =

NetworkTransport.Connect(host, ip, port, 0, out error);

Page 12: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

NetworkEventType recData = NetworkTransport.Receive( … );

switch (recData) {case NetworkEventType.Nothing:

break;case NetworkEventType.ConnectEvent:

break;case NetworkEventType.DataEvent:

break;case NetworkEventType.DisconnectEvent:

break;}

Page 13: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

NetworkTransport.Send(host, connection,

channel, bytes, bytes.Length, out error);

NetworkTransport.Shutdown();

Page 14: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2014 @ UNITY TECHNOLOGIES

HIGH LEVEL API

Page 15: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

HIGH LEVEL API

• Простое API для основных задач

• На основе Low Level API

• Набор компонентов и атрибутов

• Авторитарный сервер

• Игрок может быть сервером

Page 16: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

P2P/НЕАВТОРИТАРНЫЙ СЕРВЕР

Page 17: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

АВТОРИТАРНЫЙ СЕРВЕР

Page 18: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

// ServerNetworkServer.Listen(4444);

// ClientmyClient = new NetworkClient();myClient.RegisterHandler(

MsgType.Connect, OnConnected); myClient.Connect("127.0.0.1", 4444);NetworkServer.SendToAll( ... );

public void OnConnected(NetworkMessage netMsg) { ... }

Page 19: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

Page 20: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

SIMULATOR

ConnectWithSimulator(

string serverIp,

int serverPort,

int latency,

float packetLoss);

Page 21: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2014 @ UNITY TECHNOLOGIES

ЕЩЕ БОЛЕЕ HIGH LEVEL

Page 22: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

ИГРОКИ

• 1 клиент == 1+ игроков• Игрок — особый объект, который может общаться

с сервером

public void OnConnected(NetworkMessage netMsg){

ClientScene.AddPlayer(netMsg.conn, 0);}

Page 23: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

NETWORK IDENTITY

• Компонент, который отмечает объект как

контролируемый сервером

• NetworkServer.Spawn( … )

• ClientScene.RegisterPrefab( ... )

ClientScene.RegisterSpawnHandler( ... )

Page 24: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

NETWORKBEHAVIOUR

MyScript -> NetworkBehaviour -> MonoBehaviour

• Объекты с NetworkIdentity• Синхронизация переменных• Сетевые колбэки• Серверные и клиентские функции• Команды• RPC вызовы• Сетевые события

Page 25: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

SYNCVAR

• Синхронизация server -> client*

public class SpaceShip : NetworkBehaviour

{

[SyncVar]

public int health;

}

Page 26: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

NETWORK CALLBACKS

Виртуальные методы NetworkBehaviour

• OnStartServer• OnStartClient• OnSerialize(NetworkWriter writer, bool initialState)• OnDeSerialize(NetworkReader reader, bool initialState)• OnNetworkDestroy• OnStartLocalPlayer• …

Page 27: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

КЛИЕНТСКИЕ И СЕРВЕРНЫЕ МЕТОДЫ

public class SimpleSpaceShip : NetworkBehaviour {

[Server]public void TakeDamage(int amount) { ... }

[Client]void ShowExplosion() { ... }

[ClientCallback]void Update() { ... }

}

Page 28: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

КЛИЕНТ <-> СЕРВЕР

• Команды: игрок -> сервер(только игрок)

• RPC: сервер -> клиентский объект

• События: сервер -> клиентский объект

• Сообщения: сервер <-> клиент

Page 29: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

КОМАНДЫ

public class SpaceShip : NetworkBehaviour {

[Command]public void CmdRotate(float angle) {

this.angle += angle;}

[ClientCallback]void Update() {

CmdRotate(Input.GetAxis("Vertical")); // this will be called on the server

}}

Page 30: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

RPC

public class Rpc : NetworkBehaviour {

[ClientRpc]public void RpcDoOnClient(float value) { ... }

[ServerCallback]void Update() {

RpcDoOnClient(Time.time);}

}

Page 31: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

СОБЫТИЯ

public class MyCombat : NetworkBehaviour {

public delegate void RespawnDelegate();

[SyncEvent]public event RespawnDelegate EventRespawn;

[Server]void Respawn() {

alive = true;EventRespawn();

}}

Page 32: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

СООБЩЕНИЯ

public class MyMsgType {

public static short Score = MsgType.Highest + 1;

};

public struct ScoreMessage {

public int score;

public Vector3 scorePos;

public int lives;

}

public void SetupClient() {

myClient = new NetworkClient();

myClient.RegisterHandler(MyMsgType.Score, OnScore);

myClient.Connect("127.0.0.1", 4444);

}

Page 33: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

СООБЩЕНИЯ

public void SendScore(int score, Vector3 scorePos, int lives) {

ScoreMessage msg;

msg.score = score;

msg.scorePos = scorePos;

msg.lives = lives;

NetworkServer.SendToAll<ScoreMessage>(MyMsgType.Score, msg);

}

public void OnScore(NetworkMessage netMsg) { … }

Page 34: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

NETWORKBEHAVIOUR

MyScript -> NetworkBehaviour -> MonoBehaviour

• Меньше порог входа

• Генерация кода при компиляции

• Не используется reflection в рантайме

Page 35: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

КОМПОНЕНТЫ: NETWORK MANAGER

• Центральный компонент для

конфигурации сетевого взаимодействия

• Написан на HLAPI

• Содержит базовую функциональность:• Управление без скриптинга

• Game state management

• Scene management

• Spawning

• Debugging

Page 36: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

КОМПОНЕНТЫ: NETWORK MANAGER

public class MyNetManager : NetworkManager

{

public override void OnServerAddPlayer(

NetworkConnection conn, short playerControllerId)

{ … }

OnServerConnect(UConnection conn);

OnServerDisconnect(UConnection conn);

OnClientConnect(UConnection conn);

OnClientDisconnect(UConnection conn);

}

Page 37: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

Level 1 = Bullet 24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

КОМПОНЕНТЫ

Page 38: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

MATCHMAKING

NetworkMatch <-> Relay Server (LLAPI) <-> Clients

Обход закрытых сетей

CreateMatchListMatchesJoinMatchDestroyMatch

Page 39: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIES

Text Styles

key to switch

between levels

24 pt.

Level 2 = Bullet 24 pt.

Level 3 = Bullet 20 pt.

Level 5 = Bullet 16 pt.

To get bullet / plain text

list

MATCHMAKING

SetProgramAppID( … )

https://unet.unity3d.com/

Page 40: Unity Networking: new possibilities

COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2014 @ UNITY TECHNOLOGIES

UNITY В РОССИИunity_ruunityrussiaunity3dengineblogs.unity3d.com/ruUnity3DRU