입력에 대한 처리를 SetupPlayerInputComponent()를 통해 직접 정의한 함수와 바인딩할 수 있는데, 입력 키는 어떻게 설정할 수 있나요? 인풋 액션 클래스를 따로 정의하면 가능한 일인가요? 현재 블루프린트의 인풋 클래스를 사용해서라고 예상중입니다. 또한, CharacterBase에 있는 이 코드는 이 클래스를 상속받는 Pawn의 고유 값으로 설정되는건가요? 하위 클래스들에게 독립적으로 적용시키도록 할 수도 있는건가요?
안녕하세요. 강의 37분정도까지 따라서 소스 작성하고 실행을 해봤는데요. 캐릭터의 움직임이 A,D가 앞뒤이고, W,S가 좌우로 움직이더라구요 혹시 Move함수에서 뭘 바꿔야하나 생각해서 AddMovementInput(ForwardDirection,MovementVector.X); AddMovementInput(RightDirection,MovementVector.Y); 부분을 AddMovementInput(ForwardDirection, MovementVector.Y); AddMovementInput(RightDirection, MovementVector.X); 로 바꾸니 제대로 동작하더라구요. 혹시 이유가 뭔지 알수있을까요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
pop 함수를 보면 if (right < (int)_heap.size() && predicate( heap[next], _heap[right])) 인 left와의 비교에서 나온 결과 값을 비교하는 부분에만 predicate를 적용하였는데 위에 left와 비교하는 부분은 둘 중 더 큰 값을 next에 넣는게 목적인 코드입니다. 더 작은값을 찾을때 문제가 생길 수 있을것이라 생각이 되는데 문제가 생기지 않아 의문점이 생겨 질문 드립니다. left쪽엔 predicate 비교를 하지 않아도 되는 이유가 무엇일까요?
안녕하세요 Enhanced Input Mapping Context 에서 Input Action 을 바인딩하는 부분에서 W,S 키를 눌러 전진, 후진을 처리하는 IA 에서는 Vector2D Y 위치에 값을 대입하고 A,D 좌우에는 X 값에 값을 대입하는데요 (Swizzle Input Axis Value 를 이용해서) 언리언 엔진에서 character 를 살펴보면 좌표계는 왼손 좌표계이고 캐릭터가 앞을 바라보는 부분이 X 축에 위치하고 우측이동이 Y 축인데 왜 Y 위치에 전진 관련 값을 처리하도록 넣는 건가요? void AABCharacterPlayer::Move(const FInputActionValue& Value) 함수에서도 전진은 X 축으로 const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); AddMovementInput(ForwardDirection, MovementVector.X); 좌우는 Y 축으로 처리하는데 const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); AddMovementInput(RightDirection, MovementVector.Y); 처리 과정이 궁금합니다.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
영상 초반 내용을 보면 using FuncPtr = void();는 잘 사용하지 않는 문법이라고 하고, 뒤이어 나오는 using FuncPtr = void(*)();와 같은 형식을 자주 사용한다고 했는데 동일하게 동작한다면 오히려 앞쪽이 더 편한 것 아닌가요? (*)를 추가하는 이유가 단순히 포인터임을 표시해주기 위함 인가요?
수업 자료 중에 Half Height가 캡슐의 반구 부분을 제외한 몸통 부분의 절반 높이라고 표현되어있고, 수업 코드상 수치도 그렇게 계산 된 것으로 보입니다. 하지만 아무리 테스트해 봐도 판정 범위와 다른것 같아 테스트 결과와 함께 질문드립니다. 위 사진은 수업 코드와 그 실행 결과입니다. NonPlayer의 캡슐와 닿지 않아도 충돌 처리 된 모습입니다. 아래 사진은 Half Height에 캡슐의 반구 크기를 포함 시킨 수치를 적용한 코드와 그 실행 결과입니다. 그려진 캡슐과 정확히 겹칠 때 충돌 처리된 모습입니다. 그래서 아래의 자료에서 초록색으로 표기한 길이가 Half Height인지, 혹은 수업 자료의 Half Height는 맞지만 DrawDebugCapsule함수의 인자만 초록색 표기된 부분으로 사용하는 것인지 질문드립니다!!
질문&답변 게시판에 이러한 글을 작성해서 죄송합니다. 저는 5.5버전으로 공부중인데 강의 중 39분 쯤에 Granted Tags에 태그 추가하는 부분이 있었는데 5.3버전 이후부터는 없어가지고 저가 찾은 방법을 나중에 저 처럼 공부하시는 분들이 해당 부분에 막힐까봐 여기서나마 적고싶었습니다. 문제가 된다면 해당 글을 삭제하겠습니다. 5.3 이후 버전에서는 Tags가 Components에 통합되면서 Component를 이용해서 추가해야합니다. 5.3버전일 경우 Components - " Target Tags Gameplay Effect Component"를 추가해서 tag를 넣으시면 되고 5.4,5.5버전일 경우 Components - "Grant Tags to Target Actor"를 추가해서 tag를 넣으시면 됩니다.
SphereTraceForObjects-OutHitReturnValue랑 BreakeHitResult랑 노드 연결이 안됩니다.... 정확히 일치되는 구조체만 호환 간주됩니다 파생구조체는 허용되지 않습니다 라는 알람이 뜨네요 Get Component By Class - Return Value 노드랑 로컬변수 LocalGrabComponent도 연결이 안됩니다.... LocalGrabComponenet랑 ReturnNode-NewParam도 저는 연결이 안됩니다..(영상 22:00 참조)
안녕하세요. 저번 강의에서 Git에서 다운받은 ArenaBattle폴더를 새로 만든 프로젝트의 Content폴더로 옮겨 주었을 때, 에디터에서 인식은 했으나 폴더에는 존재하는 Step1이 에디터에서는 나타나지 않는 현상이 있었습니다. 이번 강의에서도 진행도중 BluePrint에서 일부 엑터만 에디터에 표시됩니다. 무슨 문제가 있는것인가요?? 현재 언리얼 버전은 5.1 사용중입니다!
50:24쯤에 Ability Task의 Activate 함수 작성 구간에서 void UABAT_Trace::Activate() { Super::Activate(); SpawnAndInitializeTargetActor(); FinalizeTargetActor(); SetWaitingOnAvatar(); } 로 하셨는데 void UABAT_Trace::Activate() { Super::Activate(); SetWaitingOnAvatar(); SpawnAndInitializeTargetActor(); FinalizeTargetActor(); } 이렇게 SetWaitingOnAvatar함수를 먼저 Task수행전에 호출해도 괜찮은지 궁금합니다. SetWaitingOnAvatar 함수를 호출이유가 해당 작업이 아직 안끝났다는걸 ASC에게 알려주기 위해 Waiting상태로 만든다고 들어서 이게 가능하다 생각되고 실제로도 돌려보니 별 다른점이 없어서 물어봅니다.
ASC_Actor : ASC 부착된 액터. GA : ASC_Actor 가 아닌 이곳에서 기능을 구현. Tag : ASC_Actor 와 GA의 연결다리 (의존성 약화) [ Tag 사용법 ] <1> 공용 Tag 헤더파일 선언. (ASC_Actor , GA 모두 보유) ㄴ 두 태그를 정의함 ( 1.기본태그 2.활성화 유무확인 태그) <2> " FGameplayTagContainer 생성자(기본태그) " 로 태그객체를 만듬. <3> TryActivateAbilitiyByTag(태그객체) 다음과 같이 호출해 2번 태그가 부착되는 동시에 기능이 돌아감.
// 예시 1 : 지역변수를 함수 내에서 선언하고 사용 void ASample::Tick(float DeltaTime) { Super::Tick(DeltaTime); FVector Direction = GetActorLocation(); } ------------------------------------- // 예시 2 : 헤더파일에서 FVector Direction 선언 void ASample::Tick(float DeltaTime) { Direction = GetActorLocation(); } ``` 프로그래밍에 익숙하지 않아 궁금한 내용을 질문드립니다. 반복해서 호출되는 경우, 이렇게 지역변수 안에 선언하는 것과, 헤더파일에서 선언하고 함수 내에서는 값만 대입하는것. 두 방법간에 비용(성능) 차이가 나나요? 두 방식이 섞여서 사용되는것 같아서 질문드립니다 (해당 변수의 사용은 지역변수 안에서만 사용한다고 가정)
안녕하세요 2-3강 '게임플레이 프레임워크' 에 7분15초 부분에서 Body를 DefaultSceneRoot 로 끌어다 놓는 부분이 있는데요, 이렇게 해보니 Body에서 보이던 기즈모가 안보이게 되고 우측 상단에서 마우스로 직접 기즈모를 클릭해도 적용이 안되더라구요. 혹시 이유가 무엇인지 알 수 있을까요? 메쉬 그 자체는 Root컴포넌트가 되면 기즈모로 조절이 불가능해지니 앞으로는 피해야 하나요? * 강의 후반부에 다시 DefaultSceneRoot 생성하는거 뒤늦게 확인했습니다!
여러 계산식(방향 , 상태 체크 )이 들어간 hitreaction을 구현하려고 합니다. Gameplayability 과 Gameplaycue 중 어느 구현방식이 최적화와 서버 비용 절감에 도움이 될까요? GameplayAbility로 계산식을 구현하고 ability안에서 cue를 사용해 애니메이션을 실행시키는게 좋을까요? 궁금합니다.