Программы на C++. Форум разработчиков
Anonymous
Серверный RPC от клиента к серверу по какой-то причине не работает
Сообщение
Anonymous » 30 апр 2024, 17:36
Rpc работает, но ротация на клиенте задерживается. я знаю, возможно, этот код странный, но я новичок в C++.
Код: Выделить всё
void AHalfDeadCharacter::ChangeCamera()
{
if (IsDefaultCamera == true) {
FollowCamera->Deactivate();
FirstPersonCamera->Activate();
IsDefaultCamera = false;
}
else {
FollowCamera->Activate();
FirstPersonCamera->Deactivate();
IsDefaultCamera = true;
}
}
void AHalfDeadCharacter::SetFirstPerson(AHalfDeadCharacter* Player1)
{
if (Player1->IsDefaultCamera == false) {
Player1->CharacterRotation = (FRotator(0.f, Player1->FirstPersonCamera->GetComponentRotation().Yaw, Player1->GetActorRotation().Roll));
Player1->SetActorRotation(Player1->CharacterRotation);
if (Player1->HasAuthority() == false) {
Server_SetFirstPerson(Player1);
}
}
}
void AHalfDeadCharacter::Server_SetFirstPerson_Implementation(AHalfDeadCharacter* Player)
{
Player->SetActorRotation(Player->CharacterRotation);
Player->CharacterRotation = (FRotator(0.f, Player->FirstPersonCamera->GetComponentRotation().Yaw, Player->GetActorRotation().Roll));
if (this->GetActorRotation() != Player->CharacterRotation) {
this->SetActorRotation(Player->CharacterRotation);
if (this->GetActorRotation() != Player->CharacterRotation) {
this->SetActorRotation(Player->CharacterRotation);
}
}
}
bool AHalfDeadCharacter::Server_SetFirstPerson_Validate(AHalfDeadCharacter* Player)
{
return true;
}
void AHalfDeadCharacter::GetLifetimeReplicatedProps(TArray< FLifetimeProperty >& OutLifetimeProps) const {
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AHalfDeadCharacter, CharacterRotation);
}
void AHalfDeadCharacter::Tick(float DeltaTime)
{
SetFirstPerson(this);
}
Я пробовал разные варианты репликации вращения от первого лица, но не думаю, что стоит делиться этим опытом.
Подробнее здесь:
https://stackoverflow.com/questions/784 ... ome-reason
1714487797
Anonymous
Rpc работает, но ротация на клиенте задерживается. я знаю, возможно, этот код странный, но я новичок в C++. [code]void AHalfDeadCharacter::ChangeCamera() { if (IsDefaultCamera == true) { FollowCamera->Deactivate(); FirstPersonCamera->Activate(); IsDefaultCamera = false; } else { FollowCamera->Activate(); FirstPersonCamera->Deactivate(); IsDefaultCamera = true; } } void AHalfDeadCharacter::SetFirstPerson(AHalfDeadCharacter* Player1) { if (Player1->IsDefaultCamera == false) { Player1->CharacterRotation = (FRotator(0.f, Player1->FirstPersonCamera->GetComponentRotation().Yaw, Player1->GetActorRotation().Roll)); Player1->SetActorRotation(Player1->CharacterRotation); if (Player1->HasAuthority() == false) { Server_SetFirstPerson(Player1); } } } void AHalfDeadCharacter::Server_SetFirstPerson_Implementation(AHalfDeadCharacter* Player) { Player->SetActorRotation(Player->CharacterRotation); Player->CharacterRotation = (FRotator(0.f, Player->FirstPersonCamera->GetComponentRotation().Yaw, Player->GetActorRotation().Roll)); if (this->GetActorRotation() != Player->CharacterRotation) { this->SetActorRotation(Player->CharacterRotation); if (this->GetActorRotation() != Player->CharacterRotation) { this->SetActorRotation(Player->CharacterRotation); } } } bool AHalfDeadCharacter::Server_SetFirstPerson_Validate(AHalfDeadCharacter* Player) { return true; } void AHalfDeadCharacter::GetLifetimeReplicatedProps(TArray< FLifetimeProperty >& OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME(AHalfDeadCharacter, CharacterRotation); } void AHalfDeadCharacter::Tick(float DeltaTime) { SetFirstPerson(this); } [/code] Я пробовал разные варианты репликации вращения от первого лица, но не думаю, что стоит делиться этим опытом. Подробнее здесь: [url]https://stackoverflow.com/questions/78409168/server-prc-from-client-to-server-dont-work-for-some-reason[/url]