본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 21번째 걸음-챕터9의 실습 part1

by 인터넷떠돌이 2017. 7. 10.
반응형

안녕하세요?


드디어 [실전! 유니티5로 소셜 네트워크 게임 만들기]라는 책도 거의 다 끝나가는 상황인데, 아무튼 간에 이제 마지막 챕터인 챕터9를 한번에 다 실습을 해보고자 했습니다만, 그건 아무래도 무리였고 하는 수 없이 중간에 짤라야만 했습니다. 아무튼 실습한 내용을 이번 포스팅에 올려 보겠습니다.



먼저 필요한 스프라이트 들을 기존에 작업을 하였는 shootergame이라는 프로젝트의 Images라는 폴더에다가 드레그 앤 드롭으로 놓도록 합니다. Ctrl + C와 Ctrl + V로 복사해서 붙여넣기를 하려니 전혀 먹히지 않아서, 조금은 불편하기는 하지만 이렇게 드레그 하는 수 밖에 없었습니다.



이제 새로운 씬을 만들어서 새로이 저장을 하는 것입니다. 기존에 Game이라는 저장명이 있어서 하는 수 없이 Game2라고 했습니다.



먼저 배경이 되는 계층뷰의 윈도우로 드레그해서 놓는 방식으로 새로운 게임 오브젝트를 생성하도록 해 보겠습니다.



제대로 된 배경화면이 나오는 것을 확인할 수 있습니다.



메인 카메라를 위 스크린샷과 같이 설정을 하도록 해서, 제대로 된 배경화면이 나올 수 있도록 합니다.



제대로 배경화면이 게임화면에서 나오는 것을 볼 수 있습니다. 이렇게 만들어 졌으니, 다음 단계로 가도록 합니다.



PlayerData라는 게임 오브젝트를 생성합니다.



그다음 이전에 작업을 해 두었는 PlayerData.cs라는 스크립트를 달아 주도록 합니다.



다음으로는 플레이어 캐릭터가 될 스프라이트를 Hierarchy윈도우로 끌어서 게임 오브젝트로 추가하도록 합니다. 그리고 게임 오브젝트의 이름도 알기 쉽도록 Player라고 변경하다록 합니다.



그런데 책에서의 설명과는 다르게 플레이어 캐릭터가 전혀 나타나지 않는 문제가 발생하였습니다.



결국 Order in Layer라는 것을 1로 변경하고 나서야 플레이어 캐릭터가 될 캐릭터가 나오는 것을 볼 수 있었습니다.



그 다음으로는 Player에 Animator라는 컴포넌트를 추가하도록 합니다.



이미 이전의 작업으로 Animations라는 폴더가 있는데, 여기다가 Animator Controller라는 것을 생성하도록 해서, 원래를 이름을 Player Controller라고 설정을 해야 했지만, 이미 이전의 작업으로 저는 생성이 되어 있었습니다.



이제 생성된 Player Controller를 Player라는 게임 오브젝트에 있는 Animator 컴포넌트에 있는 Controller항목에다가 가져다 놓으면 됩니다.



이제 Windows라는 항목을 열어서 Animation이라는 윈도우를 열었을 때 화면입니다.



새로이 애니메이션을 만들고자 먼저 loloco_idle01부터 04까지를 드레그 해서 animaiton윈도우에 놓습니다.



그런데 무엇이 문제인지 의도한 대로 애니메이션이 나오지 않습니다. 그래서 이래저래 헤메었는데.......



일단 기존에 있는 Animation윈도우 안의 스프라이트를 모두 지워보기도 했지만, 결과는 그다지 시원치 않았습니다.



알고 보았더니, 위 스크린샷에서 빨간색 동그라미를 친 부분을 눌러서, 새로이 Animation을 추가해야만 하는 작업이었습니다. 일단 이제서라도 알았으니, 첫번째 애니메이션은 PlayerBasicIdle이라고 지정을 해서 만들어 가도록 합니다.



완전히 새로 만들어진 화면에서 위 스크린샷과 같이 4장의 스프라이트를 끌어다가 놓도록 합니다.



다음으로는 Samples옆에 있는 항목을 10으로 바꾸어서 10프레임으로 바꾸어 주도록 합니다. 



다음은 PlayerMaidIdle이라고 지정을 해서 두번째 에니메이션을 만들도록 합니다.



이번에도 역시 10프레임으로 고정되어 움직이도록 해 줍니다.



PlayerWitchIdle이라는 이름을 지정해서 3번째 캐릭터의 정지상태 애니메이션을 만들도록 합니다. 



이번에도 프레임을 10 프레임으로 지정해 두도록 합니다.



이제 다음 작업을 위해서 Windows항목에서 Animator라는 항목을 눌러서 애니메이션들을 관리하도록 합니다.



여기서도 책과는 다른 상황이 벌어졌습니다. 제가 분명히 추가한 애니메이션들이 여기서는 전혀 나와 있지 않는 것이였습니다.



다시한번 확인을 해도 여기도 없는 것이 확인이 되었고 한참을 헤메었는데.....



위 스크린샷에 나와 있는 것처럼 Reimport All이라는 것을 클릭하고서 한참을 기다려야 하는 작업이 남아 있었던 것입니다. 일단 이를 누르고 나면, 제가 작업했는 애니메이션들이 다시 나오는 것을 볼 수 있습니다.



이제서야 제대로 제가 추가했는 애니메이션들이 나와 있는 것을 볼 수 있었습니다. 이제부터 다음 작업에 들어가도록 해 보겠습니다. 여기서의 작업은 플레이어의 값에 따라서 플레이하는 캐릭터가 달라지도록 하는 것입니다.



먼저 새로운 박스를 생성하도록 합니다.



박스의 이름은 먼저 New State라고 있는데 이를 Root라고 지어 주도록 합니다.



그 다음 우클릭을 해서 default라는 메뉴를 눌러서 Root가 되도록 지정을 합니다.



다음으론느 Source란에 있는 스크립트 중에서 C# script를 하나 새로 생성해서, 이름을 PlayerState.cs라고 지어 주도록 합니다.



다음 작업은 이 PlayerState라는 스크립트를 Player라는 게임 오브젝트에 추가하도록 합니다. 그리고 나서 코딩에 들어가도록 해야 합니다.



먼저 제일 윗줄에 Animator animator = null; 이라고 코딩을 한 다음, 시작하자 마자(void Start()에서) Animator의 값을 가져올 수 있는 코드인 animator = GetComponent<Animator>(); 를 입력합니다.



다음이 문제는 문제였는 것이 PlayerData라는 클래스의 내용을 가지고 와야 하는데, 원래는 에러가 뜨지 말아야 하는 곳에서 왜인지 계속 에러가 뜨는 지 의문인 상황이었습니다만.....



알고 봤더니 오타가 있어서 에러가 뜬 것이였습니다. 아무튼 밑에 있는 if문의 내용은 간단합니다. PlayerData라는 클래스에서 selChar라는 값을 가지고 오는데, 이게 0이면 Basic인 캐릭터를 표시하고, 이게 만약 1이면 메이드복 캐릭터를 표시하라. 그리고 그 이외의 값이 되면 마녀 캐릭터를 표시하라는 의미입니다.



실제로 제가 PlayerData라는 게임 오브젝트에서 selChar의 값을 1로 지정하고 유니티의 플레이 버튼을 누르자 기본적인 캐릭터에서 메이드복 캐릭터로 바뀌어서 나오는 것을 확인할 수 있었습니다.



마지막으로 selChar가 2라는 값으로 했을 때, 마녀 캐릭터가 나오는 것을 볼 수 있었습니다. 이것으로 챕터9의 절반을 실습하는 데 성공했는데, 될 수 있으면 다음 포스팅에서는 나머지 절반을 다 실습해 보도록 하겠습니다.

반응형