Size: 3190
Comment:
|
Size: 3371
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 10: | Line 10: |
<<Anchor(1)>><<Anchor(3)>> = How to add replication to a base Actor = |
= #1 and #3 = <<Anchor(1)>>How to add replication to a base Actor <<BR>> <<Anchor(3)>>How to add replication to '''variables''' |
Line 47: | Line 48: |
= How to use RepNotifies when a variable changes = | = #4 and #6 = How to use RepNotifies when a variable changes<<BR>> How to check an Actor's '''Network Role''' in order to filter calls that are performed within a function |
How to add replication to a base Actor #1
How to take advantage of Movement Components in a network game #2
How to add replication to variables #3
How to use RepNotifies when a variable changes #4
How to use Remote Procedure Calls (RPCs) in C++ #5
How to check an Actor's Network Role in order to filter calls that are performed within a function #6
#1 and #3
How to add replication to a base Actor
How to add replication to variables
1 ////////////////////////////
2 // ThirdPersonMPCharacter.h
3 ////////////////////////////
4 /** The player's current health. When reduced to 0, they are considered dead.*/
5 UPROPERTY(ReplicatedUsing=OnRep_CurrentHealth)
6 float CurrentHealth;
7
8 /** RepNotify for changes made to current health.*/
9 UFUNCTION()
10 void OnRep_CurrentHealth();
11
12 /** Property replication */
13 void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
1 ////////////////////////////
2 // ThirdPersonMPCharacter.cpp
3 ////////////////////////////
4
5 //////////////////////////////////////////////////////////////////////////
6 // Replicated Properties
7
8 void AThirdPersonMPCharacter::GetLifetimeReplicatedProps(TArray <FLifetimeProperty> & OutLifetimeProps) const
9 {
10 Super::GetLifetimeReplicatedProps(OutLifetimeProps);
11
12 //Replicate current health.
13 DOREPLIFETIME(AThirdPersonMPCharacter, CurrentHealth);
14 }
#4 and #6
How to use RepNotifies when a variable changes
How to check an Actor's Network Role in order to filter calls that are performed within a function
1 ////////////////////////////
2 // ThirdPersonMPCharacter.cpp
3 ////////////////////////////
4
5 void AThirdPersonMPCharacter::OnHealthUpdate()
6 {
7 //Client-specific functionality
8 if (IsLocallyControlled())
9 {
10 FString healthMessage = FString::Printf(TEXT("You now have %f health remaining."), CurrentHealth);
11 GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, healthMessage);
12
13 if (CurrentHealth <= 0)
14 {
15 FString deathMessage = FString::Printf(TEXT("You have been killed."));
16 GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, deathMessage);
17 }
18 }
19
20 //Server-specific functionality
21 if (GetLocalRole() == ROLE_Authority)
22 {
23 FString healthMessage = FString::Printf(TEXT("%s now has %f health remaining."), *GetFName().ToString(), CurrentHealth);
24 GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, healthMessage);
25 }
26
27 //Functions that occur on all machines.
28 /*
29 Any special functionality that should occur as a result of damage or death should be placed here.
30 */
31 }
32
33 void AThirdPersonMPCharacter::OnRep_CurrentHealth()
34 {
35 OnHealthUpdate();
36 }