Differences between revisions 25 and 26
Revision 25 as of 2021-03-01 13:00:06
Size: 3190
Editor: zbjxb
Comment:
Revision 26 as of 2021-03-01 13:02:55
Size: 3374
Editor: zbjxb
Comment:
Deletions are marked like this. Additions are marked like this.
Line 11: Line 11:
= How to add replication to a base Actor = = #1 and #3 =
How to add replication to a base Actor <<BR>>
How to add replication to '''variables'''
Line 47: Line 49:
= 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.h
   3 ////////////////////////////
   4 
   5 /** Response to health being updated. Called on the server immediately after modification, and on clients in response to a RepNotify*/
   6 void OnHealthUpdate();

   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 }

UE4-Networking-And-Multiplayer/MultiplayerProgrammingQuickStart (last edited 2021-03-01 13:15:12 by zbjxb)