월 55,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
UPROPERTY(Transient) 속성 질문
항상 친절한 답변해주셔서 너무너무 감사합니다 ㅜㅜ FRepMovement구조체 안에 변수들은 대부분 Transient속성을 사용하는데 (강의 내용 5분 ~~)Transient속성은 어떨때 쓰이는 걸까요? 전 강의에서 짤막하게 설명한다음 넘어갔던거 같은데 기억이 잘안나서요.. 검색을 해보니 직렬화를 해제하고 게임이 시작될때 마다 초기화가 되는 휘발성 변수라는 정보를 알게 되었는데 이게 무슨 말인지 잘 와 닿지 않아서요.. Transient 속성을 사용하면 어떤 효과가 있는걸까요??게임이시작될때 초기화 되는 변수라면 거의 대부분의 변수가 Transient로 설정될거같은데...사용되는 예시도 같이 알려주시면 감사하겠습니다.. 네트워크에서 변수를 딱한번 쓰고 버리는 용도로 사용 되는것일까요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
저는 왜 비쥬얼스튜디오에서 ReplicatedMoveToServer가 검색이 안되나요?
cpp 검색이 안되네요 ㅜㅜ필요한 플러그인 설치과정 모두 진행했는데 안나오는데 혹시 방법을 아실까요??
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Unreliable & Reliable 신뢰성 비신뢰성의 의미가
TCP와 UDP의 데이터 송수신에서의 신뢰성을 의미하는건가요 아니면 클라의 데이터를 신뢰할수 없다 라는 의미일까요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
안녕하세요. 질문드립니다
안녕하세요. 해당 강의와 관련이 없는 내용일 수 있지만 질문드립니다.로그인, 게임에 필요한 정보 등을 주고 받는 tcp나 http 통신을 하는 서버(이하 소켓 서버)와 소켓 통신을 하려고 한다면 (로그인으로 예를 들어보겠습니다) 로그인 레벨을 만들고 소켓 통신하는 부분을 로그인 레벨의 게임 모드에서 동작하게 하고 게임인스턴스에(클라이언트) 정보를 받고 다음 레벨로 넘어가면 될까요?그 후에 리슨서버나 데디케이트 서버를 사용해서 인게임 로직을 구현한다면 플레이어 정보(아이템, 레벨 등)는 클라이언트에서 서버로 입장 시에 앞단계를 통해 클라이언트에서 유저를 식별할 수 있는 최소한의 정보를 받아서(예를 들면 플레이어id) 소켓 서버로 요청 후에 클라이언트로 복제하면 될까요? 아니면 앞단계를 통해 클라이언트에 정보를 미리 받고 최소한의 검증만 하면 될까요?언리얼 서버에서 매치가 종료된 후 결과에 따른 보상이나 매치 중 소비하는 아이템(물약, 장비 내구도 등)같은 db 처리가 필요한 경우 언리얼 서버에서 처리하는지 별도의 서버에 요청하여 따로 처리하는지요?작성하고 보니 질문이 이해가 되지 않을 수도 있을 것 같은데요. 질문의 요지는 인게임 로직을 처리하는 언리얼 서버가 아닌 따로 구현한 소켓 서버와 언리얼 엔진을 연동하는 과정에 대한 질문을 드리고 싶습니다. 틀렸거나 더 효율적인 방법이 있으면 답변 부탁드리겠습니다. 감사합니다
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
UPROPERTY(Replicated)로 선언한 속성값의 변화는 어떻게 감지하게 되나요?
Replicated로 지정한 속성값이 변화하면 콜백함수를 호출시키는데요, 그렇다면 어떻게 속성이 변화하는걸 감지하는건가요? 언리얼내부에서 Replicated로 지정한 속성이 변화되는지 계속 감시하고 있다가 변화되면 콜백함수를 시켜주는걸까요?? 디버깅하면서 호출스택따라가봐도 뭐가 보이질 않네요...ㅜ.ㅜ
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Authority 엑터 질문
게임에 있는 카드보드 캐릭터로 볼때 리슨서버로 동작하는 어플리케이션에서는 Authority를 가진 엑터이고 이 리슨서버에 접속된 클라의 입장에서 봤을때 이 엑터(햔재 리슨서버의 카드보드)는SimulatedProxy엑터가 되는게 맞을까요??그리고 클라의 카드보드 캐릭터는 Authority로 되던데이렇게 되면 자기 자신은 신뢰하게 되는건가요...?? 햇갈리네요 ㅜㅜ
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Insight .bat파일 실행안되시는분들은 경로에 공백이나 한글 확인해보시면될거같습니다.
실행안되서 확인해보니 공백때문에 실행이안됬었네요
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
33:18 패밀리에 묶인다는게 어떤뜻일까요??
패밀리안에 묶인다는 표현이 자주등장하는데, 이말이 어떤 의미일까요?? 이것도 이후에 나오는 내용일까요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
런타임 중 NewObject<>()의 Replicate에 대해 조금 더 궁금합니다.
런타임중에 SpawnActor<>()와 NewObject<>()를 멀티플레이 환경에서 사용하고 싶은데,강의를 듣고 엔진 코드도 살펴보고 문서도 읽어보고 5.3 환경에서 실험도 해보고 했지만잘 모르겠어서 이렇게 질문드립니다." AActor 상속 클래스를 Replicate = true로 하고 서버에서 SpawnActor를 사용해 스폰하면 클라이언트에도 자동으로 생성이 된다. "-> 이건 실험도 해보았고 에픽 포럼 글 확인해보니 맞는거 같습니다위 실험 결과를 토대로 UActorComponent는 어떻게 동작할까? 궁금해서 실험을 해보았을 때 로그를 찍으며 실험해본 결과는 아래와 같습니다. - UActorComponent는 UActorComponent의 Replicate 속성 true false 여부에 상관없이, - 서버에서 NewObject<>()로 생성 후, (여기서 outer는 ACharacter 같은 걸로 설정해서 추후 RegisterComponent()시 문제가 없도록 하고)- RegisterComponent를 통해 등록하면 https://docs.unrealengine.com/5.3/ko/replicated-subobjects-in-unreal-engine/의 과정을 거치지 않았는데도 클라이언트에서도 자동으로 생성이 된다.라는 결과를 얻었습니다. 이게 맞나요? 제 생각엔 'NewObject<>()시 사용한 Outer가 Replicate가 true인 Actor이면, UActorComponent는 UObject를 서브 오브젝트 레플리케이트 시키기 위한 추가 로직(위 문서 링크에 나와있는) 없이도 자동으로 잘 된다' 라는 생각이 드는데이게 맞는건지 아니면 틀린건지 위에 실험도 잘못한건지 잘 모르겠습니다 ㅜㅜ혹시나 맞다면 UActorComponent를 위처럼 동적으로 수정 / 삭제 시 RemoveReplicatedSubObject도 호출하지 않아도 되나요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Part3 1강 레포지토리에서 플레이누르면 BluePrint쪽에서 에러가 발생하는거같습니다.
안녕하세요Part3 1강에 적혀있는 레포지토리에서1강 기본 프로젝트 샘플 커밋에서 빌드와 엔진까진 작동이되는데플레이 버튼을 누르면 아래의 에러가 발생하고있습니다 ㅠㅜ..Could not find the skeleton for Anim Blueprint 'ABP_ABCharacter' Would you like to choose a new one?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
OnRep_ReplicatedHasBegunPlay 함수
bReplicatedHasBegunPlay 속성이 변경 됐을때 실행된다 하셨는데요.. 그러면 이미 게임이 시작된 상태에서 클라이언트가 접속시 클라이언트는 복제된 이미시작된 게임스테이트의 상태를보고bReplicatedHasBegunPlay속성을 변경 시켜주는건가요..? bReplicatedHasBegunPlay속성을 변경 시키는 타이밍이 언제 인가요??
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
10번 강의 질문 있습니다
안녕하십니까. 질문 남기기 앞서 강의 정말 잘 보고 있다고 말씀 드리고 싶습니다. 제가 궁금한 부분은 10번 강의에서 공격에 맞았을 때 검증(Validation) 하는 부분입니다. bool AABCharacterPlayer::ServerRPCNotifyHit_Validate(const FHitResult& HitResult, float HitCheckTime) { return (HitCheckTime - LastAttackStartTime) > AcceptMinCheckTime; } 공격 시작 타이밍과 몽타주에 배치한 트리거 함수 간의 간격을 검증하기 위한 것으로 이해했습니다. 검증 코드에서 LastAttackStartTime이란 변수가 쓰였고, LastAttackStartTime이란 변수가 아래 코드의 ServerRPCAttack에서 인자로 받은 AttackStartTime 변수로 세팅되는 것을 확인했습니다. void AABCharacterPlayer::ServerRPCAttack_Implementation(float AttackStartTime) { AB_LOG(LogABNetwork, Log, TEXT("%s"), TEXT("Begin")); bCanAttack = false; OnRep_CanAttack(); AttackTimeDifference = GetWorld()->GetTimeSeconds() - AttackStartTime; AB_LOG(LogABNetwork, Log, TEXT("LagTime : %f"), AttackTimeDifference); AttackTimeDifference = FMath::Clamp(AttackTimeDifference, 0.0f, AttackTime - 0.01f); FTimerHandle Handle; GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([&] { bCanAttack = true; OnRep_CanAttack(); } ), AttackTime - AttackTimeDifference, false, -1.0f); LastAttackStartTime = AttackStartTime; PlayAttackAnimation(); //MulticastRPCAttack(); for (APlayerController* PlayerController : TActorRange<APlayerController>(GetWorld())) { if (PlayerController && GetController() != PlayerController) { if(!PlayerController->IsLocalController()) { AABCharacterPlayer* OtherPlayer = Cast<AABCharacterPlayer>(PlayerController->GetPawn()); if (OtherPlayer) { OtherPlayer->ClientRPCPlayAnimation(this); } } } } } LastAttackStartTime은 서버의 변수이고 그렇기 때문에 여러 클라이언트가 동시에 공격을 한다면 LastAttackStartTime이 덮어 씌워질 수 있다고 생각하는데 그렇게 되면 검증하는 부분에서 문제가 생길 수도 있다고 생각합니다. 질문 : 여러 클라이언트가 동시에 공격 시 LastAttackStartTime이 덮어 씌워지는 것이 맞는가?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
서버에서의 공격 동기화 질문입니다.
언리얼에서 얼마나 정확히 이러한 문제에 대해서 네트워크동기화를 잘 해주는지 모르겠어서 여쭈어봅니다.주황 녹색 모두 서버(제3의 호스트 또는 데디케이티드서버)에 접속한 클라이언트입니다.서버로의 핑은 200ms라 모두 가정하고 주황캐릭터가 움직이는 녹색 캐릭터를 공격하는 경우내 클라이언트에서는 내 주황이 잘 조준해서(Line trace나 Collision overlay) 녹색을 맞추었는데서버에서는 녹색이 이미 주황이 조준한 위치를 벗어나 계속 움직이고 있는 상황이 생기지 않나요? 캐릭터가 사람처럼 100m를 20초에 움직이면200ms 면 1미터의 오차가 생길수 있어서 충분히 클라이언트와 서버의 공격 오차가 발생할수 있다고 보는데요. 언리얼엔진이 이러한 핑에 따른 오차들을 보정하여 공격에 대한 충돌체크를 해주는 기능이 있나요?없다면 어떻게 처리를 하는게 좋을지 팁을 알려주시면 감사하겠습니다.
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
멀티플레이가 되도록 해주는 코드가 어디에 있는지 궁금합니다.
1강 예제코드를 다운받았을때 이미 멀티플레이가 가능한 상태였는데요, 키 입력을 송신하는 부분과 멀티플레이를 가능하게 구현을 하는 소스코드는 어디에 위치해 있는건지, 강의에서 소개한 이외의 세팅이 있는건지 궁금합니다.
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
네트워크 프로그래밍 언리얼 3 4 5 차이
현재 강의는 언리얼5 기준으로 진행이 되는데 네트워크 시스템 구성이나 커넥션 핸드셰이킹 같은 방식이 다른 버전도 똑같은지 궁금합니다.현재 강의를 듣는게 나중에 언리얼3 4 작업을 할 때도 도움이 될까요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
NewObejct<>() 함수의 Replicate 여부가 궁금합니다.
안녕하세요. 강의를 듣고 나서 멀티플레이 게임을 만들어보려고 하고 있는데,Replicate에 대해 궁금한게 있는데 구글링을 해보아도 알 수가 없어서 이렇게 질문 드립니다. SpawnActor<>() 함수 같은 경우 서버에서 호출하면 자동으로 클라이언트들에게 Replicate 되는 것으로 알고 있습니다. 이 함수 내부에서는 NewObject<>()를 호출하는 것을 확인하였는데요. 그렇다면, NewObject<>() 함수도 마찬가지로 서버에서 호출 하면 클라이언트들에게 Replicate 되어 클라이언트들도 해당 객체를 생성하게 되나요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
레벨 재시작이 아닌 리스폰을 한다고 했을 때
캐릭터에 붙어있던 플레이어 컨트롤러나 AI 컨트롤러는 캐릭터가 삭제되고 리스폰 됐을 때, 자동으로 다시 같은 인스턴스가 붙나요???플레이어 스테이트도 캐릭터마다 하나씩 붙어있는 걸로 알고 있는데요. 이것 역시 그대로 사용하나요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
안녕하세요. 강의 보기 전 질문드립니다.
안녕하세요. 유니티를 다루다가 언리얼을 공부하고자 해당 강의 구매 후 시청 전에 질문 드릴 것이 있어 남깁니다.유니티로 게임 로직을 구현할 때 경험상 씬(언리얼에서는 레벨이라고 하는 것 같습니다)을 통해 간단하게 로그인씬->로비씬->인게임씬의 로직으로 게임이 구현되는데요. 강의 내용의 서버는 인게임씬에 해당하는 것인지 로그인씬, 로비씬 같은 것도 구현이 가능한 것인지 궁금합니다.인게임씬에 해당하여 다른 씬은 따로 구현해야한다면 1강이나 2강을 보면 도움이 될 지도 궁금합니다.감사합니다.
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
10강 내용에 대해서 질문드립니다.
안녕하세요 이득우님.이전에 다른분이 남겨주신 내용과 위치가 같은데요,380번째줄, void AABCharacterPlayer::ServerRPCAttack_Implementation(float AttackStartTime) 함수에 대한 질문이 있습니다. 수업을 위해서 401번째줄에 if(!PlayerController->IsLocalController()) 조건문을 넣어주신것 같아보이긴 하는데, 사실 엄밀하게는, 이 조건문은 아예 없어도 전혀 문제되지 않는 로직이라고 생각되는데 제가 잘못 생각한걸까요? 좀 찝찝하기도 해서, 혹시 제가 놓친게 있나 싶어서 질문 남깁니다. 위 조건문이 없어도 되는 이유는, 해당 로직이 있는 곳은 클라이언트에서는 절대 동작할 수 없는 Server RPC 함수 내부 코드이며, 그렇기 때문에 서버에서만 동작하는 상태가 보장되고, 추가로 서버에 있는 모든 PlayerController는 서버 클라이언트 서버 모델에서 항상 IsLocalController가 false가 되기 때문이라고 생각하였습니다.다른분의 질문에서 올려주신 IsLocalController 함수는 AController의 함수로 올려주셨는데, 저희가 사용하는 Controller는 현재 형변환에 의해 PlayerController이고, 언리얼에서 함수 호출을 살펴보면, PlayerController의 IsLocalController이 호출되는것 같습니다. 그래서 위의 로직에서if (NetMode == NM_DedicatedServer)return false;에 의해 false가 항상 반환될거 같은데, 혹시 제가 놓친 부분이 있을까요?=> 혼자 고민을 이것저것 해보고 테스트 해보면서, 아마도 이렇게 해주신 이유는 Listen 서버이기 때문에 그런것 같네요. 리슨서버에서는 리슨서버의 PlayerController가 bIsLocalPlayerController가 true가 나오더군요. 그럼에도 불구하고, 일반적으로 데디케이티드 서버 환경에서는 리슨서버를 생각하지 않기 때문에 위 조건문은 필요없을것으로 생각됩니다. 게임 환경을 Client로 바꿔서 사용하였을때를 생각해보았습니다. 그리고 추가로 질문이 하나 더 있습니다.강의에서 Multicast 방식을 각각의 Controller에 대해 Client RPC를 사용해주면서 네트워크 최적화를 설명하신것에 대해서, 저는 이 부분을 멀티캐스트 하나를 사용하는것과 월드 내에 모든 클라이언트에 해당하는 Controller에게 직접 Client RPC를 직접 각각 호출해주는게 좀더 네트워크 성능상 좋다, 라고 이해했는데, 이 부분은 제가 올바르게 이해한게 맞을까요? 언제나 좋은 강의 해주시고, 질문도 꼼꼼하게 달아주셔서 감사드립니다(_ _)
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
안녕하세요, 혹시 GameAbilitySystem 강의는 시기가 언제쯤 업로드 되는지 여쭤봅니다
제목과 같습니다.