Unreal Engine - Property Replication

LeemHyungJun·2024년 1월 25일
0

Unreal Engine

목록 보기
2/3

참고
프로퍼티 리플리케이션 : https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/Properties/
프로퍼티 지정자 :
https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/GameplayArchitecture/Properties/Specifiers/
조건식 리플리케이션 :
https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/Properties/Conditions/
아키타입 : https://coding-hell.tistory.com/81
언리얼 엔진 네트워킹 :
https://docs.unrealengine.com/5.3/ko/networking-overview-for-unreal-engine/

프로퍼티 지정자

  • 엔진 및 에디터의 다양한 면에 대한 프로퍼티 작동방식을 지정하기 위해 UProperty 를 선언할 때 사용되는 키워드
  • 사용 예시 1)
UPROPERTY(EditAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
class UWidgetComponent* OverheadWidget;

-> 아키타입(내가 만든 블루프린트 클래스, c++클래스)과 인스턴스(bp와 c++ 클래스를 맵에 배치한 것) 둘 다 편집 가능
-> 블루프린트에서는 수정 불가능
-> 해당 변수는 클래스 내부에서만 접근 가능함

  • 사용 예시 2)
UPROPERTY(ReplicatedUsing = OnRep_OverlappingWeapon)
class AWeapon* OverlappingWeapon;

-> 네트워크 상에서 변수 값을 동기화 하는데, 해당 변수가 변경될 때 함수 OnRep_OverlappingWeapon 를 호출한다.

프로퍼티 리플리케이션

  • 서버는 replicate된 프로퍼티의 값이 변할 때 마다 각 클라이언트에 업데이트를 전송, 클라이언트는 액터의 로컬 버전에 적용
  • 프로퍼티 구성
    1) 헤더에 UPROPERTY(replicated) 사용
    2) 액터 클래스 구현부에GetLifetimeReplicatedProps 함수 구현 필요
    -> DOREPLIFETIME(클래스 이름, 변수 이름); 매크로 사용
    3) 액터 생성자에 bReplicates = true; 설정
  • 결과로 리플리케이트로 지정된 값이 바뀐다면 나머지 클라이언트에도 다 바뀐걸로 적용된다.

조건식 리플리케이션

  • 프로퍼티가 리플리케이션에 등록되면 해제시킬 수 없기 때문에 가급적 많은 정보를 넣고 다수의 접속에서 공유하여 시간 절약을 할 수 있다.
  • DOPERPLIFETIME_CONDITION 매크로 사용
  • 사용 예시
  • 목표 (weapon에 닿았을 때 자신의 화면에서만 widget을 끄기/켜기 를 반복하기 위해서)
    1) 위젯은 자신의 화면에서만 보고 싶다. simulated 에서는 보여줄 필요 없다.
    2) 조건식 매크로에 COND_OwnerOnly 쓰면 pawn을 움직인 당사자의 화면과 서버에 변경된 점이 적용된다.
    3) 서버에서 안보이게 하기 위해서는 replicated 될 때만 바뀌게 만들었는데, 이렇게 되면 서버의 경우 위젯이 뜨지 않는다.
  • 결과 영상
    https://youtu.be/vspiWPZq5m0

참고) property

0개의 댓글