TIL 쓰기전 항상 명심 할 것
작성 타이밍: 공부가 다 끝나고 쓰려고 하면 지쳐서 안쓴다. 모르는게 있을 때 즉시 적기
작성 강도: 메모가 절대로 '공부'나 '또 하나의 짐'처럼 무거워지면 안됨.
[질문]
- 내가 몰랐던 것: void OnRep_ServerRotationYaw(); 함수는 어디서도 호출되지 않았는데 어떻게 액터에 적용 된 걸까??
- 원인 (이유): Replication Notify 시스템에 등록된 콜백 함수라서 자동으로 호출
- 코드:
//h
UFUNCTION()
void OnRep_ServerRotationYaw();
UPROPERTY(ReplicatedUsing = OnRep_ServerRotationYaw)
float ServerRotationYaw;
//cpp
void ADXBox::OnRep_ServerRotationYaw()
{
SetActorRotation(FRotator(0.f, ServerRotationYaw, 0.f));
}
[개념] NetLoadOnClient
- 한 줄 요약: 레벨에 정적으로 배치된 액터를 서버 복제 없이 클라이언트가 맵 로딩 시 로컬에서 함께 로드하도록 하는 옵션
- 언제 써?:정적 오브젝트처럼 별도 동기화가 필요 없는 액터에 사용
- 레벨에 미리 배치된 액터
- 게임 중 상태가 거의 변하지 않는 액터
- 코드:블루프린트에서 설정하는게 편함
[개념] Property Replication
- 한 줄 요약: 서버에 존재하는 변수의 특정 속성값을 클라이언트들에게 자동으로 동기화하는 기능
- 언제 써?:체력, 점수, 위치값처럼 서버가 기준이 되어 모든 클라이언트가 같은 값을 알아야 할 때 사용
- 코드:
- 프로퍼티 레플리케이션 설정 방법
- 액터의 Replicates 속성을 true로 설정합니다.
- 네트워크로 복제할 액터의 속성을 키워드로 지정합니다.해당 속성의 UPROPERTY()에 Replicated 키워드 추가합니다.
- GetLifetimeReplicatedProps() 함수에 네트워크로 복제할 속성을 추가합니다.#include “Net/UnrealNetwork.h” 헤더파일 추가합니다.DOREPLIFETIME 매크로를 사용해 복제할 속성을 명시합니다.
//h
생성자();
UPROPERTY(Replicated)
float ServerRotationYaw;
virtual void GetLifetimeReplicatedProps(TArray<class FLifetimeProperty>& OutLifetimeProps) const override;
//cpp
#include “Net/UnrealNetwork.h”
생성자()
{
bReplicates = true;
}
void 클래스이름::GetLifetimeReplicatedProps(TArray<class FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(ThisClass, ServerRotationYaw);
}
[개념] UE_DISABLE_OPTIMIZATION & UE_ENABLE_OPTIMIZATION
- 한 줄 요약: 디버깅을 쉽게 하기 위해 특정 코드 구간의 컴파일 최적화를 끄고 다시 켜는 매크로
- 언제 써?:특정 코드 구간에만 최적화를 끄면 디버깅에서 흐름을 더 정확히 추적할 수 있다.
- 코드:
UE_DISABLE_OPTIMIZATION
//디버깅 할 코드부분
UE_ENABLE_OPTIMIZATION
[개념] Replication Notify
- 한 줄 요약: 복제된 변수가 클라이언트에서 갱신될 때 자동으로 후처리 함수를 호출해주는 기능
- 언제 써?:변수 값만 동기화하는 것으로 끝나지 않고, 값이 바뀐 뒤에 추가 동작이 필요할 때 사용
- 체력 값이 바뀌면 UI 갱신
- 회전 값이 바뀌면 액터 회전 적용
- 코드:
//h UFUNCTION() void OnRep_ServerRotationYaw(); UPROPERTY(ReplicatedUsing = OnRep_ServerRotationYaw) float ServerRotationYaw; //cpp void ADXBox::OnRep_ServerRotationYaw() { SetActorRotation(FRotator(0.f, ServerRotationYaw, 0.f)); }
[개념] NetUpdateFrequency
- 한 줄 요약: 서버가 이 액터의 변경 정보를 클라이언트에게 얼마나 자주 보낼지 정하는 값
- 언제 써?: 굳이 자주 동기화 할 필요 없는 액터일 경우 값을 조절하여 최적화 할 때
- 코드:
[개념] Relevancy
- 한 줄 요약: 액터의 정보를 특정 클라이언트에게 보낼 필요가 있는지 판단하는 기준
- 언제 써?: 클라이언트에 연관된 액터만 복제해줌으로 최적화 할 때
- 코드:
[함수 족보] SpawnActor<>()
- 한 줄 요약: 게임 실행 중에 원하는 Actor를 특정 위치와 회전값으로 동적으로 생성할 때 사용하는 함수
- 언제 써?:이미 레벨에 배치된 Actor가 아니라, 게임 도중 새 Actor를 만들어야 할 때 사용
- 캐릭터가 총알을 발사할 때
- 몬스터를 일정 위치에 소환할 때
- 코드:
void AMyCharacter::BeginPlay() { Super::BeginPlay(); FVector SpawnLocation = GetActorLocation() + FVector(200.f, 0.f, 0.f); FRotator SpawnRotation = GetActorRotation(); FActorSpawnParameters SpawnParams; ATestActor* SpawnedActor = GetWorld()->SpawnActor<ATestActor> ( SpawnLocation, SpawnRotation, SpawnParams );
'TIL(Today I Learned)' 카테고리의 다른 글
| 2026/06/26 (0) | 2026.06.26 |
|---|---|
| 2026/06/25 (0) | 2026.06.25 |
| 2026/06/19 (0) | 2026.06.19 |
| 2026/06/18 (0) | 2026.06.18 |
| 2026/06/16 (0) | 2026.06.16 |