7강 실습 중 OnRep_ServerLightColor 함수 내에서 아래 코드와 같이 Authority를 체크하셨는데, OnRep 함수는 클라이언트에서만 실행되는것이 보장되기 때문에 별도의 Authority 체크 없이 클라이언트 사이드 코드를 작성해도 되는 것으로 이해하고 있었습니다. 이 경우에는 BeginPlay 서버 쪽에서 명시적으로 OnRep_ServerLightColor() 함수를 호출하고 있기때문에 특별히 Authority를 체크해준 것이고, 기본적으로 OnRep 함수는 클라이언트에서만 호출되는 것이 보장된다고 이해해도 괜찮을까요?
새로운 환경에서 GAS를 실습하고자 프로젝트를 하나 새로 파서 GAS시스템을 적용하고자 하였습니다. 처럼 Gameplay관련 모듈을 넣고 빌드를 했는데 와 같이 관련 모듈이 나타나지 않는 상황입니다. 세팅시 추가적으로 해야할 일이 있을까요?? 강의 항상 잘 듣고있습니다. 감사합니다.
4강의 void UPendingNetGame::SendInitialJoin() 함수의 if ( NetDriver != nullptr) 부분에 중단점이 걸리지 않습니다 (35:06). 혹시 버전이 달라져서 중단점이 걸리지 않게 된 것인가요? 아니면 저 if문에 지금도 중단점 테스트가 유효한가요? (developGame Editor와 DebugGame Editor 둘 다 같은 증상입니다.)
8분 20초 부터 GameFeatureSubsystem를 상속받아 사용하지 말고 UDefaultGameFeaturesProjectPolicies 이 클래스를 상속받아 사용하라는 얘기를 하시는데 게임의 규칙들을 GameFeatureSubsystem을 상속 받아 사용하는 방식이랑 어떤 차이가 있는 건가요? Observer패턴을 쓰는 걸 보면 게임의 규칙들을 컴포넌트처럼 만들어서 사용하는 것 같긴 한데 어떤 구조로 돌아가는지 정확히 이해를 못하겠어요.
위 이미지 처럼 압축을 풀고, 해당 부분을 복사해서 제가 강의를 따라하는 프로젝트의 붙여넣었습니다. 그리고 에디터를 통해 확인해보니 아래 이미지 처럼 인식하지 않습니다. 더블 클릭할 시 아래 메시지가 나옵니다. 아래의 다른 문의 글의 이미지에 나와있는 Github의 I nfinityBladeWarriors와 InfinityBladeWeapons 폴더들은 현재 존재하지 않습니다. 어떻게 해결할 수 있을까요? 제가 잘못 복사한건가요?
비쥬얼 스튜디오에서 디버그로 게임 에디터를 킨 다음 실행하면 반영이 잘 되어서 실행이 되는데요 한 번 오류가 나오더니 에디터에서 이전버전?으로 적용이 되는 것같아요 만들어 놨던 npc도 표시가 안되서 라이브코딩을 해보려는데 계속 저렇게 오류가 나옵니다.. Generate VS Project File도 다시 해보고 했는데도 이러네요.. 해결방법이 뭔지 좀 알 수 있을까요?
선생님 강의를 전부 듣고 저만의 게임을 제작하고 있습니다. 강의 내용과 크게 상관은 없지만 여쭐 곳이 없어 질문합니다. 문제상황은 이렇습니다. 저는 PMAttack 이라는 트레이스채널을 하나 만들고 기본 설정은 Overlap으로 둔 상태입니다. 그리고 다음과 같은 코드를 통해 구 안에 들어오는 모든 액터를 찾아보려했습니다. void APMArrowRain::HitOfRain() { // 1초마다 데미지 FVector Center = GetActorLocation(); const float SphereRadius = 500.f; FCollisionShape CollisionSphere = FCollisionShape::MakeSphere(SphereRadius); FCollisionQueryParams Params(FName(TEXT("Attack")), false, this); TArray<FOverlapResult> Overlaps; DrawDebugSphere(GetWorld(), Center, SphereRadius, 12, FColor::Green, false, 1.0f, 0, 2.0f); bool bIsHit = GetWorld()->OverlapMultiByChannel( Overlaps, // 결과를 저장할 배열 Center, // 중심점 FQuat::Identity, // 회전 ECollisionChannel::ECC_GameTraceChannel2, // 채널(PMAttack) CollisionSphere, // 콜리전 형태 Params // 추가 파라미터 ); if (bIsHit) { for (auto& Overlap : Overlaps) { AActor* OverlapActor = Overlap.GetActor(); if (OverlapActor == Owner) { UE_LOG(LogTemp, Log, TEXT("asd")); continue; } if (OverlapActor) { // 데미지를 받는 인터페이스를 생성해서 인터페이스가 구현됐는지 확인 UE_LOG(LogTemp, Log, TEXT("%s"), *OverlapActor->GetName()); } } } } 하지만 코드를 실행해보면 주변에 있는 액터(큐브나 플레인, 그리고 Owner 등)이 아무도 로그에 찍히지 않았습니다. (모든 액터는 Overlap event를 전부 true로 설정했습니다.) 문제는 여기부터 입니다. 범위에 들어오는 액터중 하나라도 ColiisionPreset에서 PMAttack에 대한 채널 반응을 Block으로 바꿀 경우 그 때부터 정상적으로 범위에 있는 액터들이 출력됩니다. 오랜 시간 조사를 했지만 끝내 해답을 얻지 못해 질문드립니다. 왜 범위 내 모든 액터의 콜리전 설정이 특정 채널에 대해 Overlap 인 경우 일땐 위 코드가 정상적으로 동작하지 않고, 왜 범위 내 액터 중 하나만 이라도 Block으로 설정되어 있다면 그제서야 모든 액터에 대해 정상적으로 Overlap 판정이 날까요? 긴 글 읽어주셔서 감사합니다.
클라이언트에서 공격 명령을 하여 ServerRPCAttack이 실행되는 코드입니다. 월래는 NetMulticast를 사용해 서버와 모든 클라이언트에서 애니메이션이 실행되도록 패킷을 전달했지만, 명령을 내린 클라이언트만 패킷전송을 제외시키기 위해서 다음과 같이 짠건 이해했습니다. 하지만 이해가 안 가는 부분이 있습니다. 명령을 내린 클라이언트에 대응하는 (서버상의)액터가 다음 코드를 실행할텐데, 결국 서버상에 있는 클라에 대응하는 액터들은 모두 역할이 [ Authority / AutonomousProxy ] 이거 아닌가요? 근데 if문에서 simulatedProxy만 걸러냈다고 말씀하시는 부분이 이해가 안갑니다.
3강의 '액터의 접속을 소유하다'라는 표현이 잘 이해가지 않습니다. 강의를 반복해 듣고 공식문서를 정독해본 결과 아래와 같이 결론을 내렸는데 혹시라도 틀린 부분이 있다면 정정해주시면 감사할 것 같습니다! ‘액터의 접속을 소유한다’ = ‘액터가 해당 접속에 소유된다’ = 액터가 해당 클라이언트(PlayerController)가 소유한 접속에 접근할 수 있는 패밀리에 속하게 된다.
안녕하세요. 강의를 듣고 코드를 작성한 후에 빌드를 해보니, Hp 바가 max값으로 채워지지도 않고 줄어들지도 않아서 Binaries와 Intermediate 폴더를 삭제하고 다시 실행해 보았습니다. 근데 사진과 같이 갑자기 not found 라고 뜨면서 헤더파일과 cpp 파일이 뜨지 않습니다. 어떻게 해결을 해야 할까요..
안녕하세요. 51:50 부분에 "FName 을 반복문 안에 선언하는건 여러번 전역pool 에서 조사하기 때문에 오버헤드가 발생한다. 그래서 const static FName StaticOnlyOnce(TEXT("pelvis")); 를 써서 한번만 조사하도록 하는게 좋다" 이런식으로 이해했는데요, 근데 const static 이 반복문 외부에 선언되어야 하는거죠? 예시처럼 for문 안에 있는게 아니라?