본문 바로가기

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

유니티34_C#_19_String 문자열 String 클래스 문자열은 문자가 모여있는 형태를 말한다. 한 개의 문자(character) 데이터를 저장할 때 사용하는 타입(type)이 char 인 것처럼 문자열(string) 데이터를 저장할 때는 string 타입을 사용한다. 그리고 string 타입은 값이 저장되어 있는 주소(address)를 참조하는 reference type(참조 타입)이라는 점이 중요하다. 반면 char 타입은 값을 직접 저장하는 value type이다. string 사용에 필요한 메서드와 속성(프라퍼티)는 System.String 이라는 class 안에 만들어져 있다. 반면 char 는 System.Char 라는 struct 형태로 만들어져 있다. C#의 String클래스 안에는 다양한 속성과 메서드가 있다. 자주 사용하.. 더보기
유니티33_게임 제작 과정 11_적 랜덤 위치 소환 이번에는 게임의 완성도를 높일 수 있도록 코드를 수정해본다. 화면 크기 조정 Game 뷰의 크기를 바꿀 수 있다. 새로 만들고 싶으면 +(Add)버튼을 클릭한다. Label(레이블) 이름을 적고 Type(타입)은 Aspect Ratio(영상 비율)로 정한다. Width(넓이)와 Height(높이)를 정하고 OK버튼을 클릭한다. 위와 같은 형태가 된다. Enemy 랜덤 위치에 소환 지금까지 적의 위치는 고정된 위치였지만 이것을 랜덤 위치에 나타나게 코드를 수정한다. PrefabManager.cs 스크립트를 편집해야 한다. class PrefabManager 안에 struct(구조체)를 만든다. struct(구조체)는 앞에서 item 랜덤 생성에서 좌표값을 가진 객체를 생성하기 위해 만들었던 방법이다. st.. 더보기
유니티32_게임 제작 과정 10_에셋스토어 Sprite(스프라이트) 이미지 수정 지금까지 게임을 실행하기 위한 유니티와 코드 작업을 어느 정도 완성했다. 이제 스프라이트를 실제 게임과 비슷한 이미지로 교체한다. 유니티 Asset Store(에셋스토어) 유니티에는 게임 완성에 필요한 배경 이미지, 캐릭터 이미지 등의 Asset(자산)을 무료, 유료로 받을 수 있는 '에셋 스토어'가 있다. 또한 에셋을 상업적으로 이용할 때는 라이센스를 꼭 확인한 후 활용해야 한다. 유니티 에셋 스토어 주소 : hppts://assetstore.unity.com 유니티에서 Asset Store탭을 클릭해서 바로 접속할 수도 있다. 여기서는 무료로 제공하는 스프라이트를 사용해보자. 검색창에 '2d sprite pack'을 입력한다. 바로 아래에 FREE(무료)로 이용할.. 더보기
유니티31_게임 제작 과정 09_아이템 기능 추가 Interface(인터페이스)를 이용한 아이템 기능 추가 앞 글에서 아이템은 4초 후에 사라지도록 코드를 작성했다. 이번에는 아이템이 사라지기 전에 투명도(Transparency)를 낮춰서 흐릿하게 하는 효과를 추가한다. 이 효과는 아이템 2개에 모두 적용해야 하므로 각 아이템 스크립트에서 '다중 상속'으로 구현할 수 있도록 Interface를 사용한다. Item스크립트에 ITransparency라는 인터페이스를 만들고 그 안에 추상 메서드 GetOpaque( )도 정의한다. *opaque : 불투명한 *get opaque : 불투명해지다 인터페이스의 멤버는 추상화(Abstraction)만 가능하므로 각 아이템 스크립트에서 정의한 메서드를 구현해야 한다. 클래스 Coin , SpeedUp에 인터페이스의 .. 더보기
유니티30_게임 제작 과정 08_아이템 관리자 Item Manager(아이템 관리자) Item도 게임 중에 화면에 나타나게 해야 하므로 프리팹(Prefab)으로 만들어야 한다. Bullet과 Enemy를 프리팹으로 만들고 관리 스크립트를 작성한 것과 같은 방법으로 한다. Hierarchy창에서 SpeedUp과 Coin을 Prefabs폴더로 하나씩 끌어서 놓아 프리팹을 만든다. Item관리 스크립트 만들기 Hierarchy창에 빈 게임오브젝트를 만들고 이름을 ItemManager로 바꾼다. 이 게임오브젝트에 추가할 컴퍼넌트(스크립트)를 작성한다. Scripts폴더에 새 스크립트 파일을 만든다. 이름을 ItemManager로 바꾼 후 더블클릭하여 코드 편집기를 실행한다. Enemy를 만들었던 PrefabManager 스크립트에서와 마찬가지로 ItemMa.. 더보기
유니티29_게임 제작 과정 07_아이템 만들기 지금까지 살펴본 C# 구문을 이용해서 슈팅 게임을 계속 만들어 본다. Item 만들기 게임에서 Item(아이템)은 다양한 역할이 있다. 이 게임에서는 아이템을 먹으면(충돌하면) Ship의 속도를 높이는 것과 coin(동전) 2가지 아이템을 만든다. 이 2가지 아이템은 공통으로 가지는 행위(메서드)가 있다. 아이템을 작동하다 아이템을 몇 초 후 사라지게 하다. 그러므로 이 추상 행위를 가진 추상클래스를 만들고 행위는 해당 아이템 스크립트에서 아이템에 맞게 구현하면 된다. 추상클래스 만들기 유니티에서 Practice Shooting Game 프로젝트를 불러온다. Assets의 Scripts 폴더에 Item.cs 스크립트를 만든다. 스크립트를 아래와 같이 입력한다. 7~8번줄에서 추상메서드를 정의하면 클래스는.. 더보기
유니티28_C#18_Enum 타입 Enumeration(셈, 열거) Type Enumeration 타입은 단어에 있는 num에서 알 수 있듯이 숫자를 매기는 value(값)타입이다. 흔히 'enum(이넘)타입' 또는 '열거형'이라고도 한다. enum타입을 정의하면 enum 멤버의 이름에 보이지 않는 숫자(정수)가 메겨진다. 이 정수는 변하지 않고 읽을 수만 있는 상수(constant)로 정해진다. 12번줄에서 Season(계절)이라는 이름으로 enum을 정의한다. 14~17번줄에서 enum의 멤버는 쉼표( , )로 구분하여 열거한다. 7번줄에서 enum 멤버에 접근하려면 enum명에 점( . )으로 연결하여 멤버명을 붙인다. 8번줄에서 enum멤버에 메겨진 숫자는 int 타입으로 명시적 타입 변환하여 확인할 수 있다. 결과는 다음과 같이.. 더보기
유니티27_C#17_인덱서(Indexer) 인덱서(Indexer) 인덱서의 특징은 다음과 같다. 배열(array)의 특징을 가진 프라퍼티(property)의 일종이다. 프라퍼티 처럼 클래스(class), 구조체(struct), 인터페이스(interface)의 멤버에 접근할 수 있게 한다. 프라퍼티가 필드에 접근한다면, Indexer는 색인(index 인덱스)를 이용해서 배열에 접근한다. 클래스 외부에서는 인스턴스(객체)를 배열처럼 사용할 수 있다. Indexer를 정의하는 형식은 다음과 같다. Indexer는 this 키워드와 배열(array) 선언할 때 붙이는 대괄호[ ] 를 사용하여 선언한다. 접근자 get , set 사용은 프라퍼티와 같고 int타입의 매개변수(index)를 통해서 접근한다는 것이 다르다. Indexer를 사용한 예를 만들어.. 더보기