저번 포스트에 이어 타이탄폴2를 목표로 개발을 하였습니다.


저번에는 이단 점프를 개발했는데 여기에 덧붙여 슬라이드 시스템을 개발하였습니다.


슬라이딩 시스템을 개발하기 위해 mixamo에서 무료 애니메이션을 다운받아 적용하였습니다.


이 사이트를 처음 알았을 때, 감탄이 나오더군요. 거의 제가 원하던 애니메이션이 많았기 때문이었습니다.


잡담은 그만하고 저는 슬라이딩 시스템을 개발하기 위해 다음과 같은 TODO 리스트를 짜보았습니다.


Running Slide

 

Crouch를 토글로 변경하기

Sprint를 토글로 변경하기

대각선으로 Sprint가능하게 하기

Sprint중 점프 가능하게 하기

Sprint중 재장전 가능하게 하기

Slide 애니메이션이 제대로 나오도록 하기

Sliding Crouch시 멈춤


처음에는 홀드 방식을 토글로 변경하는 간단하게 리팩토링 하였습니다.


이를 위해서 다시 타이탄폴2를 실행하여 연구?를 해보았습니다.



제가 직접 플레이한 게임 영상입니다. 오랜만에 하니 바니합이 잘 안되는 군요.


뭐 일단 바니합은 소스 엔진의 상징적인 버그기 때문에 제쳐두고


다양한 방면으로 생각해보았습니다. 따라서, 위와 같은 TODO 리스트가 나왔는데요.


애니메이션을 다루는 건 정말 어려웠습니다. 직접 본들을 리타겟팅하고, 루트 모션을 조작해보기도 하고 삽질도 하고....


이번 슬라이딩 시스템을 만들면서 클래스 내의 딜레이 구현은 식은 죽 먹기가 된 것 같습니다.


특별히 블루프린트를 다룬 것이 없었고, 코드 자체도 불 변수 조절해준 것 밖에 없었기 때문에 깃을 확인해주시면 감사하겠습니다.


Git : https://github.com/Titane22/FPS-Feature



'GameDev > Unreal' 카테고리의 다른 글

FPS 기능 만들기 프로젝트 #5  (0) 2018.08.21
Operation Indigo  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #4  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #3  (0) 2018.08.09
FPS 기능 만들기 프로젝트 #2  (0) 2018.08.07

지금까지 개발의 방향을 레인보우식스 시즈로 잡았습니다.


달리기는 직선밖에 안되며, 달리는 중에는 점프가 안되는 등 행동방면에서 많은 제약이 있었는데요


이번에는 제가 좋아하는 FPS 중 하나인 타이탄폴2를 목표로 잡고 개발해보았습니다.


먼저 개발한 것은 이단 점프입니다.


기본적으로 아주 간단했습니다. 


현재 점프 횟수를 기록할 JumpCount가 최대 점프 횟수인 MaxJumpCnt보다 작으면 점프가 가능하도록 하는 것인데


이단 점프라면 당연히 최대 2번이겠죠?


이것을 초기화하기 위해서 Tick에서 다음과 같은 코드로 초기화 해주었습니다.



제일 중요한 것은 this->GetCharacterMovement()->IsFalling() 함수인데요, 


이 함수는 현재 캐릭터가 바닥에 붙어있는지에 대해 불변수를 리턴받는 함수입니다.


즉, 점프중인지 확인해주는 함수죠. 


하지만, 전 코드보다 에디터 부분에서 애를 먹었습니다.



다중 점프를 위해선 두 값을 세팅해줘야 합니다.


오히려 여기서 시간을 더 잡아먹은 것 같습니다. 아무리 해도 점프를 하질 않으니;;;


읽어주셔서 감사합니다.


Git : https://github.com/Titane22/FPS-Feature


'GameDev > Unreal' 카테고리의 다른 글

FPS 기능 만들기 프로젝트 #6  (0) 2018.08.21
Operation Indigo  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #4  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #3  (0) 2018.08.09
FPS 기능 만들기 프로젝트 #2  (0) 2018.08.07

한이음 프로젝트가 끝난 뒤 언능 게임을 만들고 싶어


동아리도 찾아보고, 게임 개발사이트를 샅샅이 뒤졌지만 팀 구하기란 하늘에 별따기 였을 때


굳이 국내에서만 찾으란 법은 없다는 생각에 무작정 해외사이트인 gamedev.net에서 구한 팀 프로젝트입니다.


디스코드를 이용하여 커뮤니케이션을 나눴고, 기획서는 hacknplan이라는 사이트에서 공유받았었습니다.


트렐로와 비슷하지만 게임에 특화되었던 사이트인데 신기했습니다.


비록 프로젝트는 무산되었지만, 혼자서 XCOM2 기반의 턴제 게임 시스템을 개발하면서 엄청 공부했던 것 같습니다.


타일에 시각적 표현을 위해 A* 알고리즘을 공부한 뒤 구현해보기도 하고,


특히, 목표 지점으로 움직이는 것이었습니다. 이것때문에 유튜브를 찾아보거나(심지어 프랑스언어까지 있었다는...)


트러블 슈터 제작자 분들에게 페이스북 메세지까지 보내 정보를 얻었습니다.


결국, 구현은 했지만 구현하자마자 팀이 해체되고 말았지요 ㅠㅠ


그래도 꽤 재밌었던 것 같습니다. 이때 유튜브 엄청 돌려봐서 그런가 영어 듣기도 좀 늘었고;;


디스코드로 채팅하다보니 영작도 늘고


역시 초보자들만 모였던 것이 문제인지 진행속도도 느렸고, 피드백도 엄청 오래걸렸던 걸로 기억하네요.


다음에 실력이 늘면 다시 도전해보아야 겠습니다.






'GameDev > Unreal' 카테고리의 다른 글

FPS 기능 만들기 프로젝트 #6  (0) 2018.08.21
FPS 기능 만들기 프로젝트 #5  (0) 2018.08.21
FPS 기능 만들기 프로젝트 #4  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #3  (0) 2018.08.09
FPS 기능 만들기 프로젝트 #2  (0) 2018.08.07

이번에 만든 기능은 재장전 기능입니다. 


개발한 기능에 앞서 달리는 중에 마우스를 떼었다 놓으면 총을 쏘는 버그가 발생해 수정했습니다.


SetFiring이 토글식이었다 보니 달리는 중에 총을 쏘면 토글이 잘못 되어 계속 총을 쏘는 것이었습니다.



간단하게 마우스 왼쪽 클릭을 떼었을 때 새로운 함수를 바인딩하여 해결하였습니다.


재장전 기능은 간단한 산술적인 표현이 들어간 기능이었습니다.


캐릭터 내의 바인딩할 Reload 함수를 작성하였습니다.


Reload함수에서는 달릴 때 재장전을 할 시 달리기 기능을 풀어주는 기능을 포함하였습니다.


다음에 SetTimer함수를 이용하여 애니메이션의 길이만큼 딜레이를 준 뒤, 다른 FPS 처럼 탄창이 장전된 뒤에 탄창이 새로 채워지도록 하였습니다.



다음은 총기 클래스 내의 Reload 함수입니다. 


CliSize는 탄창의 크기, Ammo는 현재 탄창의 잔탄량, MaxAmmo는 현재 가지고 있는 탄창입니다.


ClipSize와 같을 때 장전하면 안되니 제어해주고, RemainAmmo를 이용하여, 잔탄량을 두 가지로 나눠 표현하였습니다.




애님 그래프는 이전에 했던 작업과 똑같으므로 게재하지 않았습니다.


참고 : https://www.youtube.com/playlist?list=PLL0cLF8gjBprG6487lxqSq-aEo6ZXLDLg

Git : https://github.com/Titane22/FPS-Feature




'GameDev > Unreal' 카테고리의 다른 글

FPS 기능 만들기 프로젝트 #5  (0) 2018.08.21
Operation Indigo  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #3  (0) 2018.08.09
FPS 기능 만들기 프로젝트 #2  (0) 2018.08.07
FPS 기능 만들기 프로젝트 #1  (0) 2018.08.01

이번에는 c++ 클래스를 전체적으로 클래스 명을 리팩토링 하였습니다. 불필요한 부분도 삭제해줬구요.


역시 소스는 정리해야 찾기가 편하네요.


하지만, 익숙치 않아 꽤 많이 돌아갔네요. 이전에 Udemy 강의를 보며 해보긴 했지만 감으로만 하다가 큰일 날뻔 했습니다.


다음으로 달리기 기능을 수정했습니다.


앞,뒤,좌,우로 달릴 수 있었던 이전과는 달리 오직 앞으로만 달릴 수 있도록 하였습니다.


처음에는 벡터를 배운 김에 멋지게 활용해보자 했지만, 역시 겉 멋들고 어렵게 생각할수록 


시간만 잡아먹는 것 같습니다. 


Simple is Best 


다른 분야는 잘 모르지만 역시 똑같은 결과라면 화려하기보다는 무조건 간단해야 하는 것 같습니다.


즐겨하던 레인보우식스 시즈로부터 생각나서 이같은 방향으로 디자인했습니다.


입력 값을 받아  if문에서 제어 해줬는데요.


FwdValue가 오직 1일 때에만 달릴 수 있습니다.


또한 좌우 축키와 바인딩 된 MoveRight에서는 달리는 중을 의미하는 불 변수 bSprintTrue가 참 일 경우 입력을 할 수 없도록 하였습니다.


bIsAiming은 나중에 나올 조준모드 임을 나타내는 불 변수입니다. 아무생각없이 조준하고 달렸다가 토 나올 뻔했습니다;;;;


다음은 탄환의 삭제 기능을 수정했습니다.


기존에 있던 탄환은 Mobility가 Movable인 물체에 닿았을 때에만 삭제가 되었습니다.



if문과 else if문의 차이는 IsSimulatingPhysics 함수의 유무입니다.


IsSimulatingPhysics()의 원본은 UPrimitiveComponent::IsSimulatingPhysics() 입니다. 


부딪힌 물체가 현재 physics simulation을 사용 중인지 반환해주는지를 알려주는 함수입니다.


기존에 상자가 아닌 벽과 부딪혔을 때에는 이 함수가 false를 반환해줬기 때문에 탄환이 삭제되지 않았습니다.


따라서, else if문에서는 이 함수를 제거하고 AddImpulseAtLocation 함수를 제거하여 가해지는 힘을 제거했습니다. 


어차피 무버블이 아니기 때문에 어떤 힘을 가해도 의미가 없으니깐요 ㅎㅎ


다음은 조준 모드입니다.


먼저 프로젝트 세팅에서 마우스 오른쪽 클릭을 두 함수와 바인딩시켰습니다.





FollowCamera는 기본 FPS 카메라이며 ADSCamera는 조준 모드시의 카메라입니다.


함수 자체를 구현하는 것은 굉장히 쉬웠습니다. 점점 키 바인딩 함수에 대해 익숙해져 이런 것쯤은 별거 아니군요. 


하지만, 역시 애니메이션을 건드리는 건 무섭습니다....눈_눈


마지막으로 남은 탄환을 나타내는 위젯을 이용해 UI를 추가했습니다. 텍스트만 이용하면 됐기 때문에 매우 간단했습니다.


참고 : https://www.youtube.com/playlist?list=PLL0cLF8gjBprG6487lxqSq-aEo6ZXLDLg

Git : https://github.com/Titane22/FPS-Feature




'GameDev > Unreal' 카테고리의 다른 글

FPS 기능 만들기 프로젝트 #5  (0) 2018.08.21
Operation Indigo  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #4  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #2  (0) 2018.08.07
FPS 기능 만들기 프로젝트 #1  (0) 2018.08.01


지금까지 제작한 기능은 


앉기, 달리기 그리고 마우스의 위치에 따른 시점 변화입니다.


먼저, 앉기와 달리기 입니다. 

프로젝트 세팅에서 왼쪽 컨트롤 키를 액션 키로 설정해줘야 합니다.


하지만, 처음 설정을 FPS이다 보니 설정이 되어 있었습니다.


이후 캐릭터의 클래스에서 키를 Binding 해줍니다.


저는 아래와 같이 키를 바인딩 시켰습니다.




if문은 두 액션 키가 겹치지 않도록 하기 위함입니다. CharacterMovement에 접근하여 최대 스피드를 조정하였습니다.


애니메이션을 변경하기 위해 애니메이션의 애님 그래프를 이용하였습니다. 


각 상태를 생성하고 상태를 오가는 불 변수에 따라 애니메이션이 변경됩니다.


AnimInstance 클래스를 상속하여 Swap_Anim 클래스를 생성하였고, 


NativeUpdateAnimation 메소드를 가상함수로 상속받아 사용했습니다.


캐릭터의 방향 값을 계산하기 위해 캐릭터의 속도와 방향을 


float CalculateDirection(const FVector & Velocity, const FRotator & BaseRotation)  


의 매개변수로 입력하여 Direction에 저장하였습니다.


속도는 벡터의 크기를 나타내는 Size함수를 이용하여 Speed에 저장하였습니다.


 



계산한 변수들은 다음과 같이 세팅 하였습니다. 달리기 애니메이션은 Sprint_BS를 만들어 Crouch_BS와 같이 설정하였습니다.


아래 사진은 애니메이션 변경을 위해 애님 그래프의 Transition에서 설정했습니다.


다음은 캐릭터의 마우스에 따른 시점입니다.


다른 애니메이션과 같이 Swat_Anim 클래스의 NativeUpdateAnimation에서 작성하였습니다.


현재 마우스의 위치 값을 받는 GetControlRotation을 이용하여 최종적으로  AimDirection 변수에 반환하였습니다.


반환한 AimDirection 값은 애님 그래프에서 



이렇게 설정하였습니다. 본 트랜스 폼은 현재 설정된 Spine,Spine1,Spine2의 방향 값을 바꿔줌으로써 


시점에 따라 애니메이션의 방향을 변경하도록 해줍니다.


여기까지 진행하였는데요


강좌에는 없지만 FPS 매니아로써 좌,우 심지어 뒤로도 달릴수 있는게 맘에 안드는군요.


다음에는 오로지 대각선과 전방을 향해 움직일 때만 달릴 수 있도록 추가해보겠습니다. 


감사합니다.


참고 : https://www.youtube.com/playlist?list=PLL0cLF8gjBprG6487lxqSq-aEo6ZXLDLg

Git : https://github.com/Titane22/FPS-Feature


'GameDev > Unreal' 카테고리의 다른 글

FPS 기능 만들기 프로젝트 #5  (0) 2018.08.21
Operation Indigo  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #4  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #3  (0) 2018.08.09
FPS 기능 만들기 프로젝트 #1  (0) 2018.08.01

현재 FPS 게임의 각종 기능을 만들어보기 위해 새로운 프로젝트를 시작했습니다.


아래 사이트를 참조하여 c++을 이용해 9강까지 진행하였는데요.


아직 Actor클래스의 파생 클래스의 생성자에서 Static Mesh설정과 Material설정을 하지 못해 어려움을 겪었습니다.


일단, 코드를 작성했을 때 정상적으로 실행은 되었지만, 눈으로 보이는게 없으니 답답하여 주석처리하고 블루프린트로 작성하였습니다. ㅎㅎ;


구글링도 통달한 줄 알았더니 아직도 부족한가 봅니다.


언능 숙지하고 블루프린트를 삭제하고 저의 코드를 적용해보겠습니다. 


현재 생각 중인 기능은

-       앉기(c키를 눌러 앉기 모드)

-       눕기(z키를 눌러 눕기 모드)

-       점프(스페이스 키를 눌러 활성화)

-       줌인(오른쪽 키를 눌러 무기 줌 상태)

-       달리기(쉬프트 키를 눌러 활성화)

-       걷기(알트 키를 눌러 활성화)

-       기울이기(Q, E를 이용한 몸 기울이기)

-       이단 점프(점프 중 스페이스 키를 눌러 활성화)

-       벽 매달리기(난간에 가까울 시 벽에 매달려 올라가기)

-       벽 달리기(벽 옆에서 달릴 시 활성화)

이렇게 있습니다.


제가 보고 있는 강의에서 앉기, 달리기 등이 있는데 이러한 기능들은 강의를 보면서 c++로 변환해보겠습니다.

(솔직히 쉬워보이지만, 아직 애니메이션을 다루는 부분이 어렵네요;; ㅠㅠ)


기울이기는 레인보우식스 시즈를 모방하여 해보아야 겠습니다. (이것도 애니메이션이 필요한게 아닌지 ㅠㅠ 안되면 카메라만 기울여야 겠습니다.ㅋ)


이단 점프, 벽 매달리기, 벽 달리기는 제가 좋아하는 타이탄폴2를 생각하며 적어보았습니다. 


이것들도 애니메이션이 필요해서 구할 수 있다면 적용시켜보겠습니다.




동영상을 보아하니 에임에 따른 총구 위치 변화와 탄환의 삭제가 절실해 보이네요. 바로 DestroyActor를 이용해 삭제시켜버리겠습니다 ㅎㅎ













참고 : https://www.youtube.com/channel/UCz-eYJAUgSE-mqzKtit7m9g

Git : https://github.com/Titane22/FPS-Feature

'GameDev > Unreal' 카테고리의 다른 글

FPS 기능 만들기 프로젝트 #5  (0) 2018.08.21
Operation Indigo  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #4  (0) 2018.08.14
FPS 기능 만들기 프로젝트 #3  (0) 2018.08.09
FPS 기능 만들기 프로젝트 #2  (0) 2018.08.07

+ Recent posts