본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티unity로 게임 만들기

유니티50_게임 제작 과정 19_FileStream_완성 데이터 객체를 파일로 저장하기 앞 글에서 PlayerPrefs클래스는 저장할 데이터 양이 많으면 사용할 수 없다. 이런 경우 객체를 파일로 저장하는 방법을 사용해야 한다. 먼저 GameManager.cs 스크립트 안에 데이터를 담아서 관리할 클래스를 하나 만들어야 한다. 클래스명은 UserData(사용자 데이터)라고 하자. class GameManager 바깥에 새 클래스 UserData를 만든다. 최고 점수를 저장할 변수 BestScore를 선언한다. GameManager에서 사용하기 위해 UserData타입의 변수를 만든다. 클래스 객체를 파일로 저장하기 FileStream을 사용하기 위해 2번 줄 System.IO를 등록하고, BinaryFormatter를 사용하기 위해 7번 줄 System.Run.. 더보기
유니티49_게임 제작 과정 18_저장_PlayerPrefs 데이터 저장 이번에는 앞에서 만든 점수(Score)를 저장하는 방법을 알아본다. 여기서 구현해야 하는 내용은 게임에서 최고 점수를 디스크에 파일로 저장(save)하고 게임 종료 후 다시 게임을 시작하면 저장한 파일을 불러오는(load) 기능이다. PlayerPrefs 유니티에서 게임의 데이터를 저장하는 방법 중 가장 간단한 방법은 유니티에서 제공하는 데이터 관리 클래스인 PlayerPrefs 를 이용하는 것이다. PlayerPrefs 클래스는 간단한 값을 저장할 때 사용할 수 있다. 저장하고 불러올 수 있는 변수값은 int, float, string 타입의 변수이다. PlayerPrefs는 데이터를 preference에 저장한다. 윈도우즈의 경우 registry(레지스트리)의 HKCU\Software\[.. 더보기
유니티48_게임 제작 과정 17_Coroutine_IEnumerator Coroutine 코루틴 코루틴은 실행을 일시 중지하고 Unity에 제어권을 반환한 후 다음 frame(프레임)에서 중단했던 위치에서 계속할 수 있는 함수이다. 네임스페이스 System.Collections에 있는 IEnumerator 인터페이스를 반환 타입으로 정의한다. 그리고 코루틴 호출은 StartCoroutine() 메서드를 이용해 호출한다. 코루틴이 어떤 기능을 하는지 예를 만들어 본다. 위 코드를 실행하면 순서대로 1, 2, 3이 출력된다. 먼저 7번 줄에서 First메서드를 호출하여 실행되고 1이 출력된다. 계속해서 14번 줄에서 Second메서드가 호출되고 2가 출력된다. 여기까지 First메서드 실행이 끝난 후 8번 줄 Debug.Log가 실행되어 3이 출력된다. 위 코드를 코루틴으로 변.. 더보기
유니티47_게임 제작 과정 16_Generic Collections 이번에는 적을 생성하는 방법을 업그레이드 해보자. 현재 적을 생성하는 좌표(Coordinate)는 배열(Array)로 만들어져서 좌표를 추가하지 못하고 정해져 있다. 이것을 좌표를 랜덤으로 추가하기 위해서는 제네릭컬렉션인 List로 바꾸면 된다. 2번 줄에서 제네릭컬렉션을 사용하기 위해 네임스페이스 System.Collection.Generic을 사용한다. 12번 줄에서 List로 수정한다. EnemyRandom메서드를 위와 같이 수정한다. 52번 줄에서 SpawnEnemy 매개변수를 전달한다. GameObject타입은 범위를 (0,2)로 지정해서 0~1개의 적을 전달한다. 좌표 위치는 Coordinates 리스트의 개수(Count)까지 중에서 랜덤으로 선택해서 그 위치를 받아 전달한다. 54번 줄에서 .. 더보기
유니티46_게임 제작 과정 15_점수 이벤트 앞 글에 이어서 Score 구현을 완성해보자. Text 컴퍼넌트 연결 4번 줄에 UnityEngine.UI를 사용할 수 있도록 한다. 앞에서 점수를 표시하기 위해 UI-Text로 Text컴퍼넌트를 추가했었다. 이 Text컴퍼넌트는 아래에서 보듯이 스크립트로 작성되어 있으며 열어보면 Text 클래스가 네임스페이스 UnityEngine.UI 안에 있다는 것을 확인할 수 있다. Text컴퍼넌트 안에 표시되는 메세지에 접근하거나 편집하려면 이 Text클래스를 사용해야 한다. 계속해서 12번 줄에는 점수를 담을 변수 score를 선언한다. 13번 줄에는 Text타입의 TextScore 필드를 선언해서 Inspector창에 등록한다. 여기에 앞에서 만들었던 TextScore 컴퍼넌트를 연결하면 된다. 스크립트를 저.. 더보기
유니티45_게임 제작 과정 14_점수 만들기 Score 점수 만들기 게임에서 빠질 수 없는 점수를 구현해 보자. 점수는 시작화면, 게임 화면, 게임 종료 후 화면 등에 나타낼 수 있다. 여기서는 시작화면에 최고 점수(Best Score), 게임 중 화면에 점수(Score)를 나타내는 방법을 알아본다. 이 글에서는 우선 오브젝트만 만들어 두고 실제 게임시 작동하는 코드는 다음 글에서 만든다. 먼저 Scene탭을 눌러서 Scene(씬)보기 화면으로 바꾼다. UI-Text를 클릭해서 텍스트 오브젝트를 만들고 이름을 TextScore로 바꾼다. Inspector창에서 속성을 위와 같이 입력한다. 일단 기본적인 내용만 적당하게 입력하고 나중에 수정할 사항이 생기면 그때 다시 변경한다. 위와 같이 설정하면 아래와 같은 형태가 나타난다. 그런데 이 점수Scor.. 더보기
유니티44_게임 제작 과정 13_게임 매니저 GameManager(게임 매니저) 설정 앞 글에서 UI를 완성한 후 시작버튼으로 게임을 시작할 수 있도록 해야 한다. 이 설정을 위해 GameManager 오브젝트를 만들고 GameManager스크립트를 작성해서 붙인다. Create Empty로 빈 게임오브젝트를 만들고 이름을 GameManager로 바꾼다. GameManager스크립트 만들기 새 스크립트를 만들고 GameManager로 이름을 바꾸면 위와 같이 자동으로 톱니모양으로 바뀐다. GameManager(게임관리자)는 대부분 프로젝트에서 기본적으로 만드는 스크립트이므로 톱니모양의 기본 아이콘이 적용된다. 스크립트를 더블클릭하여 편집한다. GameManager에서 관리할 오브젝트들의 변수를 public으로 선언해 준다. 스크립트를 저장한 후 G.. 더보기
유니티43_게임 제작 과정 12_시작화면 만들기 유니티를 2019.4.23.f1 LTS 버전으로 업그레이드 함 게임 시작 화면 만들기 게임을 시작하면 첫 화면이 나타난다. 게임 뿐만아니라 일반적인 앱이나 프로그램도 실행하면 첫 화면을 볼 수 있다. 이것을 User Interface (UI)라고 부른다. user(유저)는 사용자라는 뜻이고, Interface는 '접속하다, 둘 사이의 접점'이라는 뜻이다. inter는 '~사이에, ~중간에'라는 뜻이고 face는 '얼굴'이므로 사람과 게임 중간에 얼굴을 마주하게 되는 부분을 나타낸다. 즉, 사용자와 프로그램 사이의 의사소통을 위한 매개체라고 할 수 있다. 현재 만들고 있는 게임에도 첫화면인 UI 화면을 만들고 여기에 게임을 시작할 수 있는 Start(시작) 버튼을 만들어 본다. 이미지(Image) 넣기 U.. 더보기