월 55,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
ai의 공격 애니메이션 rpc를 어떻게 해야할지 모르겠습니다
characternonplayer의 공격 애니메이션 rpc를 어떻게 해야할지 모르겠습니다h:UFUNCTION(Server, Reliable)void ServerAttack();UFUNCTION(Client, Unreliable)void ClientRPCAttack();cpp:void ServerAttack_Implementation(){ ProcessComboCommand(); ClientRPCAttack();}void ClientRPCAttack_Implementation(){ UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance(); AnimInstance->StopAllMontages(0.0f); AnimInstance->Montage_Play(ComboActionMontage);}플레이어가 아닌 액터들의 rpc는 어떤식으로 진행해야하나요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Listen Server 실행 시 애니메이션 떨림 문제
안녕하세요, 교수님.교수님 강의를 듣고 포트폴리오를 한번 만들어보려고 하고 있습니다.구현 중 애니메이션 관련 문제에 도달했는데요,Listen Server 실행 시, Server 측에서 'Client가 조종하는 Character의 애니메이션'을 관찰하면 해당 캐릭터 애니메이션이 미약한 떨림? 렉? 프레임저하? 가 발생하는 문제였습니다.제 프로젝트의 문제인 줄 알았으나, 교수님의 part3 프로젝트에서도, Unreal 기본 템플릿(3인칭) 에서도 같은 문제가 발생하였고,구글링을 해보았더니 엔진 상으로 알려진 문제인 것 같습니다.https://forums.unrealengine.com/t/clients-jitter-on-listen-server/343826?page=2https://forums.unrealengine.com/t/listen-server-clients-animations-are-jittery-laggy/689493/15구글링을 하여 찾아본 해결 방법으로는 애니메이션이 2배로 빨라지는 문제가 새로 발생하는 등, 확실하고 깔끔한 해결 방법이 없는 것 같습니다.직접 해결해보려 엔진 코드를 열어보고 있지만 역시 너무나 어렵습니다..이런 경우에는 어떻게 해결해야 하나요 ... ?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Trace Store 에 아무것도 안 뜹니다.
배치 파일로 에디터를 열고, unrealinsight 실행하여 connect 해 준 다음 Trace store 를 열면 아무것도 뜨지 않고 비어있습니다. 어떻게 해야 할까요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
PostNetInit 관련 질문
안녕하세요, PostNetInint 관련 질문이 있습니다. LogABNetwork: [SERVER] AABGameMode::PreLogin ============================================================ LogABNetwork: [SERVER] AABGameMode::PreLogin Begin LogABNetwork: [SERVER] AABGameMode::PreLogin End LogABNetwork: [SERVER] AABGameMode::Login Begin LogABNetwork: [SERVER] AABPlayerController::BeginPlay Begin BP_ABPlayerController_C_1 LogABNetwork: [SERVER] AABPlayerController::BeginPlay End LogABNetwork: [SERVER] AABGameMode::Login End LogABNetwork: [SERVER] AABGameMode::PostLogin Begin LogABNetwork: [SERVER] AABCharacterPlayer::BeginPlay Begin ABCharacterPlayer_1 LogABNetwork: [SERVER] AABCharacterPlayer::BeginPlay End ABCharacterPlayer_1 LogABNetwork: [SERVER] AABPlayerController::OnPossess Begin BP_ABPlayerController_C_1 LogABNetwork: [SERVER] AABCharacterPlayer::PossessedBy Begin ABCharacterPlayer_1 LogABNetwork: [SERVER] AABCharacterPlayer::PossessedBy No Owner LogABNetwork: [SERVER] AABCharacterPlayer::PossessedBy Owner : BP_ABPlayerController_C_1 LogABNetwork: [SERVER] AABCharacterPlayer::PossessedBy End ABCharacterPlayer_1 LogABNetwork: [SERVER] AABPlayerController::OnPossess End LogABNetwork: [SERVER] AABGameMode::PostLogin Client Connections : IpConnection_1 LogABNetwork: [SERVER] AABGameMode::PostLogin End LogABNetwork: [CLIENT1] AABPlayerController::PostNetInit Begin BP_ABPlayerController_C_0 LogABNetwork: [CLIENT1] AABPlayerController::PostNetInit Server Connection : IpConnection_0 LogABNetwork: [CLIENT1] AABPlayerController::PostNetInit End LogABNetwork: [CLIENT1] AABCharacterPlayer::OnRep_Owner Begin ABCharacterPlayer_0 LogABNetwork: [CLIENT1] AABCharacterPlayer::OnRep_Owner End ABCharacterPlayer_0 LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit Begin ABCharacterPlayer_0 LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit End LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit Begin ABCharacterPlayer_1 LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit End LogABNetwork: [CLIENT1] AABGameState::OnRep_ReplicatedHasBegunPlay Begin No Owner LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay Begin BP_ABPlayerController_C_0 LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay End LogABNetwork: [CLIENT1] AABCharacterPlayer::BeginPlay Begin ABCharacterPlayer_0 LogABNetwork: [CLIENT1] AABCharacterPlayer::BeginPlay End ABCharacterPlayer_0 LogABNetwork: [CLIENT1] AABCharacterPlayer::BeginPlay Begin ABCharacterPlayer_1 LogABNetwork: [CLIENT1] AABCharacterPlayer::BeginPlay End ABCharacterPlayer_1 LogABNetwork: [CLIENT1] AABGameState::OnRep_ReplicatedHasBegunPlay End 강의 말미의 로그를 보면 [CLIENT1] 의 AABPlayerController::PostNetInit 함수가 함수가 끝나고 나서 OnRep_Owner 함수가 실행됩니다. 그리고 나서 AABCharacterPlayer의 PostNetInit 함수가 시작 되는데, Actor 를 상속받은 모든 하위 클래스에서 PostNetInit 을 호출 하는 것으로 알고 있습니다. 이때 순서가 컨트롤러의 PostNetInit 이 호출되고 종료된 다음, 그 다음으로 캐릭터의 PostNetInit이 호출되고 종료되는데, 캐릭터와 컨트롤러 둘다 액터를 상속 받았는데 순서가 무조건 먼저 컨트롤러 호출 및 완료 후에 캐릭터 호출 및 완료 인지 궁금합니다. Gamemode->Controller-> Pawn 이순서가 무조건 맞나요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
클라이언트의 애니메이션블루프린트를 어떻게 바꿔야 하나요
2인 멀티게임을 만들고 있는데 서버 플레이어의 메쉬와 클라이언트 플레이어의 메쉬가 다르고 클라이언트 플레이어의 AnimInstance를 바꾸고 싶은데 어떻게 해야하나요?
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
서버에만 호출된다는것과 소유한 서버에서 호출된다는 의미
"서버에만" 과 "소유한 서버" 에서 호출된다는 차이가 정확히 무엇인지 알 수 있을 까요?
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
오류질문
LoginId:ec562db7476f7bdf4937b6a64bee3512EpicAccountId:91a6d7e499ba484bb30b7d42f941c5baUnhandled Exception: EXCEPTION_INT_DIVIDE_BY_ZEROUnrealEditor_ArenaBattle!AABCharacterPlayer::UpdateMeshFromPlayerState() [C:\Users\gwp\Documents\Unreal Projects\UE5_Part3\UnrealProgrammingPart3\Source\ArenaBattle\Character\ABCharacterPlayer.cpp:559]UnrealEditor_Engine!APlayerController::OnPossess() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\PlayerController.cpp:835]UnrealEditor_ArenaBattle!AABPlayerController::OnPossess() [C:\Users\gwp\Documents\Unreal Projects\UE5_Part3\UnrealProgrammingPart3\Source\ArenaBattle\Player\ABPlayerController.cpp:67]UnrealEditor_Engine!AController::Possess() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Controller.cpp:333]UnrealEditor_Engine!AGameModeBase::FinishRestartPlayer() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameModeBase.cpp:1343]UnrealEditor_Engine!AGameModeBase::RestartPlayerAtPlayerStart() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameModeBase.cpp:1287]UnrealEditor_Engine!AGameModeBase::RestartPlayer() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameModeBase.cpp:1238]UnrealEditor_Engine!AGameMode::HandleMatchHasStarted() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameMode.cpp:208]UnrealEditor_Engine!AGameMode::SetMatchState() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameMode.cpp:341]UnrealEditor_Engine!AGameMode::StartMatch() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameMode.cpp:201]UnrealEditor_ArenaBattle!AABGameMode::StartPlay() [C:\Users\gwp\Documents\Unreal Projects\UE5_Part3\UnrealProgrammingPart3\Source\ArenaBattle\Game\ABGameMode.cpp:114]UnrealEditor_Engine!UWorld::BeginPlay() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:4882]UnrealEditor_Engine!UGameInstance::StartPlayInEditorGameInstance() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameInstance.cpp:547]UnrealEditor_UnrealEd!UEditorEngine::CreateInnerProcessPIEGameInstance() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:3210]UnrealEditor_UnrealEd!UEditorEngine::OnLoginPIEComplete_Deferred() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1673]UnrealEditor_UnrealEd!UEditorEngine::CreateNewPlayInEditorInstance() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1936]UnrealEditor_UnrealEd!UEditorEngine::StartPlayInEditorSession() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:2941]UnrealEditor_UnrealEd!UEditorEngine::StartQueuedPlaySessionRequestImpl() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1250]UnrealEditor_UnrealEd!UEditorEngine::StartQueuedPlaySessionRequest() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1153]UnrealEditor_UnrealEd!UEditorEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:1777]UnrealEditor_UnrealEd!UUnrealEdEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:517]UnrealEditor!FEngineLoop::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5369]UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:202]UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:107]UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:244]UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:282]UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]kernel32ntdll 이 부분에서의 코드가 정상적으로 되어있는거 같은데 이러한 오류가 계속 생겨나고 있습니다
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
캐릭터 피격 버그 관련 질문
안녕하세요, 강사님. 금일 마지막 강의까지 무사히 완강하였는데요, 캐릭터 피격과 관련해서 버그가 있는 것 같아 여쭈어보고자 합니다. 버그 현상은 캐릭터가 사망 후에 부활했을 때, 부활한 캐릭터를 다시 공격하면 정상적으로 피격이 되지 않는 문제입니다. 드로우 디버깅을 보면 공격 자체가 정상적인 피격 판정이 이루어지지 않는 것 같습니다.언제는 한 번 사망 후 부활했을 때부터 피격이 안되는 경우가 있고, 언제는 두 번째 사망 후 부활했을 때부터 피격이 안되는 경우가 발생합니다. 혹시나 제가 코드를 따라서 입력하는 과정에서 문제가 있나하여 올려주신 수업 자료 파일을 그대로 실행해서 확인해보았는데 여전히 같은 문제가 있었습니다. 어떠한 이유로 이러한 현상이 발생하는 것일까요?? 동영상 첨부가 어려워 제가 게임을 한 번 진행하는 동안 발생했던 모습을 사진과 과정으로 첨부하겠습니다.1. 서버 플레이어가 클라이언트 플레이어 첫 번 째 킬 2. 이후 서버 플레이어가 부활한 클라이언트 플레이어 공격 시 피격 되지 않음 3. 2번 상황 이후 반대로 클라이언트 플레이어가 서버 플레이어 첫 번째 킬 4. 이후 부활한 서버 플레이어를 클라이언트 플레이어가 두 번째 킬 5. 이후 한 번 더 부활한 서버 플레이어를 클라이언트 플레이어가 공격 시 피격 되지 않음
- 해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
해당 예제의 Multicast RPC에 대한 질문
안녕하세요, 강사님 이번 강좌의 Multicast RPC 코드 부분에서 이해되지 않는 것이 있어 여쭈어보고자 합니다.설명해주신 대로 구현한 결과, 클라이언트 측 화면에서 클라이언트 플레이어가 공격 시 클라이언트 플레이어의 공격 모션이 수행되고, 동시에 서버 측 화면에서도 클라이언트 플레이어의 공격 모션이 수행되고 있습니다. 하지만 코드를 하나하나 따라가보았을 때, 이런 결과가 나오지 않아야 할텐데 라는 생각이 들었습니다. void AABCharacterPlayer::MulticastRPCAttack_Implementation() { AB_LOG(LogABNetwork, Log, TEXT("%s"), TEXT("Begin")); if (HasAuthority()) { bCanAttack = false; OnRep_CanAttack(); FTimerHandle Handle; GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([&] { bCanAttack = true; OnRep_CanAttack(); } ), AttackTime, false, -1.0f); } UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance(); AnimInstance->Montage_Play(ComboActionMontage); }이해되지 않는 부분은 MulticastRPCAttack_Implementation()의 애니메이션 몽타주를 재생하는 코드 부분입니다.Multicast RPC에 의해서 해당 함수는 서버와 클라이언트 모두에서 실행된다고 이해했습니다. 그렇다면 서버에서는 MulticastRPCAttack_Implementation() 함수의 if문과 애니메이션 몽타주를 재생하는 코드가 모두 실행되게 될텐데요, 그러면 서버쪽에서 호출된 MulticastRPCAttack_Implementation() 함수이므로 서버 측 화면에서는 서버 플레이어의 AnimInstance를 얻어 애니메이션 몽타주를 재생해야 하는 것 아닌가? 라고 생각했으나 실제로 실행 결과는 아시다시피 서버 측 화면의 클라이언트 플레이어의 애니메이션이 재생됩니다. 어째서 제가 생각한 대로 애니메이션이 수행되지 않는 것일까요??제가 이해되지 않는 이유는 어딘가 잘못 이해하고 있기 때문이라고 생각합니다. 어느 부분을 어떻게 잘못 이해하고 있는 것인지 알고 싶습니다..
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Insight.bat 파일 실행 오류
배치 파일이 실행이 안됩니다 프로젝트 폴도 경로랑 공백을 확인해보았는데도 실행 오류가 뜹니다
- 미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
13강 void UABCharacterMovementComponent::ABTeleport() 구현에서 문제가 있습니다.
강의 코드와 같이 작성했으나 CharacterOwner에 멤버함수에 대해 접근이 안됩니다.//.h FIle class ARENABATTLE_API UABCharacterMovementComponent : public UCharacterMovementComponent 분명 UCharacterMovementComponent 클래스를 상속받았고 UCharacterMovementComponent 클래스안에 ACharater에대한 선언도 있는듯 한데CharacterOwner포인터가 incompleted class라고 하면서 클래스 내부에 대해 접근을 하지못하네요..ㅠㅠFVector TargetLocation = CharacterOwner->GetActorLocation() + CharacterOwner->GetActorForwardVector() * TeleportOffset;#include "GameFramework/Character.h"우선 해당 클래스를 cpp에 포함시켜서 해결은 했는데 저만발생하는거같아 이상하네요 더좋은 방법이 있을까요?? 아래는 에러코드들입니다.error C2027: use of undefined type 'ACharacter'error C2039: 'GetActorLocation': is not a member of 'TObjectPtr<ACharacter>error C2027: use of undefined type 'ACharacter'
- 미해결이득우의 언리얼 프로그래밍 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도 호출하지 않아도 되나요?