Скачать презентацию Networking in UE 4 Joe Graf Epic Cog Скачать презентацию Networking in UE 4 Joe Graf Epic Cog

Networking.pptx

  • Количество слайдов: 56

Networking in UE 4 Joe Graf @Epic. Cog Networking in UE 4 Joe Graf @Epic. Cog

Introduction • Network topology and NATs • C++ Replication • Blueprint Replication • Low Introduction • Network topology and NATs • C++ Replication • Blueprint Replication • Low Level Networking • Diagnostic Tools

Network Topologies Client / Server Peer to Peer Network Topologies Client / Server Peer to Peer

Network Address Translation (NAT) • Three types to think about – Open • Can Network Address Translation (NAT) • Three types to think about – Open • Can accept unsolicited connections – Moderate • Can sometimes accept unsolicited connections – Strict • Can only accept connections from known addresses

Gears of War 3 NAT Analytics Gears of War 3 NAT Analytics

NAT Implications • Client/Server – Server should have Open NAT – Client can be NAT Implications • Client/Server – Server should have Open NAT – Client can be any NAT type • Peer to Peer – All clients need Open NATs – ~20% of players can’t play your game

Server Authoritative Client / Server • Clients only talk to Server • Server replicates Server Authoritative Client / Server • Clients only talk to Server • Server replicates to Clients • Data flow is Server->Clients • RPCs are bidirectional

C++ Replication C++ Replication

Basic Gameplay Classes Server • Game. Mode • Game. State • Player. Controller – Basic Gameplay Classes Server • Game. Mode • Game. State • Player. Controller – One for each player • Player. State – One for each player Client • Game. State • Player. Controller – One for each local player • Player. State – One for each player

Gameplay Classes • Game. Mode – Rules for your game • Game. State – Gameplay Classes • Game. Mode – Rules for your game • Game. State – Replicated information about your Game. Mode

Gameplay Classes (cont) • Player. Controller – Primary interaction with your Game. Mode • Gameplay Classes (cont) • Player. Controller – Primary interaction with your Game. Mode • Player. State – Replicated information about your player

Data Replication • b. Replicates – Set as part of the Actor’s construction • Data Replication • b. Replicates – Set as part of the Actor’s construction • UPROPERTY Macro – Replicated. Using • Get. Lifetime. Replicated. Props Function – Determines the set of properties for replication

b. Replicates ACool. Actor: : ACool. Actor(…) : Super( PCIP ) { b. Replicates b. Replicates ACool. Actor: : ACool. Actor(…) : Super( PCIP ) { b. Replicates = true; }

Replicated Example /** number of kills */ UPROPERTY(Transient, Replicated) int 32 Num. Kills; Replicated Example /** number of kills */ UPROPERTY(Transient, Replicated) int 32 Num. Kills;

Replicated. Using Example /** team number */ UPROPERTY(Transient, Replicated. Using=On. Rep_Team. Color) int 32 Replicated. Using Example /** team number */ UPROPERTY(Transient, Replicated. Using=On. Rep_Team. Color) int 32 Team. Number; void AShooter. Player. State: : On. Rep_Team. Color() { Update. Team. Colors(); }

Get. Lifetime. Replicated. Props Example void AShooter. Player. State: : Get. Lifetime. Replicated. Props( Get. Lifetime. Replicated. Props Example void AShooter. Player. State: : Get. Lifetime. Replicated. Props( TArray& Out. Lifetime. Props) const { Super: : Get. Lifetime. Replicated. Props(Out. Lifetime. Props); DOREPLIFETIME( AShooter. Player. State, Team. Number ); DOREPLIFETIME( AShooter. Player. State, Num. Kills ); DOREPLIFETIME( AShooter. Player. State, Num. Deaths ); }

Conditional Replication • Property is only replicated when a condition is met • Can Conditional Replication • Property is only replicated when a condition is met • Can reduce bandwidth consumed • Done via a similar macro

Conditional Replication Example void AMy. Player. State: : Get. Lifetime. Replicated. Props( TArray<FLifetime. Property>& Conditional Replication Example void AMy. Player. State: : Get. Lifetime. Replicated. Props( TArray& Out. Lifetime. Props) const { Super: : Get. Lifetime. Replicated. Props(Out. Lifetime. Props); DOREPLIFETIME_CONDITION(AMy. Player. State, Some. Owner. Only. Val, COND_Owner. Only); }

Common Replication Conditions • COND_Initial. Only – • COND_Owner. Only – • This property Common Replication Conditions • COND_Initial. Only – • COND_Owner. Only – • This property send to every connection EXCEPT the owner COND_Simulated. Only – • This property will only send to the actor's owner COND_Skip. Owner – • This property will only attempt to send on the initial replication This property will only send to simulated actors COND_Autonomous. Only – This property will only send to autonomous actors

Function Replication • UFUNCTION Macro – – – – Reliable Unreliable Client Server Net. Function Replication • UFUNCTION Macro – – – – Reliable Unreliable Client Server Net. Multicast With. Validation Blueprint. Authority. Only Blueprint. Cosmetic

Reliable • Function is guaranteed to be called • Resent when an error is Reliable • Function is guaranteed to be called • Resent when an error is present • Delayed when bandwidth is saturated

Reliable Example /** notify player about started match */ UFUNCTION(Reliable, Client) void Client. Game. Reliable Example /** notify player about started match */ UFUNCTION(Reliable, Client) void Client. Game. Started(); void AShooter. Player. Controller: : Client. Game. Started_Implementation() { b. Allow. Game. Actions = true; // Enable controls and disable cinematic mode now the game has started Set. Cinematic. Mode(false, true, true); AShooter. HUD* Shooter. HUD = Get. Shooter. HUD(); if (Shooter. HUD) { Shooter. HUD->Set. Match. State(EShooter. Match. State: : Playing); Shooter. HUD->Show. Scoreboard(false); } … }

Unreliable • Function is attempted to be sent • Not sent again when an Unreliable • Function is attempted to be sent • Not sent again when an error is present • Skipped when bandwidth is saturated

Unreliable Example /** Replicated function sent by client to server - contains client movement Unreliable Example /** Replicated function sent by client to server - contains client movement and view info. */ UFUNCTION(Unreliable, Server, With. Validation) virtual void Server. Move(float Time. Stamp, …); void UCharacter. Movement. Component: : Server. Move_Implementation( float Time. Stamp, …) { … }

Net. Multicast • Sends to all clients – Reliable or Unreliable applies here too Net. Multicast • Sends to all clients – Reliable or Unreliable applies here too

Net. Multicast Example /** broadcast death to local clients */ UFUNCTION(Reliable, Net. Multicast) void Net. Multicast Example /** broadcast death to local clients */ UFUNCTION(Reliable, Net. Multicast) void Broadcast. Death(…); void AShooter. Player. State: : Broadcast. Death_Implementation(…) { for (auto It = Get. World()->Get. Player. Controller. Iterator(); It; ++It) { // all local players get death messages so they can update their huds. AShooter. Player. Controller* Test. PC = Cast(*It); if (Test. PC && Test. PC->Is. Local. Controller()) { Test. PC->On. Death. Message(Killer. Player. State, this, Killer. Damage. Type); } } }

With. Validation • Called before the target function • Used to validate parameters of With. Validation • Called before the target function • Used to validate parameters of a function – Meant to detect cheating/hacking • Return value affects whether function is called – false skips the call and kills the connection

With. Validation Example bool UCharacter. Movement. Component: : Server. Move_Validate( float Time. Stamp, …) With. Validation Example bool UCharacter. Movement. Component: : Server. Move_Validate( float Time. Stamp, …) { bool b. Is. Valid. Move = false; // Perform move validation here return b. Is. Valid. Move; }

Blueprint. Authority. Only • UE 4 all are functions are Simulated – This is Blueprint. Authority. Only • UE 4 all are functions are Simulated – This is the opposite of UE 3 • Opt out via Blueprint. Authority. Only

Blueprint. Authority. Only Example UFUNCTION(Blueprint. Implementable. Event, Blueprint. Authority. Only, meta=(Friendly. Name = Blueprint. Authority. Only Example UFUNCTION(Blueprint. Implementable. Event, Blueprint. Authority. Only, meta=(Friendly. Name = "Any. Damage"), Category="Damage") virtual void Receive. Any. Damage(float Damage, const UDamage. Type* Damage. Type, AController* Instigated. By, AActor* Damage. Causer);

Blueprint. Cosmetic • Opposite of Blueprint. Authority. Only – Runs on the client not Blueprint. Cosmetic • Opposite of Blueprint. Authority. Only – Runs on the client not server • An optimization to skip execution of slow cosmetic code on the server

Actor Relevancy • Trades CPU time for network bandwidth • Distance based – Are Actor Relevancy • Trades CPU time for network bandwidth • Distance based – Are these actors close enough – Default implementation right now • Line of sight – Can these actors see each other – UE 3 default implementation • Always relevant is an option – Trades bandwidth for CPU time

Blueprint Replication Blueprint Replication

Actor Replication Actor Replication

Property Replication Property Replication

Property Replication Notify Property Replication Notify

Function Replication Function Replication

Low Level Details Low Level Details

Low Level Implementation • UNet. Driver • UNet. Connection • UChannel – UControl. Channel Low Level Implementation • UNet. Driver • UNet. Connection • UChannel – UControl. Channel – UVoice. Channel – UActor. Channel

UNet. Driver • Contains a list of connections to Tick • On client, one UNet. Driver • Contains a list of connections to Tick • On client, one connection • On Server, N connections

UNet. Connection • Contains a list of channels to replicate • UChild. Connection – UNet. Connection • Contains a list of channels to replicate • UChild. Connection – Used as an optimization for split-screen games

UChannel Objects • Logical construct – Routes data to the proper object • Accessed UChannel Objects • Logical construct – Routes data to the proper object • Accessed by Channel. ID – Some channels have predefined IDs

UControl. Channel • Handles connection handshaking • Processes object loading requests • Deals with UControl. Channel • Handles connection handshaking • Processes object loading requests • Deals with misc. non-gameplay communication

UVoice. Channel • Sends and receives voice data – Voice channel routes data to UVoice. Channel • Sends and receives voice data – Voice channel routes data to platform handler • Voice data is platform dependent • Voice data is sent as speaker ID and payload

UActor. Channel • Handles actor replication – Includes any replicated components • One actor UActor. Channel • Handles actor replication – Includes any replicated components • One actor channel for each replicated actor • Actors are replicated by channel ID – Dynamically assigned based upon array position

Voice Considerations • Game can choose to support or not • Platform can mute Voice Considerations • Game can choose to support or not • Platform can mute other players – Player muted another outside of the game • Players can mute other players • Gameplay can mute players – Team based, distance based, push to talk

Voice Functions UFUNCTION(Server, Reliable, With. Validation) virtual void Server. Mute. Player(FUnique. Net. Id. Repl Voice Functions UFUNCTION(Server, Reliable, With. Validation) virtual void Server. Mute. Player(FUnique. Net. Id. Repl Player. Id); UFUNCTION(Server, Reliable, With. Validation ) virtual void Server. Unmute. Player(FUnique. Net. Id. Repl Player. Id); UFUNCTION(Reliable, Client) virtual void Client. Mute. Player(FUnique. Net. Id. Repl Player. Id); UFUNCTION(Reliable, Client) virtual void Client. Unmute. Player(FUnique. Net. Id. Repl Player. Id); /** * Mutes a remote player on the server and then tells the client to mute * * @param Player. Net. Id the remote player to mute */ void Gameplay. Mute. Player(const FUnique. Net. Id. Repl& Player. Net. Id); /** * Unmutes a remote player on the server and then tells the client to unmute * * @param Player. Net. Id the remote player to unmute */ void Gameplay. Unmute. Player(const FUnique. Net. Id. Repl& Player. Net. Id);

Diagnostic Tools Diagnostic Tools

Network Logging • Log. Net – Verbose information about the state of channels and Network Logging • Log. Net – Verbose information about the state of channels and connections • Log. Net. Player. Movement – Detailed information about movement from clients and corrections from server • Log. Net. Traffic – Verbose information about data sent on a connection

Network Statistics • Stat Net – Lists ping, channel count, in/out bytes, etc. • Network Statistics • Stat Net – Lists ping, channel count, in/out bytes, etc. • Stat Game – List of network processing information

Stat Net Example Stat Net Example

Stat Game Example Stat Game Example

Network Simulation Options • Pkt. Lag – Delays the sending of a packet by Network Simulation Options • Pkt. Lag – Delays the sending of a packet by a N ms • Pkt. Lag. Variance – Provides some randomness to the Pkt. Lag option • Pkt. Loss – A percentage chance of not sending a packet

Network Simulation Options (cont) • Pkt. Dup – A percentage chance of sending duplicate Network Simulation Options (cont) • Pkt. Dup – A percentage chance of sending duplicate packets • Pkt. Order – Sends packets out of order when enabled

Setting the Simulation Options • Console Net Pkt. Lag=100 • INI File [Packet. Simulation. Setting the Simulation Options • Console Net Pkt. Lag=100 • INI File [Packet. Simulation. Settings] Pkt. Lag=50 Pkt. Lag. Variance=10 Pkt. Loss=3 Pkt. Order=0 Pkt. Dup=10

Questions? Documentation, Tutorials, and Help at: http: //answers. unrealengine. com • Answer. Hub: • Questions? Documentation, Tutorials, and Help at: http: //answers. unrealengine. com • Answer. Hub: • Engine Documentation: http: //docs. unrealengine. com • Official Forums: http: //forums. unrealengine. com • Community Wiki: http: //wiki. unrealengine. com • You. Tube Videos: http: //www. youtube. com/user/Unreal. Development. Kit • Community IRC: #unrealengine on Free. Node Unreal Engine 4 Roadmap • lmgtfy. com/? q=Unreal+engine+Trello+