언리얼엔진/FPS 프로젝트
-
[UE5 | FPS] 서버와 클라이언트의 동기화를 위한 시행착오언리얼엔진/FPS 프로젝트 2024. 8. 13. 18:50
이전 글의 마지막에 무기 드롭과 교체에 관한 내용을 다루겠다고 했다.관련 내용 중 서버와 클라이언트의 무기 슬롯 동기화에서 발생한 문제는 무엇인지, 이 문제를 어떻게 해결했는지, 이 방식의 아쉬운점은 무엇이고 어떻게 하면 개선할 수 있을지를 한번 정리할 필요가 있어서 글로 작성하게 됐다. 상황 정리이 프로젝트에서 무기는 액터라서 월드에 독립적으로 존재할 수 있고, 플레이어 캐릭터가 줍거나 떨어뜨릴 수 있다.캐릭터가 무기를 주웠다면 무기는 캐릭터에 부착된다.캐릭터가 무기를 들고있는경우 캐릭터 메시의 손에 있는 소켓에 부착되고, 넣은 상태면 등쪽에 있는 다른 소켓에 부착된다.등쪽의 소켓은 여러개 존재하며, 하나의 소켓에는 하나의 무기만 부착된다.등쪽의 소켓을 관리하기 위해 해시맵을 사용하고있고, 캐..
-
[UE5 | FPS] 진행 사항 정리언리얼엔진/FPS 프로젝트 2024. 8. 12. 01:36
거의 두 달만에 쓰는 글이다.그동안 다양한 작업을 했지만, 별개의 글로 쓰기엔 내용이 부족한듯 해서 이렇게 한번에 묶어서 쓰게 됐다. 그동안 한 것을 대략 정리하면 다음과 같다. 1. 달리는 중에 무기를 발사하려고 하면 달리기를 멈춘 다음 걷기 상태에서 무기를 발사하게 함. 무기를 발사하는건 게임플레이 어빌리티로 구현했는데 어빌리티에서는 특정 게임플레이 태그가 제거될 때까지 기다리는 태스크를 사용할 수 있다.캐릭터가 달리는 동안에는 달리기 게임플레이 태그를 추가하고 무기를 발사하는 어빌리티가 시작되면 달리기를 막는 게임플레이 태그를 추가해서 달리기를 멈추게 한다.달리기가 멈춰서 게임플레이 태그가 제거되면 그 이후부터 어빌리티 작업을 진행한다.어빌리티가 끝나면 달리기를 막는 태그도 제거되므로 캐릭터는 달릴..
-
[UE5 | FPS] 멀티플레이에서 작동하는 달리기 구현 과정언리얼엔진/FPS 프로젝트 2024. 6. 14. 22:43
캐릭터 무브먼트 컴포넌트를 이용해서 달리기를 구현할때는 MaxWalkSpeed를 변경하는 방식을 생각할 수 있다.MaxWalkSpeed를 사용자의 입력에 따라 변경해야하는데, 이 값을 어떻게 변경할지를 결정하기 위해서는 캐릭터 무브먼트 컴포넌트에서 MaxWalkSpeed를 언제, 어떻게 사용하는지를 알아야한다. 캐릭터 무브먼트 컴포넌트의 cpp파일에서 MaxWalkSpeed를 검색해보면 GetMaxSpeed() 함수를 찾을 수 있다.GetMaxSpeed() 함수는 MovementMode에 따라서 최대 이동 속도를 리턴해준다.이 함수가 사용되는곳을 찾아 올라가다보면 결국엔 TickComponent() 함수가 나온다.따라서 매번 GetMaxSpeed() 함수를 통해 현재 상태에서의 최대 속도를 구하는걸 알 ..
-
[UE5 | FPS] FGameplayEffectContext의 자식 구조체로 데미지 관련 정보 전달언리얼엔진/FPS 프로젝트 2024. 6. 5. 18:11
이 프로젝트는 게임플레이 어빌리티 시스템을 이용해서 멀티 플레이에서도 작동하게 작업하고있다.따라서 데미지도 게임플레이 어빌리티 시스템을 이용해서 다룬다.그렇다면 플레이어의 체력을 어트리뷰트 셋에서 관리하고, 데미지는 게임플레이 이펙트를 적용해서 체력 어트리뷰트를 조정하는 방법을 생각할 수 있다. 데미지 값은 게임플레이 이펙트의 모디파이어에서 Set by Caller로 값을 설정해서 적용하면 된다.하지만 최종 데미지를 결정할 때에는 추가적인 정보가 필요하다.예를 들면 피격된 캐릭터의 스탯과 데미지의 속성에 따라 데미지의 값을 조정해야하는 경우도 있고, FPS의 경우에는 거리가 멀어지면 데미지가 감소하는걸 생각해 볼 수도 있다.따라서 설정된 데미지 값을 그대로 적용해서 체력을 조정하기보단 피격된 캐릭터가 여..
-
[UE5 | FPS] 히트 박스를 관리하기 위한 에디터 유틸리티언리얼엔진/FPS 프로젝트 2024. 6. 2. 18:10
게임에서는 캐릭터의 피격 판정을 위해 단순한 형태의 히트 박스를 따로 만든다.만약 캐릭터에 애니메이션이 있다면 히트 박스도 애니메이션에 따라 움직여야하므로, 부위별로 나눠서 캐릭터 메시의 본을 따라가게 해야한다.그런데 움직이는 부위가 많을 수록 히트 박스도 많아질 것이고, 이걸 하나씩 직접 관리하는건 번거로운 작업이다. 언리얼 엔진에서 캐릭터의 히트 박스를 만들어야 한다면 가장 쉽게 떠올릴 수 있는 방법은 캐릭터를 상속받은 클래스나 블루프린트에서 박스 컴포넌트를 추가해서 캐릭터의 메시의 본에 어태치하는 방법이다.하지만 히트 박스를 이렇게 추가하면 히트 박스가 많아질수록 관리하기도 어려워진다.같은 메시를 사용하는 다른 캐릭터에도 동일한 히트 박스를 추가하고싶다거나, 히트 박스 작업이 끝난 캐릭터의 메시를 ..
-
[UE5 | FPS] 수평 FOV와 수직 FOV, 그리고 뷰모델언리얼엔진/FPS 프로젝트 2024. 5. 8. 19:45
FPS에서 FOV값은 마우스 감도 다음으로 중요한 옵션이 아닐까 싶다.FOV가 너무 좁으면 주변 정보를 얻기 어렵고, 너무 넓으면 적이 작게보여서 조준하기가 어려워진다.따라서 본인에게 맞는 적절한 값을 설정하는게 중요한데, 몇몇 게임들을 해보면 이 값의 범위도 다르고 같은 값으로 설정해도 체감되는게 다르기도 하다.만약 서로 다른 게임에서 동일한 느낌의 FOV를 설정했는데 그 값의 차이가 크다면 이 게임들은 FOV값을 서로 다르게 사용하는것일수도 있다. FOV에는 수직 FOV와 수평 FOV가 있다.값을 각도라고 했을 때, 수직 FOV는 위아래의 각도를, 수평 FOV는 좌우의 각도를 의미한다.사람은 위아래보다는 주로 좌우를 보게되므로 게임에서도 좌우를 기준으로 FOV값을 설정한다.그래서인지 FPS의 설정에서..
-
[UE5 | FPS] 애니메이션 블루프린트 링크언리얼엔진/FPS 프로젝트 2024. 5. 7. 15:45
현재 진행중인 FPS 프로젝트는 플레이어 캐릭터의 팔 메시는 하나만 존재한다.팔 애니메이션은 현재 들고있는 무기에 따라서 달라져야하는데 이때에는 무기에 맞는 애니메이션 블루프린트로 교체하는 방식을 사용한다.부모 애니메이션 블루프린트에서 노드 그래프를 작성하고, 각 무기마다 자식 블루프린트를 만들어서 에셋 오버라이드를 통해 무기에 맞는 애니메이션을 설정한다.각 무기에 맞는 애니메이션을 각자의 블루프린트에서 관리하니 한눈에 보기에 좋고, 새로운 무기가 추가될 때에도 자식 블루프린트를 만들어서 에셋만 지정해주면 되니 복잡하지 않다. 하지만 이 방법은 애니메이션 블루프린트가 교체될때마다 포즈가 초기화되면서 한 프레임씩 기본 포즈가 나타나는 문제가 있다.무기를 집어넣고 꺼내는 애니메이션은 몽타주를 재생하는 방식으..
-
[UE5 | FPS] 반동을 담하는 ControlShake와 반동 패턴언리얼엔진/FPS 프로젝트 2024. 5. 6. 17:02
사격했을때의 반동을 구현해야하는데 필요한 조건을 생각해봤다. 1. 카메라가 흔들려야하고 원래의 위치로 돌아와야함.2. 크로스헤어도 흔들려서 이어서 발사되는 총알은 흔들린 크로스헤어 방향으로 나아가야함.3. 카메라의 흔들림은 짧은 시간동안 유지되지만, 끊기지 않고 부드럽게 이어져야함.4. 총기에 따라 다양한 반동을 표현할 수 있어야함. 여기에 추가적인 조건으로는 구현 방식에 따라 무작위 반동과, 정해진 패턴이 있는 반동으로 나눌 수 있다.내가 알고있기로는 경쟁적인 요소가 있는 FPS게임은 주로 반동 패턴이 정해져있는 것으로 기억한다.마침 예전에 찾아두었던 에이펙스 레전드의 반동 패턴 데이터가 있어서 이 값을 적용해보면 비슷하게 될지도 궁금했고, 데이터는 패턴이 루프되도록 구성되어있는데 루프되는 반동 패턴..