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

유니티5 독학하기 그 61번째 걸음-무한히 계속되는 스테이지 생성 part1

by 인터넷떠돌이 2018. 7. 31.
반응형

안녕하세요?


하루종일 이해도 잘 되지 않고, 이래저래 어려워서 포스팅을 올리는 시간이 많이 늦어졌습니다. 아무튼 간에 그래도 어떻게 챕터11은 다 실습해 보는데 성공은 했습니다. 하지만 너무 분량이 길어져서 하는 수 없이 두 부분으로 잘라야 했습니다.



먼저 미리 다운로드를 받은 chapter11의 유니티 팩키지 파일을 가지고 오도록 합니다.



일단 이 안에는 프리팹이 있는 것을 볼 수 있었습니다.



LevelPieceBasic프리펩을 가지고 와서, 다음에는 이를 드래그 앤 드롭으로 계층뷰에서 게임 오브젝트로 만들어 주도록 합니다.



일단 게임오브젝트로 추가된 LevelPieceBasic를 한번 살펴보도록 합니다. 여기서는 Floor라는 조각들이 15개 있는 것을 볼 수 있으며, ExitPoint와 LeaveTrigger라는 것도 있는 것을 볼 수 있습니다.



그리고 나서 이전 포스팅에서 만들어 놓은-이전 챕터에서 만들어 놓은 KillTrigger와 FloorShort를 제거하도록 합니다.



그리고 이번에는 새로운 C# 스크립트인 LevelPiece.cs를 생성하도록 합니다.




그리고 여기서는 그냥 Transform이라는 변수 exitPoint를 선언하도록 합니다.



다음으로는 게임 오브젝트인 LevelPieceBasic에 LevelPiece라는 스크립트를 넣도록 하고, 여기다가 위에서 리미 추가를 했는 exitPoint를 지정하도록 합니다.



다음으로는 LevelGenerator라는 C# 스크립트를 생성하도록 합니다.



다음은 위 스크린샷과 같이 코드를 추가하는데, 가장 가는 붉은색 선으로 그어진 선은 바로 싱글턴 혹은 싱글톤 클래스로 만들어 주는 코드입니다.


그리고 파란색 코드는 바로 리스트라는 것을 선언하는 것인데, 배열과는 다르게 리스트는 리스트만의 특징이 있는데, 일단 여기서는 그렇게 까지 자세한 것은 생략합니다만, 그래도 사용하는 법은 소개하는데, 매우 간단합니다.


List<자료형> 변수명 = new List<자료형>();


이런 식으로 리스트를 사용하겠다고 선언을 할 수 있으며, 여기서 자주 나오게 될 levelPrefabs 라는 것은 리스트의 이름으로 자료의 유형은 기존과는 다르게 LevelPiece라고 있는 것을 볼 수 있습니다. 아마 이건 원래라면 안되겠지만, 이전에 이미 transfrom인 형태로 class라고 LevelPiece라는 것을 선언해서 가능한 것으로 보입니다.


이곳에 있는-levelPrefabs는 미리 준비해 놓은 스테이지의 발판 조각들의 모음이라고 볼 수 있습니다.


다음으로는 보라색으로 밑줄이 그어진 곳인데, 여기서는 레벨이 어디서 시작할 것인지 스타트 포인트를 짚어 주는 곳이라고 볼 수 있습니다.


마지막으로 초록색으로 밑줄이 그어진 곳 역시 리스트를 선언하는데, piece라고 선언을 해서 여기서는 현재 게임에 사용될, 즉, 실제로 배치가 될 발판들의 리스트입니다. 여기서는 게임상에 실제로 배치가 되는 것이라고 생각을 하겠습니다.



다음으로는 실제로 발판을 추가할 수 있는 메서드를 추가합니다. 여시서는 먼저 언급해야 할 것인 인스턴트화라고 해서 instantiate라는 명령어가 있는 것을 볼 수 있습니다.


자료유형 변수명 = (자료유형) instantiate(오브젝트); 라는 형식으로 사용할 수 있습니다. 여기서는 오브젝트가 바로 levelPrefabs라는 리스트입니다. 그래서 인스턴트화라고 해서 일종의 메모리상에 공간을 할당한 다음, 여기서 이걸 piece에 배치를 하는 것입니다.



여기서 나오는 Random.Range라고 해서, (최저값, 최대값)이라고 해서 이 사이의 값에서 아무 임의의 값을 하나 찍어서 주게 됩니다. 




그리고 위에서 나온 Transform.SetParent라는 메소드가 있는데, 그냥 인스턴트화 하면 그대로 부모가 되기 때문에, 이를 방지하기 위해서는 위 메소드로 부모를 지정해 줘야 하는데, 여기서 뒤에 false를 하면 부모 오브젝트도 이 오브젝트와 같이 바뀌지 않습니다.



다음은 새로운 LevelGenerator라는 게임 오브젝트를 생성하도록 합니다.



그리고 다음에는 LevelGenerator라는 스크립트를 컴포넌트로 추가시키도록 합니다.



그리고 여기서는 StartPoint라는 새 게임 오브젝트를 계층뷰에서 만들어 주도록 합니다.



일단 여기서 그냥 위치를 옮기기는 어려워서 임시로 저런 Circle Collider 2D라는 컴포넌트를 지정하도록 합니다.



문제는 이러고도 어떻게 드래그를 할 수 없어서 하는 수 없이 위 스크린샷처럼 일일히 값을 입력해서 위치를 지정해야 했습니다. 아무튼 플레이어 캐릭터의 하단 좌측에 위치하도록 만들어 줍니다.




이렇게 해서 추가를 하도록 합니다. 물론 여기서 CircleCollider2D 컴포넌트를 삭제해도 됩니다. 단, 그런다고 해서 게임 오브젝트까지 제거하면 안됩니다.



그리고 다시 LevelGenerator라는 게임 오브젝트를 선택하도록 합니다.



좀 전에 추가한 LevelGenerator라는 스크립트에서 LevelPrefabs의 사이즈가 처음에는 0인데 이를 1로 만든 다음에, Element0에 LevelPieceBasic이라는 게임 오브젝트를 끌어다 놓도록 합니다.



다음에는 LevelStartPoint라는 부분에 좀 전에 위해서 만들어 놓은 StartPoint라는 게임 오브젝트를 끌어다 놓도록 합니다.



일단 여기서 AddPiece라는 메소드를 실행시키는 기능까지 없어서, 하는 수 없이 여기 Update에서 만들어 놓도록 합니다. 그리고 나서 이제는 유니티5의 플레이 버튼을 눌러 보도록 합니다.



이제 일일히 무엇을 만들지 않아도, 바닥이 생성되는 것을 볼 수 있었습니다. 이제 이것은 보았으니, 계속해서 다음 단계로 들어가야 하는 이유가, 바로 스테이지가 딱 한번만 생성이 되어서 끝으로 가면 떨어지게 되어 있습니다. 그래서 추가로 작업을 더 해야 하는데, 내용이 너무 길어져서 하는 수 없이 여기서 끊어야 겠습니다. 나머지 부분은 계속해서 다음 포스팅에서 올리도록 하겠습니다.

반응형