캐릭터 회전 기능을 다음과 같이 구현해보았습니다.

  1. Character에서 좌우로 회전할 때 90도를 초과하면 TurnInPlaceState를 지정함.
  2. AnimInstance에서 TurnInPlaceState값이 지정되면 해당 몽타주를 실행
  3. Montage에 걸린 AnimNotify의 Begin에서 Character에 회전중이라는 트리거를 켜줌
  4. 트리거가 켜지면 좌우 회전에서 값을 적용하지 않고 무시함
  5. AnimNotify::Tick에서 회전값을 계산하여 캐릭터를 회전시킴
  6. AnimNotify::End에서 트리거를 꺼줌.

대략 이런 식으로 구현했고, 완벽히 동작하지 않고 버그가 있어 커밋은 보류하고 있습니다.

작업에 필요한 함수 중간중간에 로그를 찍어두어서 이를 참고해서 디버깅을 해 기능을 완성해보고자 합니다.

 

관련 작업에 필요한 새로운 Interface도 선언했습니다.

처음에는 기존의 CPPCharacterLocomotion에 모든 것을 넣을까 하다가, 특정 기능에는 특정 타입을 따로 사용하는 편이 좋다고 판단하여 Interface를 여러개가 상속되더라도 따로 분리를 하고자 합니다.

 

사설 Git 서버도 구축했고 Perforce를 찾아보니 gitignore처럼 P4Ignore 파일로 경로 무시가 가능한걸 보니 같이 쓰는건 문제가 없을 것 같습니다.

남은건 Perforce 레포지토리가 어떤 바이너리 파일을 생성하는지 여부를 확인하고 그런게 있다면 Perforce 안에 git을, 없다면 git 안에 Perforce를 사용하는 쪽으로 구상을 해보면 될 것 같습니다.

 

여기에 더불어 작업 좀 더 해보고 정 안되면 Visual Assistant을 사용해볼까 고민중입니다.

없으니까 많이 불편하더군요...

'개발일지 > 코어 플레이 개발' 카테고리의 다른 글

22년 9월 26일 개발일지  (0) 2022.09.26
22년 09월 20일 개발일지  (0) 2022.09.20
22년 09월 16일 개발일지  (0) 2022.09.16
22년 09월 13일 개발일지  (0) 2022.09.13
22년 09월 09일 개발일지  (0) 2022.09.09

개발하던 언리얼 프로젝트를 Github 사용 시 1년에 8만원씩 써야 해서 git만 사용하다가 너무 불편하여 대안을 찾던 중 "차라리 AWS에 사설 Github 서버 올리면 그게 더 싸지 않을까?" 싶어서 찾아보다가 CodeCommit이라고 아얘 서비스가 나와서 환경을 설정해보았습니다.

일단 졸업하고 AWS를 처음 쓰는거라 환경 설정 하는데 시간이 꽤 걸린 것 같습니다.

윈도우 환경인 점이 한 몫 하기도 했구요.

그리고 AWS 사설 주소로 Push를 보내는게 지금 사용하는 GUI(Git Kraken)에서는 지원되지 않더라구요.

그래서 강제로 CUI 환경으로 복귀하게 되었습니다.

 

그래도 아직 자주 쓰지는 않았지만 장점도 몇 있었습니다.

일단 가격이 매우 쌌습니다. 여러 애셋을 같이 올려보았는데 한 8GB 올렸음에도 가격 정책에서 별로 잡히지가 않습니다.

그리고 개인 프로젝트라 커밋 수가 적은 것을 감안하면 가격 부담은 한달에 5달러는 커녕 1달러도 안넘을 것 같습니다.

 

한가지 아쉬운 점은 개인적으로 게임 프로젝트에서 리소스와 코드가 혼재되어 있어서 VCS 선정할 때 Git이 후순위로 밀리는 것에 대해 대안을 찾고자 Git과 Perforce를 혼용하는 방안을 고민 했는데 안타깝게도 이 방안을 구현하기는 힘들 것 같습니다.

다만 프로젝트가 어느정도 마무리가 되면 Perforce에 더 공부해서 카피 프로젝트를 EC2에 옮겨보고, 성공한다면 Github까지 복사를 한 뒤 다시 Github로 복귀해보고자 합니다.

 

여튼 개인 게임 프로젝트를 하면서 VCS에 고민이 있으신 분들은 하루 정도 투자하셔서 CodeCommit을 사용해보는 것을 추천드려 봅니다.

시야 돌릴 때 자동 회전 되는 기능 구현에 앞서 AdvancedLocomotionSystemV 프로젝트에서의 구현 방식을 살펴봤습니다.

제가 분석한 바로는 대략 다음과 같습니다.

  • AnimInstance의 Tick에서 매번 제자리 회전 Montage를 재생하고자 합니다.
    Character에서 특정 각도에 도달하여 회전 상태가 바뀌기 전까지 제자리 회전 Montage를 재생할 수 없습니다.
  • Character에서 상태가 바뀌어 Montage를 재생하게 되면 0.0초에서 AnimNotify가 발생됩니다.
  • AnimNotify::Begin에서 AnimInstance에 회전 Montage이 실행되고 있다는 조건을 전달합니다.
    이 조건은 Character에서 주는 상태와 다른 분기문에서 Montage 반복 재생을 막습니다.
  • AnimNotify::Tick에서는 DeltaTime과 MontagePlaytime을 이용해 캐릭터의 각도를 조절해줍니다.
  • AnimNotify::End에서 AnimInstance에 회전 Montage를 제거해주면서 다시 조건이 만족됩니다.

사실 이 이상으로 파악을 하지는 못했습니다.

Montage가 실행되는 부분이 Montage 앞에서 AnimNotify가 호출되는 부분이 서로 엉켜 있는 것 같은데 어떻게 구동되는지 중단점도 안 찍히더군요.

결국 제가 내린 결론은 이 예시를 보면서 확인한 대략적인 구현 방식을 기준으로 직접 헤딩을 해야 한다는 점이었습니다.

  1. 특정 상태가 되면 Montage를 직접 재생한다.
  2. Montage 전체를 하나의 AnimNotify로 감싼다.
  3. AnimNotify::Begin에서 Montage 호출을 막아주고 AnimNotify::End에서 이를 풀어준다
  4. AnimNotify::Tick에서 캐릭터를 회전시킨다.
  5. Tick 사용을 겁내지 말자.

위 사항을 중심으로 하나씩 만들어보고자 합니다.

 

그리고 이거랑 별개로 VA를 구독하거나 AWS에 사설 Git 서버를 넣어서 VCS를 넣는 방안을 크게 고민 중입니다.

커밋 단위에서만 관리하는게 생각보다 불편하더라구요...

 

'개발일지 > 코어 플레이 개발' 카테고리의 다른 글

22년 09월 20일 개발일지  (0) 2022.09.20
22년 09월 17일 개발일지  (0) 2022.09.18
22년 09월 13일 개발일지  (0) 2022.09.13
22년 09월 09일 개발일지  (0) 2022.09.09
22년 09월 02일 개발일지  (0) 2022.09.02

+ Recent posts