월 55,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
구조체의 operator()를 사용하는 이유가 뭘까요?
액터 우선순위 정렬과정에서 Sort의 매개변수로 FCompoareFActorPriority를 생성해서 넘겨주고 있고, 이 구조체가 operator()를 구현해서 소팅을 진행하는 것 같은데요. 기능적으로 그냥 전역함수를 선언하거나, 아니면 static 함수를 선언하고 함수 포인터를 넘겨주는 것과 차이가 없는 것 같은데 혹시 언리얼 엔진에서 굳이 이렇게 하는 이유가 있을까요? 사소한 거긴 한데, 이런 패턴이 꽤나 자주 보여서 여쭤봅니다..!
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
stat 구조체 NetSerialize 할 때 강제 형변환
소수점 자리가 없어지는 것도 Serialize가 처리 해주는 건가요?? 디버그로는 speed 1.5가 소수점 사라지는 것 처럼 보여요. 그리고 마지막에 NetSerialize에서 변경 사항 결정을 직접 적용할 때 예를 종합하면,추가 bool 을 비트로 이용하여 보낼 변수를 serialize하거나 안하거나 하지만, 결국 보내기로 하여 bool을 true로 적용하는 건 변화가 있었는지 직접 확인하고 로직을 통해 결정해야 하는 건가요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
OnMovementUpdated() 호출
제 컴퓨터에서는 OnMovementUpdated()가 서버랑 클라이언트에 둘 다 작동이 되어서, UpdateFromCompressedFlags() 함수에 따로 텔레포트 함수 안 해도 서버에서 정상 동작되는데요.OnMovementUpdated()가 클라이언트에서만 호출되야 하는게 맞는거죠??무엇이 잘못되었을까요....
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
3강 41:34초 124번 라인 오타 제보
Super::OnRep_Owner()가 되어야 하는 것 아닌가요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
FPhysicsReplication가 FPhysScene이 가지고있는 단일 매니저 같은 클래스인가요?
FPhysScene도 그렇고 FPhysicsReplication 둘 다 World에서 딱 하나만 있는 매니저 클래스인가요?ApplyRigidBodyState() 설명 해주실 때, "FPhysicsReplication가 전체 시스템이기 때문에 모든 액터에서 진행되는 것을 확인할수 있다" 이 말씀이 조금 명확히 이해가 가지 않은 것 같지만 예상으로는 for (auto Itr = ComponentsToTargets.CreateIterator(); Itr; ++Itr){ ....... 이 코드로 타겟 컨테이너에 있는 모든 걸 순회하기 때문에 그렇다고 이해하려는데 맞는 걸까요????
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
마지막 공격모션 ClientRPC 할때 IsLocalController() 개념 확인 질문입니다.
제가 이해한 방식인데요. 파란색으로 표시한 글이 올바르게 이해한게 맞는 건가요??
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
ReadyForReplication() 이 PlayerController BeginPlay() 완료 이후에 실행
ReadyForReplication()이 무조건 PlayerController의 BeginPlay() 완료된 이후에 되는것 처럼 보이는데요. ReadyForReplication() 함수가 BeginPlay() 보다 먼저 실행된다는 건, PlayerController만 예외 인가요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
멀티캐스트 RPC 안하고 서버 RPC와 OnRep_ 함수만 사용했을 경우
이런식으로 멀티캐스트 RPC 안하고 서버 RPC와 OnRep_ 함수만 사용했을 경우,멀티캐스트 RPC로 한거랑 어떤점이 달라지게 되는 건가요?겉으로 보기엔 같은 동작 하긴하는데...약간 좀 헷갈려서 질문드렸습니다..
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
서버 RPC에서 Validate
서버 RPC Validate 함수에서 false 리턴하면, 그 서버 RPC 함수만 실행 안되게 하는 것 대신 클라이언트의 접속 까지 차단하는 이유가 있는 건가요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Multicast RPC가 연관성으로 돌아간다고 했는데 DistanceSquared가 적용 안되는것 같아요
프로퍼티 복제에서는 Distance에 따라 연관성 따져서 통신 되고 안되고 했던 것 같은데요. Multicast RPC는 멀리 떨어져도 통신 하던데 무엇을 잘못 한 건지 아니면 Multicast RPC는 그냥 AlwaysRelevant 모드인 연관성인지 궁금합니다.
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
갑자기 액터 사이의 연관성에 관련된 개념이 좀 헷갈립니다
예전에 part1에서 배웠었던 컴포지션의 outer / SubObject 랑Owner 랑 Attachment의 정의가 좀 헷갈려진 것 같습니다..... Outer/SubObject의 관계는 UObject 사이에서 변수로 참조중인지 아닌지로 클래스 수명에 관련된 걸로 이해하고 있었지만,Actor로 넘어와선 Actor 사이의 Owner가 좀 헷갈리기 시작했는데요. ... Actor에서 부턴 Component 개념도 생겨서 attachment라는게 또 새로 나오는데, 여기서 attachment로 연결된 Actor 사이를 Owner라고 봐도 되나요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
클라이언트에서는 플레이어 컨트롤러가 언제 만들어 지나요?
서버에서 Login() 할 때, 클라이언트 대용 플레이어 컨트롤러가 만들어진다고 이해를 하였는데,클라이언트로 복제되는 과정은 정확히 언제 어떻게 이뤄져서클라이언트에서 플레이어 컨트롤러가 생성되는지.이거는 나중에 자세히 나오나요???클라이언트에서 서버로 로그인 요청하는 것도 같이 나중에 나오나요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
SetActorLocation, Rotation이 제대로 적용되지 않는 이슈
안녕하세요 이득우 선생님.강의를 듣고 혼자 실습해보다가 의문이 생겨서 결국 이곳에 질문을 드리게 되었습니다. 제가 데디케이티드 서버 환경에서 캐릭터의 위치와 회전을 원하는 값(정해진 위치와 회전)으로 지정하여 변경시키는 실습을 혼자 해보고 있었는데, 간헐적으로 캐릭터가 제대로 정해진 위치로 이동하지 않거나, 회전값도 제대로 돌아가지 않는 문제가 발생하는것 같습니다.혼자 열심히 찾아보고 고민하면서 내린 생각은, 서버 RPC함수를 통해 SetActorLocation을 수행하였는데, 서버에서 위치 혹은 회전값을 변경시키기전에 캐릭터가 '직전에' 이동하려고 했던 값이 아직 서버 패킷? 같은곳에 남아있어서 이전 이동 정보로 인해 위치 혹은 회전 변경 함수가 서버에서 적용된 이후 곧이어서 뒤늦게 도착한 캐릭터 위치 혹은 회전 변경값에 의해 다시 값이 바뀌어서 원하는 위치와 회전이 나오지 않는거지 않을까 혼자 추측만 하고 있습니다. 제가 원하는 결과를 얻기 위해서 무엇을 고려하고, 혹은 이런 상황이 많이 벌어질것 같은데, 어떻게 해결하면 좋을지 궁금합니다. 추운 날씨에 좋은 강의 주셔서 공부하는데 몹시 도움되고 있습니다. 감사합니다.
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
클라이언트에서 RPC함수 실행 시점
안녕하세요 어떤 액터의 내부에 다음과 같은 선언이 있고UPROPERTY(ReplicatedUsing=OnRep_Val)float Val; void OnRep_Val(); Val의 값이 서버에서 변경이 되면 클라이언트에서 OnRep_Val()함수가 실행될텐데OnRep_Val함수가 클라이언트에서 실행되는 순서가 궁금합니다.예를 들면 클라이언트의 Tick함수가 다 실행이 된 후에 OnRep_Val함수가 실행되는 건지아니면 클라이언트의 Tick함수가 실행되는 동시에 별도의 쓰레드를 생성해서동시에 OnRep_Val함수가 실행되는 건지 궁금해요 마찬가지로 Server, Client, NetMulticast로 작성된 함수들의 실행방식도요
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
8강 강의에서, RPC의 호출 시점이 궁금합니다.
만약 다음과 같이, 서버에서 multicast RPC 호출을 진행하는 로직을 함수 내부에서 작성했고, 함수 내 로직을 RPC 호출 전, 후 2개로 나눈다면(로직 1 -> 로직 1 내부 RPC 호출 -> 서버 _Imple 실행, 클라에 Imple 실행 명령 -> 로직2 실행) 인 것인가요? 아니면(로직 1 -> 로직 1 내부 RPC 호출 -> 서버 Imple 실행 -> 로직2 실행 -> 나중에 패킷 보낼때 클라의 Imple 실행 명령 보냄) 인 것인가요? 궁금합니다. 만약 RPC가 아닌 Property Relication인 경우에는 두번째 방식과 비슷한 것 (나중에 패킷 보낼때 보냄)이라고 이해 했는데요,RPC일 경우에는 어떤 플로우가 맞나요?둘중에 하나가 맞다면, Server, Client RPC들도 같을까요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
RPC가 Property Replication 보다 빠른가요?
뜬금없는질문이지만...1강 32:20 경에 Property Replication이 RPC에 비해 반응속도가 느리다 라고 말씀하셨는데왜 그런지 간략히 알수 있을까요?저는 그동안 반대로 알고있었거든요. RPC가 느린줄...
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
AGameState는 어떻게 Connection을 가지고 통신을 하는지 궁금합니다.
3강 강의를 듣다가 궁금하게 생겼습니다.일단 저는 다음과 같이 이해하였습니다.'어떤 Actor가 통신을 하려면 Owner를 따라가봤을때 Connection을 소유해야 하며, 일반적으로 Actor 통신 시 Connection을 가지는 PlayerController의 Connection을 이용하여 통신을 진행한다.' 통신에는 RPC, Property Replicate가 속한다고 생각합니다. 그런데, 제가 AGameState에서 Replicate와 RPC를 사용했던 적이 있어서, 이건 어떻게 통신할까? 혹시 서버의 PlayerController가 Owner일까? 궁금했습니다.그래서 다음과 같이 AGameState의 HandleBeginPlay에서 람다로 충분한 시간을 준 뒤 Owner를 출력해보았으나,void AABGameState::HandleBeginPlay() { AB_LOG(LogABNetwork, Log, TEXT("%s"), TEXT("Begin")); Super::HandleBeginPlay(); AB_LOG(LogABNetwork, Log, TEXT("%s"), TEXT("End")); FTimerHandle handle; GetWorld()->GetTimerManager().SetTimer(handle, [this]() { AB_LOG(LogABNetwork, Log, TEXT("Owner : %s"), *Owner->GetName()); }, 10.f, false); }Owner 접근 시 크래시가 나는것을 확인하였습니다. 그렇다면, AGameState는 어떻게 Connection을 사용할 수 있는 것인가요?제가 잘못 이해한 것일까요?특별한 Connection을 가지는 Actor가 따로 있나요? 아니면 AGameState가 자체적으로 Connection을 가지게 되나요? 혹시 이후 강의에 다루는데 제가 아직 3강까지 밖에 안 봐서 모르는 것일까요..?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Listen Server 실행 시 StandAlone 로그가 찍히지 않습니다.
현재 개발 환경은 Rider IDE에, UE 5.3.1 사용중입니다.32:00 쯤에 Play As Listen server + 뷰포트에서 실행 으로 실행 시 StandAlone으로 먼저 실행이 된다고 하셔서 그대로 따라했는데저는 Server로 된 로그만 나옵니다.5.3에서 변경 사항이 있는 것일까요? 아니면 제가 세팅을 잘못한 것인가요? 혹시 제가 잘못 따라쳤나 싶어서 제공해주신 브랜치에서 다운로드 후 실행 해보았는데도 같았습니다. 새로운 Client들을 계속 추가해도 GPlayInEditorID가 계속 0으로 들어오는데, 혹시 이것도 관련이 있을까요?