오늘도 대부분의 시간을 Overlap Event와의 씨름으로 보냈습니다.

결론을 적자면, 함수 길이 축소나 Event에 부착하는 위치는 전혀 문제가 해결되지 않았습니다.

 

하지만 의외의 부분에서 해결의 실마리를 찾았습니다.

이전에 Log Category Customize를 하면서 새로 정리할 Category들을 선언해두었습니다.

나중에 할 일을 줄이기 위해, 이 이후에 호출하는 Log는 모두 새로 만든 Category들을 쓰고 있습니다.

혹시 이 부분이 문제인가 싶어서 이를 예전에 선언한 Category로 선언을 하였더니, Crash가 났습니다.

빌드상에 문제가 있나 싶어 프로젝트 재생성을 한 뒤 빌드를 하였으나, 여전히 crash가 났습니다.

 

때문에 아예 함수를 새로 작성하고 Event에 함수를 부착하는 작업을 초기화 함수 내부로 옮겼더니 정상 작동하였습니다.

함수 내부 내용은 거의 변하지 않았습니다.

그저 새로 생성 했을 뿐인데....

마가 꼈다고 밖에 설명이 되지 않은 것 같습니다.

 

오늘은 이 문제 해결에 너무 많은 정신력을 쏟아부었습니다.

각 함수 내에 구현해야 할 부분은 다 메모했으니, 토요일에는 그 부분을 우선적으로 구현 할 것입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.11 개발일지  (0) 2020.05.11
20.05.09 개발일지  (0) 2020.05.09
20.05.06 개발일지  (0) 2020.05.06
20.50.04 개발일지  (0) 2020.05.04
20.04.30 개발일지  (0) 2020.04.30

오늘은 ClimbTrigger에 이벤트를 적용하다가 하루가 다 지나갔습니다.

 

결론부터 말하자면, 뭐가 문제인지 모르겠습니다.

 

BP_THCharacter의 View

이것이 제가 지금 쓰는 예시 Character입니다.

THCharacterBase라는 C++ class를 생성하고, BP로 구현한 것으로, Overlap Event는 C++ 상으로 구현되어 있습니다.

3개가 나란히 배치되어 있는 것이 ClimbTrigger들이고, 이들과 겹쳐있는 세로로 긴 것이 InteractionTrigger입니다.

 

InteractionTrigger를 초기화 하는 함수

이 함수는 InteractionTrigger를 초기화 하는 함수로, 생성자에서 호출이 됩니다.

내부에는 사이즈, 기준 component, Collision 등이 설정됩니다.

 

ClimbTrigger를 초기화 하는 함수

이 함수는 ClimbTrigger를 초기화 하는 함수로, 역시 생성자 안에서 호출이 됩니다.

이 함수에는 OnComponentBegin/EndOverlap 이벤트에 함수가 할당되지 않는데,

ClimbTrigger별로 다르게 기능이 작동해야 해서 이 함수 호출 후 생성자 내에서 따로 할당하고 있습니다.

 

보시는 것과 같이 두 함수의 기능적인 큰 차이는 없습니다.

하지만 Interaction은 잘 작동하는 반면, Climb은 작동하지 않습니다.

 

이 문제를 해결하기 위해 다음과 같은 방법을 구현해 보았습니다.

1. BP에서 직접 함수를 할당한다. -> 정상적으로 함수가 실행 됨.

2. BP에서 직접 CPP상에서 할당했던 함수를 재할당한다. -> 재할당된 함수는 작동하지 않음.

3. ClimbTrigger와 InteractionTrigger가 서로 닿지 않도록 위치를 조절 -> 여전히 작동 안함

4. 초기화 함수 내부에서 Event에 함수를 할당함 -> 여전히 작동 안함.

 

처음에는 BP에서 하나하나 선언해줄까 했지만, 구현하는 기능이 특정 Character만 해당되는 것이 아니라
모든 Character들에게 공통적으로 구현되어야 하기에 CPP에서 구현되어야 할 것 같습니다.

 

BP에서 직접 할당하면 작동하는 것으로 보아 Trigger 선언에는 문제가 없는 것 같습니다.

 

내일은 할당을 BeginPlay나 PostInitialize에서 해보거나,
함수들의 이름을 더 짧게 줄여볼 생각입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.09 개발일지  (0) 2020.05.09
20.05.07 개발일지  (0) 2020.05.07
20.50.04 개발일지  (0) 2020.05.04
20.04.30 개발일지  (0) 2020.04.30
20.04.29 개발일지  (0) 2020.04.29

오늘은 우선 저번에 하다 만 Header 정리와 Debug에 필요한 Macro를 형성하려 했습니다.

 

하지만 이 둘을 하나씩 하면서 도저히 원인을 파악 할 수 없는 문제가 계속 발생했습니다.

 

그래서 우선은 다른 작업들을 우선적으로 끝내고, 시간이 남는다면 Milestone 기간 내에.

 

아니면 그 이후에 개선하기로 하고 보류하였습니다.

 

그 다음에는 안 쓰는 코드들을 정리하였습니다.

 

Animation에서 사용하지 않는 변수나, 예시로 구현한 몇몇 의미 없는 Object들을 삭제했습니다.

 

그리고 Climb/Ledge 작업에 필요한 Event와 Parameter를 선언하였습니다.

 

다음 개발 때에는 우선 선언한 Parameter들을 AnimInstance와 연결하는 작업을 우선 해야합니다.

 

그 이후에는 Event 안에서 Parameter 값이 변경되는 조건을 정립하고,
이에 따른 Climb 상태를 조절해줘야 합니다.

 

이 작업이 끝나면 Ledge와 Climb은 자연스럽게 구현이 될 것입니다.

 

이 작업 이후에는 THClimb를 비롯해 Ladder, Rope, Wall을 구현하고 기능 확인을 하려 합니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.07 개발일지  (0) 2020.05.07
20.05.06 개발일지  (0) 2020.05.06
20.04.30 개발일지  (0) 2020.04.30
20.04.29 개발일지  (0) 2020.04.29
20.04.27 개발일지  (0) 2020.04.27

4월 마지막 개발일지입니다.

 

오늘은 Code 개선 작업을 하였습니다.

 

변수명 변경, 구조 개선 등 다양한 것이 있지만,
여기서 말한 Code 개선은 헤더 정리, 로그 매크로 제공, 오철자 수정입니다.

 

사실 이 작업은 매우 쉽게 끝날 것이라 예상 했습니다. 

 

하지만 매우 어렵고, 꼬여버려서 오늘 다 해결하지 못했습니다.

 

첫번째로 오철자 수정입니다.

Class를 다시 만들어야 되는줄 알았는데,
선언된 부분과 파일명을 수정한 뒤 regenerate project를 하는 것으로 쉽게 마무리 되었습니다.

 

두번째로 로그 매크로 제공입니다.

여기에는 두가지 작업이 포함되어 있었습니다.

하나는 로그 카테고리 정리.
다른 하나는 로그를 찍을 시 클래스 명, 함수 명, 로그가 찍힌 코드 줄 정보가 자동으로 포함되는 것입니다.

로그 카테고리 정리는 선언했던 것을 rename으로 수정해보았으나, 제대로 해결 되지 못하고 에러를 발생했습니다.

로그 찍을 시 자동으로 정보를 포함하게 하는 것도 기존 매크로를 매크로나 함수로 wrapping 해야 하는데,
갯수가 정해져 있지 않는 argument들을 받아 처리하는 작업 부분이 기존 C++과 조금 다른 것 같아
함부로 손을 대지 못했습니다.

 

세번째는 헤더 정리입니다.

이 역시 TreasureHunter라는 헤더에 몇가지 공통적으로 선언된 헤더를 선언 해보았으나, 
에러가 발생하여 원상복구 해놓은 상태입니다.

 

안타깝게도 토요일에는 약속이 있어 다음 개발은 월요일이 될 것 같습니다.

월요일에는 이 두가지 중 헤더 정리를 우선적으로 처리하고자 합니다.

우선 에러가 터졌던 Controller, Widget, GameMode 등의 코드들에서 .h에 헤더 선언이 되어 있는지 확인하고,
이를 .cpp로 옮긴 뒤 오류가 없을 경우 헤더 통합을 해보려 합니다.

 

로그 매크로는 조금 더 이것저것 알아봐야 해결이 될것으로 예상합니다.

Wrapping할 함수/매크로가 받을 것은 printf와 유사한 형태의 포맷입니다.

출력할 텍스트와 파라미터를 받으면 그 앞에 클래스(혹은 파일), 함수 이름과 출력된 줄 번호를 출력하는 텍스트.

그리고 기존 파라미터 앞에 해당 파라미터들을 넣어주면 됩니다.

이 부분을 조사하고, 가능하면 해결해보려 합니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.06 개발일지  (0) 2020.05.06
20.50.04 개발일지  (0) 2020.05.04
20.04.29 개발일지  (0) 2020.04.29
20.04.27 개발일지  (0) 2020.04.27
20.04.23 개발일지  (0) 2020.04.23

오늘은 AttachPuzzle에서 비정상적으로 작동하는 TwoBlockTrap 문제를 해결하고,
Trap에서 아직 구현하지 않았던 기능들을 구현 한 뒤, 코드를 정리하였습니다.

 

우습게도, AttachPuzzle이 비정상적으로 작동하는 이유는
생성자 노드에서 노드 연결이 중간에 끊겨 있었기 때문이었습니다.

이를 연결하자 거짓말처럼 정상 작동하였습니다.

 

이를 해결하고 Push한 뒤, Trap의 Wall들을 다시 내리는 기능을 THWallBase에 맞게 구현하였습니다.

비록 아직 동작을 확인하지는 못했으나, Trap을 개선하면서 동시에 테스트를 해볼 수 있기에 일단 마무리 했습니다.

 

구현 방법은 게임 시작 시 Wall의 World Location을 저장하고,
벽이 멈출 때마다 이 World Location과 거리가 일정 이상 멀어지면
Control Point를 음수로 reverse 하여 원래 거쳐왔던 경로를 되돌아가도록 하였습니다.

 

마지막으로 안쓰는 코드를 지우고, 최종적으로 Push를 함으로서
MovementComponent 적용 부분을 최종적으로 마무리하였습니다.

 

당장 내일부터 다시 개발을 시작하는데, 우선 Code Arrange부터 하려 합니다.

이후 Ledge부터 시작하여 Climb 기능을 구현해나갈 계획입니다.

 

이 부분이 마무리가 되면 구현 방식을 수정하거나 새로 구현해야 하는 Trap들을 구현하고,
Trap의 동작을 Multiplay에 맞게 변경 할 계획입니다.

 

뒤이어 Character의 피격 애니매이션 적용이나 얼굴 부분 회전 등의 기능을 구현 할 예정입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.50.04 개발일지  (0) 2020.05.04
20.04.30 개발일지  (0) 2020.04.30
20.04.27 개발일지  (0) 2020.04.27
20.04.23 개발일지  (0) 2020.04.23
20.04.22 개발일지  (0) 2020.04.22

오늘은 Puzzle에서 사용되고 있던 TwoBlockTrap의 벽을 Static Mesh에서 THWall로 교체하고, 
이에 의해 Puzzle에서 변경되는 부분을 변경해주는 작업을 진행하였습니다.

 

그리고 이에 앞서, AllBlockTrap에서 Wall이 제대로 작동하지 않는 문제를 해결하였습니다.

 

원인은 Control Point 초기화 위치가 잘못 되었기 때문입니다.

 

기존에는 Begin Play에서 초기화를 하였는데, 이를 Constructor에서 초기화를 해주자 원하는대로 작동하였습니다.

 

또한 BlockTrap에 적용되었던 Initialize 함수를 C++상에서 InitializeTrap 함수로 대체,

이를 Implement하여 사용하도록 변경하였습니다.

 

게임이 시작하자마자 벽의 움직임을 일시정지하는 로직도
BlueprintImplementableEvent로 선언된 StopAllInterpWall 함수로 정리하였습니다.

 

현재 대부분의 문제는 해결 되었습니다.

 

Trap은 물론이고 DestroyPuzzle에서도 잘 작동합니다.

 

하지만 AttachPuzzle에서 Trap이 정상작동하지 않고 있습니다.

 

다음에는 이 버그를 고치는 것이 첫번째 작업이 될 것입니다.

 

두번째는 Trap Class 생성입니다.

 

예를 들어, Initialize 함수의 경우에는 Puzzle에 언제든지 붙을 수 있는 Trap 계열에는 모두 선언되어야 하는 함수입니다.

 

또한 현재의 Trap은 THObjectBase를 상속받아서 선언했기에 선언에 있어서 흩어져 있는 감이 없지 않습니다.

 

이를 위해 Trap Class를 생성하고자 합니다.

 

이는 아마 기존의 코드 전반적인 Refactoring과 병행 될 것 같습니다.

 

4월 안에는 Trap 관련 자잘한 수정 작업은 끝낼 수 있도록 하려 합니다.

 

그럼 5월에는 큼직한 구현 이슈들을 해결하고, 월말에는 영상을 촬영할 계획입니다.

 

그리고 포트폴리오에 적용하여 상시 채용중인 회사에 지원해볼 계획입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.04.30 개발일지  (0) 2020.04.30
20.04.29 개발일지  (0) 2020.04.29
20.04.23 개발일지  (0) 2020.04.23
20.04.22 개발일지  (0) 2020.04.22
20.04.20 개발일지  (0) 2020.04.20

오늘은 BlockTrap에 THWallBase를 적용해 보았습니다.

 

현재 구현해 놓은 BlockTrap은 AllBlockTrap과 TwoBlockTrap. 두가지입니다.

 

이 중 TwoBlockTrap은 Puzzle에도 사용 되어있어 비교적 수정하기 용이한 AllBlockTrap을 먼저 수정하였습니다.

 

이전 기능과 햇갈리긴 했지만 예시로 만들어놓았던 것을 보면서 큰 문제 없이 작성하였습니다.

 

하지만 정작 동작은 예시 함정도, 이 함정도 제대로 되지 않았습니다.

 

몇가지 문제를 간추려보자면

 

1. Wall이 바닥을 뚫고 올라오지 못합니다.

Wall에 직접 Control Point를 작성해주면 부드럽게 올라오는데, 그렇지 않으면 바닥과 부딛쳐 바로 멈추어버립니다.

 

2. 모든 벽이 올라와야 하는데 일부 벽만 올라오는 경우가 있습니다.

 

3. 상대 좌표로 Control Point를 주었는데 절대좌표로 작동합니다.

 

아직 관련 사항 검색도 해보지 못했지만 느낌상

원인을 파악하고 이를 수정하려면 꽤 많은 시간과 수고를 들여야 할 것 같습니다.

 

토요일에는 이 문제를 먼저 해결하고, 해결이 되는 즉시 Puzzle에 적용되는 Trap도 수정하고자 합니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.04.29 개발일지  (0) 2020.04.29
20.04.27 개발일지  (0) 2020.04.27
20.04.22 개발일지  (0) 2020.04.22
20.04.20 개발일지  (0) 2020.04.20
20.04.18 개발일지  (0) 2020.04.18

오늘은 Trap. 정확히는 BlockTrap에서 Tick에 If문으로 구현되어 있던 Wall의 움직임을

MovementComponent로 처리하는 부분을 개발하였습니다.

 

이를 위해 먼저 Actor를 하나 생성해서 부착이 가능한 MovementComponent들을 살펴봤습니다.

 

그 중 InterpToMovementComponent가 있었습니다.

 

나머지는 다 예시로 봤던 것인데, InterpToMovementComponent는 처음 본 것이라 검색을 조금 해보았습니다.

 

예시 영상을 보니 플랫폼 게임에서 일정 궤도만 왔다갔다하는 움직임을 구현하는데 쓰이는 것이었습니다.

 

제가 원하는 벽의 움직임은 위로 올라갔다가, 아래로 내려오는 것이었습니다.

 

때문에 이 움직임을 runtime 상에서 원하는대로 끊었다가 다시 시작하거나,

더 나아가 runtime 상에서 움직임을 멈추거나 바꿀 수 있는지 알아보았습니다.

 

Document를 읽고 검색을 해본 결과, 가능하다는 결론을 내릴 수 있었습니다.

 

이후 THWallBase를 생성하고, InterpToMovementComponent를 부착하며 기본 함수들을 구현하였습니다.

 

내일은 이를 Trap에 직접 적용을 해보고, 원하는대로 적용이 되면 이전 구현체를 삭제하려 합니다.

 

혹, 시간이 조금 남는다면 다른 일로 넘어가기 전에 클래스 이름 오타나, 헤더 정리를 해보려 합니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.04.27 개발일지  (0) 2020.04.27
20.04.23 개발일지  (0) 2020.04.23
20.04.20 개발일지  (0) 2020.04.20
20.04.18 개발일지  (0) 2020.04.18
20.04.16 개발일지  (0) 2020.04.16

오늘은 Custom CharacterMovementComponent를 Character에 적용하고, Character의 Movement와 Rotation을 이 CharacterMovementComponent를 통해 이루어지도록 변경하였습니다.

 

첫번째 이슈였던 FObjectInitializer 문제입니다.

 

여전히 검색과 질문으로 해결을 할 수 없었습니다. 

 

한 1시간 정도를 다시 삽질을 하다가 Log에 Intermediate 폴더 안 파일에서 에러가 발생 했다는 메세지를 발견합니다.

 

제가 아는 한 Intermediate 폴더를 건드려야 하는 경우는 한가지.

 

빌드가 꼬이는 등의 이유로 Project Regenerate를 할 때 Saved, Binaries 폴더와 함께 이 폴더를 지워야 한다는 것입니다.

 

그렇게 혹시나 하는 마음에 Project Regenerate를 하였고, 이것은 정답이었습니다.

 

아마도 기존에 Build 했던 Default Constructor 부분이 새 Constructor 빌드를 엉키게 한 것 같습니다.

 

이리하여 길고 길었던 삽질을 허무하게 마무리 하고, 드디어 MovementComponent를 적용하였습니다.

 

혹시나 하는 마음에 Server Character의 Mesh가 화면 전환과 같이 회전되는 현상은 자동으로 수정 되었는지 확인하였는데, 이는 여전하였습니다.

 

수요일에는 Trap에 MovementComponent를 적용해보고자 합니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.04.23 개발일지  (0) 2020.04.23
20.04.22 개발일지  (0) 2020.04.22
20.04.18 개발일지  (0) 2020.04.18
20.04.16 개발일지  (0) 2020.04.16
20.04.15 개발일지  (0) 2020.04.15

오늘은 MovementComponent를 적용하다가 이슈를 해결하지 못해 일찍 마무리 했습니다.

 

Character에 지정 된 MovementComponent를 바꾸려면 FObjectInitializer를 Constructor에서 Parameter로 받고, Parent Constructor도 명시적으로 FObjectInitializer를 받는 것으로 선언해줘야 한다.

 

하지만 MoveComponent의 Constructor 부분에서 에러가 발생하였다.

 

왠만하면 직접 고치려 하였으나, 에러 메시지 후반부 절반이 깨져있었다.

 

아마 윈도우 언어가 한국어라 경로 쪽에서 깨진 것이 아닐까 싶은데, 가지고 있는 정보로만 원인을 찾으려 했지만 원인을 발견할 수 없었다.

 

그래서 Unreal AnswerHub에 질문을 올려놓았다.

 

주말동안 답이 없으면 다시 삽질을 해야 하는데 가능하면 답이 나왔으면 좋겠다.

 

마지막으로 이 글을 발견한 숙련된 프로그래머들이 혹시나 답을 올려 줄 수 있다는 기대를 가지며 질문 링크를 첨부한다.

 

https://answers.unrealengine.com/questions/955145/occur-fatal-error-1853-after-use-fobjectinitialize.html

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.04.22 개발일지  (0) 2020.04.22
20.04.20 개발일지  (0) 2020.04.20
20.04.16 개발일지  (0) 2020.04.16
20.04.15 개발일지  (0) 2020.04.15
20.04.13 개발일지  (0) 2020.04.13

+ Recent posts