inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해

7강 액터 리플리케이션 로우레벨 플로우

구조체의 operator()를 사용하는 이유가 뭘까요?

해결된 질문

384

용우 유

작성한 질문수 1

0

액터 우선순위 정렬과정에서 Sort의 매개변수로 FCompoareFActorPriority를 생성해서 넘겨주고 있고, 이 구조체가 operator()를 구현해서 소팅을 진행하는 것 같은데요.

 

기능적으로 그냥 전역함수를 선언하거나, 아니면 static 함수를 선언하고 함수 포인터를 넘겨주는 것과 차이가 없는 것 같은데 혹시 언리얼 엔진에서 굳이 이렇게 하는 이유가 있을까요? 사소한 거긴 한데, 이런 패턴이 꽤나 자주 보여서 여쭤봅니다..!

unreal-engine 네트워크 언리얼-c++

답변 1

0

이득우

구조체 데이터 소팅을 위해, 구조체를 선언하고 별도로 이를 비교하는 전역함수를 선언하는것이 더 편리하다는 의미일까요?

0

용우 유

앗 아뇨! 엔진에서는 아래 코드블럭처럼 정렬기준을 서술한 구조체를 선언하고, 사용하더라고요

// Header
struct FCompareFActorPriority
{
	FORCEINLINE bool operator()( const FActorPriority& A, const FActorPriority& B ) const
	{
		return B.Priority < A.Priority;
	}
};


// Usage
// Sort by priority
Sort( OutPriorityActors, FinalSortedCount, FCompareFActorPriority() );

그런데 모던 c++에서는 predicate를 매개변수로 받는다면 보통 람다나 정적 함수, 전역 함수 같은 것들을 넘겨서 정렬하는 경우가 많다보니까 언리얼 엔진이 이렇게 구현한 이유가 따로 있는 걸까? 싶어서 여쭤봤습니다!

0

이득우

아 이것을 C++에서는 functor라고 보통 표현하는데 몇 가지 장점이 있습니다.

  • 오브젝트라서 상태관리가 가능하고 확장이 용이하다

  • 안정적이고 빠르다. 컴파일러가 해석하기 명확하고 편하다.

언리얼 엔진 소스코드를 보면 새로운 문법에 꽤나 보수적입니다. 지금 C++은 많이 안정화됐지만 예전에는 새로운 구문이 항상 잘동작했던 건 아니거든요. 게임 특성상 오래되고 다양한 플랫폼 지원도 필요하지요.

5.6버전 Networking Insights 실행안됨 문제에 관하여

0

30

1

8강 중간, 분수대의 SetOwner 에 대해 궁금합니다.

0

77

2

플레이어(Actor) 로 (리슨)서버에서 생성 되나요?

0

99

2

2강) HandleBeginPlay 의 역활이 궁금합니다.

-1

72

2

3강 중간, 모드 로그로 찍을 시 스탠드얼론이 안찍힙니다.

1

76

2

CompressedFlag 질문

0

58

2

10강까지 머리 위 체력바가 표시가 안됩니다.

0

110

3

10강까지 머리 위 체력바가 표시가 안됩니다.

0

95

2

16:44 부분에서 질문이 있습니다.

0

104

2

12:50 NetMulticast RPC 커넥션 관려하여 질문이 있습니다.

0

121

2

github 3-5 파트 프로젝트에서 컴파일 에러가 발생합니다.

0

116

3

언리얼 인사이트 5.6버전 networking insights 가 뜨지 않습니다.

0

164

3

Insight 사용이 안되어서 문의 드립니다!

0

131

2

하위 레벨...?? High Level 말씀하신거죠..??

0

147

1

CompressedFlags를 이용한 InputThrottle, InputSteering 전달 방법 질문

0

191

1

조건식 프로퍼티 리플리케이션 질문

0

144

2

ArenaBattle에 Log추가하는 곳에 에러가 나타나 질문 드립니다.

0

160

2

7강에서 DORM_Initial 안됨

0

128

3

안녕하세요 강의 내용 정리에 관련해서 질문있어요

0

131

2

캐릭터 클래스의 mesh 관련

0

133

2

3파트 6강 분수대 로테이트에 문제가 생겼습니다.

0

131

3

클라이언트의 오너십 설정에 대해서 궁금합니다.

0

201

3

프로퍼티 리플리케이트 동기화 보장 개념.

0

225

2

결국엔 액터 기본함수들은 어디든 똑같이 일단 실행되는건가요?

0

93

2