본문 바로가기
Dev/Unity(C#)

[프로젝트] 유니티로 탄막슈팅게임 만들기 01

by E.Clone 2019. 3. 19.

[프로젝트] 유니티로 탄막슈팅게임 만들기 01


유니티에서 오브젝트들은 다음과 같이 만들었다.



Player 와 CameraPoint는 빈 오브젝트이며 이 두 오브젝트에 캐릭터와 카메라의 스크립트를 넣었다.


GameManager 오브젝트는 현재 사용하지 않는다. 이후 게임 스크립트의 전체적인 관리를 하게 될 스크립트를 넣을 것이다.


1-1. 캐릭터 움직임(Soft) 및 카메라 시점 구현 초기버전

C# 스크립트 작성을 통해 다음과 같은 움직임을 구현하였다.



W, A, S, D 키를 사용하여 캐릭터 오브젝트에 힘을 가하여 부드럽게 움직일 수 있고,


Left / Right Arrow를 사용하여 카메라 시점을 회전할 수 있도록 구현했다. 



당연하게도 이러한 키 세팅은 사용하기 어렵다. (NieR:Automata™에서는 초기 키설정이 이러하며, 뉴비들은 이 세팅에 영혼까지 털린다)



위와 같이 3인칭 시점의 게임에서는 FINAL FANTASY XIV 정도의 세팅이 가장 편하다.


#1. W, A, S, D를 사용해 전, 후, 좌, 우로 움직인다.

#2. 카메라 시점은 마우스 좌 또는 우클릭 후 드래그하여 조절한다.

#3. 마우스 휠로 줌인 줌아웃을 할 수 있다.

#4. 캐릭터는 카메라 로컬 시점에 따른 전, 후, 좌, 우의 움직임을 갖는다.


위 사항 중 #2 부터 #4까지 구현하는 것을 목표로 한다.


추가 사항으로 마우스 좌클릭을 통해서는 캐릭터가 움직이는 방향에 영향을 주지 않고 '시점만' 변경할 수 있도록 구현하는 것도 엑스트라 과제이다.


현재까지의 소스코드


1-2. 캐릭터 움직임(Soft) 및 카메라 시점 구현 개선 버전


위에서 목표한 네가지 모두 구현을 완료하였다.


#1. W, A, S, D를 사용해 전, 후, 좌, 우로 움직인다.

#2. 카메라 시점은 마우스 좌 또는 우클릭 후 드래그하여 조절한다.

#3. 마우스 휠로 줌인 줌아웃을 할 수 있다.

#4. 캐릭터는 카메라 로컬 시점에 따른 전, 후, 좌, 우의 움직임을 갖는다.


카메라의 시점 변경은 우클릭 드래그로 하였다.


이외에 더 추가한 기능으로는


#5. 좌 Shift키를 사용하여 캐릭터의 속도 리미트를 높게 한다.

#6. 시프트에서 손을 놓았을 경우, 그리고 WASD 중 아무것도 누르지 않을 경우 감속할 수 있도록 한다.

#7. 카메라가 상하 90도 이상을 넘어가면 화면이 혼란해지므로 ±최대각을 적용하였다. (현재는 75도)



여기서 몇가지의 문제가 더 발생한다.


위 움짤에서 확인할 수 있듯이 '낙하'를 하는 경우에도 속도 리밋이 걸려 낙하에도 방해를 받는다. 조건을 x방향과 z방향에서만 받아주었는데도 문제가 해결되지 않아 난항.

 -> 나중에 이유를 알았는데, 캐릭터 Rigidbody의 Drag 항목에 0이 아닌 값이 들어있어서 자체적으로 감속되는 힘이 작용하고 있기 때문이었다.


그리고 정말 세세한 조정이지만 좌우로 낮은 속도가 남아있는 동시에 앞으로 달리고 있다면 좌우 속도는 0이 될 수 있도록 감속을 주어야한다. 이건 선택사항이며 역시 난항.


유니티 프로그램 내에서 '마찰'을 조정하면 되겠으나 이는 코드로서 작성하지 않고있다는 이유로 기각.



지금까지 난항을 겪었던 이유는 캐릭터에 '힘을 주어' 움직이고 있기 때문이며 이 때문에 속도 조정에 있어 그 수치를 맞추는 것이 매우 힘들다. 코드를 수정할 수록 완성도가 높아지고 있는 건 사실이나 여기에 매우 스트레스를 받아 새로 하나의 스크립트를 작성하게 되었다.


원래 사용하던 코드는 'PlayerSoftMove.cp'로 바꾸었으며

새로 작성하게 될 코드는 'PlayerHardMove.cp'이다.


파일 이름과 같게 캐릭터의 부드러운 움직임을 포기한 코드를 작성한다.



~현재까지의 C# 스크립트 코드 두개~






2-1. 캐릭터 움직임 코드 재작성(Hard ver)


현재의 카메라에서 개선해야 할 점은


# 줌인, 줌아웃을 할 때 부드럽게 움직이면 좋겠다

# 스크롤을 매우 빠르게 올리고 내릴 경우 줌인/아웃이 작동하지 못한다


이 정도이며 옵션사항정도로 생각하므로 어느정도 안정화는 끝났다고 생각한다.


따라서 캐릭터의 무빙 코드만을 재작성하자.


새로 작성할 코드는 캐릭터 오브젝트에 힘을 가하는 것이 아니라 직접 포지션에 조작을 가한다.


앞뒤 전후로만 움직이면 코드 작성에 있어서는 매우 편할 것이나, 문제는 카메라가 보는 방향이 캐릭터가 보는 방향이며 그 방향에 따른 움직임을 해주어야 한다는 것이다. 그렇게 제일 먼저 작성된 코드는 W키를 누를 때, 앞으로 진행하는 코드이다.




같은 방법으로 A, S, D도 작성해준다.


포지션의 변화는 캐릭터가 바라보는 방향(y축의 회전정도)에 따라 삼각함수를 사용하여 방향을 결정할 수 있도록 했다.

반응형