안녕하세요, 교수님. 15강 24:30 까지 따라하다가 문제가 발생했습니다 ㅠㅠ Visual Studio Project 파일 생성 후에 헤더 선언을 해보니 아래 사진과 같이 언리얼 엔진에서 제공하는 모듈들에 대한 헤더를 불러오지 못하더라구요 ㅠ Visual Studio의 환경변수나 경로 포함 문제인줄 알았으나, 수업자료를 그대로 다운받아서 시도해보니 해당 프로젝트는 아래와 같이 잘 불러와집니다. 타겟파일과 모듈설정파일 모두 강의자료를 복사해서 사용해도 마찬가지인데 혹시 어떤 부분이 문제인걸까요? ㅠㅠ
실습에선 BaseStat 과 ModifierStat은 각 입력 권한이 있는 클라이언트( 원격 Autonomous)에만 전달 되도록 Condition지정하는 의도로 COND_OwnerOnly를 하였는데요. condition을 COND_AutonomousProxy으로 하는건 또 달라 지는 건가요?? 설명으로는 이렇게 나와 있는데, 이 "소유권을 가지고 있다" 라는 정의가 또 좀 헷갈리기 시작한 것 같습니다..... 서버에서 로컬 룰 Authority / 원격 AutonomousProxy 인 액터가 COND_OwnerOnly에 해당한다면 COND_AutonomousOnly에 해당하는 액터는 어떤 경우인가요??
한번 다시 훑어보는 중에 액터의 상태가 "플레이어 컨트롤러가 뷰어인 경우"의 의미가 조금 헷갈리는 것 같습니다. 액터의 최종 Owner가 플레이어 컨트롤러인 경우 라는 뜻인가요? 아니면 말그대로 플레이어 컨트롤러 = Viewer 라는 뜻인가요? 플레이어 컨트롤러가 뷰어가 아닌 경우도 있는 건가요??
BTTask_TurnToTarget.cpp 에서 ControllingPawn->SetActorRotation(FMath::RInterpTo(ControllingPawn->GetActorRotation(), TargetRot, GetWorld()->GetDeltaSeconds(), TurnSpeed)); 를 통해 부드러운 회전을 시키고 있는 것을 확인했는데요. 해당 함수는 Tick을 돌려야 제대로 동작한다고 생각합니다. Execute_Task가 그 아래에서 return EBTNodeResult::Succeeded; 해버리면 그 Task는 그냥 종료되어 함수 한번 호출할 만큼인 딱 한번 회전을 찔끔 하고 말아야 하는 것 아닌가요? Parallel 노드를 사용하여서 Attack이 끝나기 전까지 Turn task가 반복되어 실행이 되는 것인가요?
안녕하세요. VR콘텐츠 제작 중에 궁금한 부분이 생겨 질문 드립니다! 스켈레탈 메쉬를 cloth paint를 이용하여 이불을 만들었습니다. VR환경에서 그랩 컴포넌트로 사용하고 싶어서 캐릭터 블루프린트에 그랩컴포넌트를 넣고 만들었는데 이불을 잡자마자 크래쉬 리포터가 뜨면서 언리얼이 꺼집니다. 오류가 나는 이유가 정말 궁금합니다...! - 블렌더에서 컷을 한뒤 FBX로 뽑아 언리얼에서 cloth paint로 작업하였습니다. - 캐릭터 블루프린트에 그랩 컴포넌트를 추가하였습니다. - 시뮬레이션으로 이동하거나 VR프리뷰로 이동하면 이렇게 크래쉬 리포터가 뜹니다. 감사합니다.
서버 트래블이 시작 되면, 분수대 액터에서 타이머를 통해서 실행되는 서버에서의 OnRep_ServerLightColor() 함수에서 에러가 발생하는 것 같습니다.. 레벨 이동 중에 타이머 콜백 함수가 실행되서 그러는 것 같은데 Travel 하기전에 모든 액터의 타이머를 Clear하는 함수도 써봤는데 안되는 것 같습니다. GetWorld()->GetTimerManager().ClearAllTimersForObject(...); 뭔가 인스턴스가 지워지는 중에 타이머의 콜백함수를 방지하는 방법이 있나요?
안녕하세요 해당 강의 내용이 무척 도움이 되어 3D 게임 만드는데도 적용 시켜보고 있습니다. 공격 중에 몬스터가 플레이어를 쫓아오진 않지만 플레이어가 방향을 틀었을 경우 똑같이 회전하지 못하고 한쪽 방향에서 계속 slash하는 행위를 볼 수 있었는데요, 이 점이 부자연스러워 고처보려고 합니다. 구현에 어려움을 겪어 조언이나 방법이 있으시다면 알려주시면 감사하겠습니다.
액터 우선순위 정렬과정에서 Sort의 매개변수로 FCompoareFActorPriority 를 생성해서 넘겨주고 있고, 이 구조체가 operator()를 구현해서 소팅을 진행하는 것 같은데요. 기능적으로 그냥 전역함수를 선언하거나, 아니면 static 함수를 선언하고 함수 포인터를 넘겨주는 것과 차이가 없는 것 같은데 혹시 언리얼 엔진에서 굳이 이렇게 하는 이유가 있을까요? 사소한 거긴 한데, 이런 패턴이 꽤나 자주 보여서 여쭤봅니다..!
소수점 자리가 없어지는 것도 Serialize가 처리 해주는 건가요?? 디버그로는 speed 1.5가 소수점 사라지는 것 처럼 보여요. 그리고 마지막에 NetSerialize에서 변경 사항 결정을 직접 적용할 때 예를 종합하면, 추가 bool 을 비트로 이용하여 보낼 변수를 serialize하거나 안하거나 하지만, 결국 보내기로 하여 bool을 true로 적용하는 건 변화가 있었는지 직접 확인하고 로직을 통해 결정해야 하는 건가요?
제 컴퓨터에서는 OnMovementUpdated()가 서버랑 클라이언트에 둘 다 작동이 되어서, UpdateFromCompressedFlags() 함수에 따로 텔레포트 함수 안 해도 서버에서 정상 동작되는데요. OnMovementUpdated()가 클라이언트에서만 호출되야 하는게 맞는거죠?? 무엇이 잘못되었을까요....