에디터에서 play 버튼을 누를 시 캐릭터 anim montage가 잠깐 실행되다가 중간에 멈추고 그 이후부터 입력은 들어가지만 애니메이션은 재생되지 않습니다. 다만 월드에 스폰된 B_Hero_Gladiator를 에디터에서 클릭하면, 그때부턴 정상적으로 애니메이션이 재생됩니다. 혹시 이러한 현상을 수정하기 위해서는, 어느 부분을 살펴보면 좋을까요? 문제 상황 영상 링크 드립니다. https://drive.google.com/file/d/1aoWAUmri52KgmVs6AH1FgmRFLBeNbH7x/view?usp=drive_link
아직 제가 람다식에 대한 개념이 잡혀있지 않은 상태입니다. 34분 58초 여기 부분에서 필요한 값으로 TFunction<void()>가 되어있어서 람다식이 필요하구나 라는것은 이해하였고, 그 전에 사용했던 방식으로 () 안에는 매개변수를 넣는구나 그런거는 이해하고 있습니다만 []안에 & 레퍼런스 기호를 사용하는 이유를 잘 모르겠습니다. 혹시 이유와 또 다른 기호가 어떤게 들어가는 지 알 수 있을까요?
GetRandomPointInNavigableRadius(Origin, PatrolRadius, NextPatrolPos) 이 코드에서 Origin이 중심점이라는 것은 이해를 했는데 PatrolRadius 과는 무슨 관계인건지 모르겠습니다.. 중심점을 기준으로 PatrolRadius 반경 내에 랜덤한 위치를 NextPatrolPos에 넣는다고 이해를 했는데 제가 이해한 게 맞는 건가요? Origin을 기준으로 반지름 내에서만 랜덤하게 이동을 한다라는 말인지 궁금합니다. 그리고 AI가 플레이어를 쫓아다니다가 놓치면, PatrolRadius를 벗어난 위치에 있을 수도 있는데 이러한 경우에서도 Origin을 기준으로 랜덤한 위치를 찾는 건가요?
안녕하세요. 강의 잘 듣고 있습니다. 6강 캐릭터 공격 판정 강의에서 공격 트레이스를 시각적으로 보기 위해 DrawDebugCapsule을 사용하는 부분에서 HalfHeight가 반구를 제외한 원기둥 절반 높이라고 하셨던것 같은데, 제가 10강에서 무기를 얻었을 때 공격범위가 분명 증가하였는데도 DrawDebugCapsule로 보이는 범위는 차이가 없어 디버깅 및 여러 테스트를 해본 결과 HalfHeight는 반구를 포함한 캡슐의 세로 전체 높이의 절반인것 같습니다. 따라서 AttackRadius보다 작은 HalfHeight가 들어오면 그냥 무시되고 캡슐이 구 형태를 띄게 됩니다. 아래와 같이 고치니까 범위가 제대로 보이는것 같습니다. #if ENABLE_DRAW_DEBUG FVector CapsuleOrigin = Start + (End - Start) * 0.5f; float CapsuleHalfHeight = AttackRange * 0.5f + AttackRadius; FColor DrawColor = HitDetected ? FColor::Green : FColor::Red; DrawDebugCapsule(GetWorld(), CapsuleOrigin, CapsuleHalfHeight, AttackRadius, FRotationMatrix::MakeFromZ(GetActorForwardVector()).ToQuat(), DrawColor, false, 0.5f); #endif
안녕하세요. 조건식 프로퍼티 리플리케이션 실습하는 부분인 강의 28분30초 쯤에서 질문 있습니다. 강의 내용을 보면, GetLifetimeReplicatedProps함수내부에서 DOREPLIFETIME(AABFountain, ServerRotationYaw); DOREPLIFETIME_CONDITION(AABFountain, ServerLightColor, COND_InitialOnly); 위와 같이 설정을 해 주고 있습니다. 그래서 저의 예상으로는 ServerLightColor 값은 최초 초기값만 리플리케이션되어 라이트의 색상은 초기 색상으로 고정되고, ServerRotationYaw 속성은 정상적으로 계속 리플리케이션 되어서 분수대가 계속 회전은 될 것으로 생각했습니다. 하지만 에디터에서 실행하는 부분인 29분45초경을 보니 회전과 색상변화 둘 다 되지 않고 있는데, 회전은 왜 되지 않는 것인가요?
타 프로젝트에서 동일하게 사용하기 위해서 LOG-NETMODEINFO를 #define LOG_NETMODEINFO ( (GetNetMode() == NM_Client) ? *FString::Printf(TEXT("CLIENT %d"), GPlayInEditorID) : ((GetNetMode() == ENetMode::NM_Standalone) ? TEXT("STANDALONE") : TEXT("SERVER"))) 다음과 같이 강의 그대로 사용을 하면 static_assert failed : 'invalid argument(s) passed to printf' 라는 에러가 나옵니다. 하지만 다음과 같이 작성하면 에러가 나타나지 않습니다. 이유를 아직까지 잘 모르겠어서 질문 남깁니다. #define LOG_NETMODEINFO ((GetNetMode() == ENetMode::NM_Client) ? TEXT("Client") : ((GetNetMode() == ENetMode::NM_Standalone) ? TEXT("StandAlone") : TEXT("Server")))
수업내용은 아니 장판 스킬을 만들고싶은데 구상한바로는 액터를 생성하고 capsuleComponent를 붙여서 Overlap이 발생할때 데미지를 주는 방식으로 만들려고하는데요 Collision부분에서 걸리는게 있습니다. 지금 이 장판액터는 몬스터나 플레이어들만 Overlap이 되고 나머지는 무시를 해야하는데요 이러면 장판액터가 바닥에고정되어있지않고 땅으로 꺼지는현상이 발생합니다. PhysicsSimulate를 꺼도 이런현상이 발생합니다 바닥이랑만 Block되게 만드는 방법도 있지만 혹시 다른방법이 있을까요?
Interaction1, 또는 2 코드 이주 후 캐릭터가 움직이지 않는 문제가 있어서 원인을 쭉 분석해보니 CharacterMovementComponent 의 MaxWalkSpeed 가 0으로 세팅되어 있는 것을 발견했습니다. 게임 실행 후 에디터에서 직접 값을 올려서 움직여보면, 클라에서 잠시 움직이려다가 서버에서 검증로직이 돌아가 다시 제자리로 돌아가는 듯한 모습이 보여서 서버 사이드에서 정상적으로 초기화하지 않거나 replication되지 않은 것 같았습니다. 추가로 발견한 특이 사항으로는 UPackageMapClient::SerializeNewActor 함수에서, Actor = World->SpawnActorAbsolute 를 진행할 때 B_HeroCharacter_Base_C 의 생성자 자체에서는 600이란 값으로 잘 초기화되지만 SpawnInfo.Template (FActorSpawnParameters) 에 들어간 애의 MaxWalkSpeed 값은 0으로 되어있는 바람에 최종적으로 0으로 세팅되는 것까지 확인했습니다. 뭔가 저 값이 0으로 오는 원인이 있을 것 같은데, attribute set이 잘못되었는지 관련 값을 세팅해주는 초기 GameplayEffect를 지정해주지 않은 것인지 정확한 원인을 찾는데 난항을 겪고 있어서, 혹시 관련하여 어느 부분을 보는 것이 좋을지 질문 드립니다.
강의 너무 잘 듣고 있습니다. 강의 설명중 참고하셨으면 하는 내용이 있어서 글 올립니다. 1. ' ~ 이러한 내용이니 여러분들이 문제를 잠깐 멈추고 풀어보세요 ' 의 방식보다 아예 게임의 사용 예시를 들며 문제를 내는게 좋을것같습니다. 노드의 기능 역활만 알려주고 알아서 문제를 내라는 말이 좀 아쉬웠습니다. 강의를 빨리 끝내려는 강사의 느낌이랄까요. 2. 7:50 에서 ' 바꿔치기 해서 저장을 해야한다는건 어쨌든 set 을 등장시켜야 한다는 얘기가 되는거고..' 이부분도 설명이 좀더 있으면 좋겠습니다. 어떤걸 의도하시는지는 이해가 되었습니다만 마찬가지로 시간에 쫒기고 귀찮아서 빨리 수업을 끝내려는 강의 같다는 느낌이 듭니다..
7강에서 분수대를 휴면 상태로 만들기 위해 생성자에서 NetDormancy = DORM_Initial를 해주는데 휴면이 되지 않아 tick함수의 클라이언트에서 로그를 찍어봤더니 NetDormancy가 Initial이 아닌 Awake로 찍혀요... BeginPlaye에서도 변경해도 동일한 문제가 나타나는데 어떻게 해야하나요?? 버전은 5.5버전입니다
캐릭터 클래스는 처음부터 캡슐, 메시, 캐릭터 무브먼트 컴포넌트가 있는데요. 무브먼트 컴포넌트가 클라이언트와 동기화시키고 보정하는 기능이 있는 건 알 것 같기도 한데 이게 mesh도 영향을 받나요? 리슨 서버에선 클라이언트 소유 캐릭터의 mesh를 강제로 이동시키기나 add relative rotation 해도 default 값에서 변하지 않고 고정됩니다. 반면에 서버 환경에서 서버 소유 캐릭터나 클라이언트 환경에서 클라 소유 캐릭터의 mesh를 이동/회전 시키면 일단 적용은 됩니다. (다만 동기화는 안됩니다.) 리슨서버에서 클라이언트 소유 캐릭터의 mesh를 transform 수정 가능하게 할 방법은 아예 없나요?
안녕하세요! 좋은 강의 감사합니다. 수업을 듣다가 궁금한 점이, staff 클래스는 ILessonInterface를 상속받지 않기 때문에, staff 인스턴스를 ILessonInterface로 형변환 시 형변환이 실패하여 nullptr이 반환되는 것을 볼 수 있었습니다. 그렇다면 자식 클래스(인스턴스)가 상속받지 않은 클래스로 형변환이 될 시 무조건적으로 형변환이 실패한다고 보면 될까요?
안녕하세요 강사님! 항상 열심히 강의를 보며 공부하고 있습니다. 6강 예제를 따라하던 도중 문제가 생겨 해결해보려했으나 도저히 방도가 안보여 질문드립니다. 비주얼 스튜디오에서 빌드로 실행하면 모두 정상적으로 작동이 되는 것 같습니다. 하지만 에디터에서 실행하거나, 배치파일로 실행하거나, 에픽 런쳐로 실행하거나, 프로젝트파일로 실행시킬 때 모두 분수대가 회전되지않습니다.(분수대뿐만이 아닌 모든 ab네트워크로그 매크로도 나오지 않습니다. 로테이트레이트값도 아예 보이지 않습니다.) 라이브 코딩 후에는 분수대도 잘 회전되고 매크로도 나오나, 클라이언트에서는 분수대가 여전히 회전하지않고, YAW값 매크로도 나오지 않습니다.
c++ 에서 replicated/replicatedUsing 이나 블루프린트에서 replicated/RepNotify 설정하는것은 동기화를 반드시 보장해준다고 알고있는데요. 그래서 연결 이슈가 발생됐을 시, 보존했다가 정상 연결되면 그때 다시 데이터 보내준다고 이해했습니다. 그러면 리슨서버에 클라1이 접속되어 있고 이후 2번째 클라가 접속했을 때 이미 초기화가 끝나고 tick이 진행중이던 2개의 플레이어 캐릭터(서버,클라1)가 클라2 환경에서 simulated클라 역할로 생성되어 각각 beginplay가 진행될텐데요. 이때 리플리케이트가 켜져있는 프로퍼티나 컴포넌트 상태 등등 변경된 사항들이 복제되어 적용된 상태로 생성되는 건가요? 초기값과 다르기때문에 onRep_~~() 함수도 호출되면서?
어떤 액터의 현재 로컬 역할이 authority이든, Simulated 클라이언트든, Autonomous 클라이언트든 똑같이 beginPlay()와 Tick() 같은 건 일단 실행이 되는 건가요?? simulated 클라 역할인 액터는 개념적으론 로직이 수행되선 안되는데 그럼에도 beginplay(), Tick() 같은건 일단 실행이 되기때문에 if문으로 구분을 해야하는거죠?
안녕하세요. GAS Ability 의 Cooldown GameplayEffect (이하 GE) 를 등록하는 부분에 대해 질문이 있습니다. 먼저 실습을 5.4 버전으로 진행하고 있음을 알립니다. 강의 내용에서는 Cooldown GE 적용 시 Cooldown GE BP 를 생성하여 HasDuration 옵션으로 GameplayTag 를 설정 Cooldown을 적용하려는 GA의 Ability Block Tag 에 Cooldown GE에 설정한 GameplayTag를 추가 위와 같이 진행을 해주셨는데, 5.4에서는 2번 과정이 불필요했습니다. 엔진 코드 내부에서는 CheckCooldown 함수 내부에서 Cooldown GE 의 GrantedTag로 직접 쿨다운 체크를 하는걸로 보입니다. 이 부분이 5.4가 되면서 개선된 부분일까요?