2강) HandleBeginPlay 의 역활이 궁금합니다.
마지막에 로그를 찍어보니
서버 역활을 하는 객체에는 HandleBeginPlay 로그가 출력되었으나
클라 역활을 하는 객체에는 OnRep_ReplicatedHasBegunPlay 로그가 출력되었습니다.
현재는 리슨서버로 진행되니 서버-클라 모두 HandleBeginPlay 가 호출될 줄 알았지만 클라에서는 출력되지 않습니다.
강의 내용처럼 HandleBeginPlay 는 서버 (로컬)에만 호출되니 클라에서는 호출 될 일이 없으며
클라에서는 OnRep_ReplicatedHasBegunPlay 만 호출되나 이것도 bReplicatedHasBegunPlay 값에 의해 호출 될수도 있고 안될 수도 있다 이렇게 이해해도 되나요?
다만 bReplicatedHasBegunPlay 는 그렇가면 게임이 시작 이후에는 무조건 true 가 될테니 시작 이후에 접속되면 무조건 bReplicatedHasBegunPlay 가 호출 될 것이고
시작 이전에 호출 되면 bReplicatedHasBegunPlay 호출이 안될 것이다
이렇게 이해해도 될까요?
回答 2
0
안녕하세요.
대부분 잘 이해하셨습니다. 부연설명하면,
클라이언트 입장에서는 bReplicatedHasBegunPlay 속성의 값에 따라 OnRep_ReplicatedHasBegunPlay() 함수가 실행되는데, 처음 시작할 때 기본 값은 false이기 때문에 서버에서 이 값을 true로 처음 변경했을 때 OnRep_ReplicatedHasBegunPlay() 함수가 실행됩니다.
따라서 질문 주신 내용처럼 클라이언트가 접속하는 시점을 2가지 상황으로 나눠볼 수 있는데 호출 과정은 아래와 같이 정리할 수 있습니다.
1. 서버에서 BeginPlay() 호출 전 접속:
이 때는 일단 OnRep_ReplicatedHasBegunPlay()가 호출되지 않습니다. bReplicatedHasBegunPlay 값이 false이기 때문입니다. 그러다가 서버에서 BeginPlay() 함수를 호출하는 과정에서 bReplicatedHasBegunPlay 값이 true로 설정되고, 이 값이 네트워크를 통해 클라이언트로 전달되면 bReplicatedHasBegunPlay 값이 false에서 true로 변경되기 때문에 OnRep_ReplicatedHasBegunPlay()이 호출됩니다.
2. 서버에서 BeginPlay() 호출 후 접속:
이 때는 서버측 bReplicatedHasBegunPlay 값이 이미 true이기 때문에 이 값을 네트워크를 통해 클라이언트로 보냅니다. 클라이언트의 bReplicatedHasBegunPlay 기본 값은 false인데, 방금 네트워크를 통해서 true 값을 받았습니다.
따라서 이 때 OnRep_ReplicatedHasBegunPlay() 함수가 호출됩니다. 정리하자면, 서버에서는 HandleBeginPlay() -> BeginPlay() 호출 흐름으로 함수가 실행됩니다.
클라이언트에서는 HandleBeginPlay() 실행되지 않습니다. 대신, 클라이언트는 서버에서 전달받은 bReplicatedHasBegunPlay 값이 true일 때 OnRep_ReplicatedHasBegunPlay() 함수가 실행됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 충실한 전복님.
언리얼 엔진에서의 HandleBeginPlay와 OnRep_ReplicatedHasBegunPlay 함수의 역할에 대한 이해를 돕기 위해 이 두 개념을 설명드리겠습니다.
HandleBeginPlay:
HandleBeginPlay는 서버에서 게임이 시작될 때 호출되는 함수입니다. 주로 게임 모드와 같은 서버 전용 오브젝트에서 실행됩니다. 로컬 서브에서도 실행될 수는 있지만, 클라이언트에서는 이 함수가 호출되지 않습니다.
OnRep_ReplicatedHasBegunPlay:
- 클라이언트에서는 게임 시작 상태를 리플리케이트하기 위해
OnRep_ReplicatedHasBegunPlay가 사용됩니다. 클라이언트의 개체들은 이 메서드를 통해 서버에서의 게임 시작 여부를 수신하게 됩니다.
- 대개 게임이 시작되면서
bReplicatedHasBegunPlay는true로 설정됩니다. 새로운 클라이언트가 시작 후에 서버에 접속된다면 이 값이true로 되어 클라이언트에서도OnRep_ReplicatedHasBegunPlay가 호출됩니다.
- 클라이언트에서는 게임 시작 상태를 리플리케이트하기 위해
결론적으로, 언급하신 대로 게임이 이미 시작된 이후에 클라이언트가 서버에 접속한다면 OnRep_ReplicatedHasBegunPlay가 호출될 가능성이 높습니다. 반면 게임 시작 전에 클라이언트가 접속된다면 해당 함수는 호출되지 않을 것입니다. 이는 게임이 이미 시작되었는지를 확인하고 클라이언트의 상태를 동기화하는 데 사용됩니다.
관련된 정보를 좀 더 상세히 알고 싶다면 아래의 링크를 참고해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
5.6버전 Networking Insights 실행안됨 문제에 관하여
0
24
1
8강 중간, 분수대의 SetOwner 에 대해 궁금합니다.
0
73
2
플레이어(Actor) 로 (리슨)서버에서 생성 되나요?
0
96
2
3강 중간, 모드 로그로 찍을 시 스탠드얼론이 안찍힙니다.
1
73
2
CompressedFlag 질문
0
55
2
10강까지 머리 위 체력바가 표시가 안됩니다.
0
105
3
10강까지 머리 위 체력바가 표시가 안됩니다.
0
93
2
16:44 부분에서 질문이 있습니다.
0
100
2
12:50 NetMulticast RPC 커넥션 관려하여 질문이 있습니다.
0
116
2
github 3-5 파트 프로젝트에서 컴파일 에러가 발생합니다.
0
112
3
언리얼 인사이트 5.6버전 networking insights 가 뜨지 않습니다.
0
163
3
Insight 사용이 안되어서 문의 드립니다!
0
126
2
하위 레벨...?? High Level 말씀하신거죠..??
0
143
1
CompressedFlags를 이용한 InputThrottle, InputSteering 전달 방법 질문
0
188
1
조건식 프로퍼티 리플리케이션 질문
0
141
2
ArenaBattle에 Log추가하는 곳에 에러가 나타나 질문 드립니다.
0
158
2
7강에서 DORM_Initial 안됨
0
126
3
안녕하세요 강의 내용 정리에 관련해서 질문있어요
0
128
2
캐릭터 클래스의 mesh 관련
0
129
2
3파트 6강 분수대 로테이트에 문제가 생겼습니다.
0
127
3
클라이언트의 오너십 설정에 대해서 궁금합니다.
0
197
3
프로퍼티 리플리케이트 동기화 보장 개념.
0
220
2
결국엔 액터 기본함수들은 어디든 똑같이 일단 실행되는건가요?
0
86
2
3분 39초 경에 질문이 있습니다
0
74
2

