본문 바로가기

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

유니티26_C#16_네임스페이스(NameSpace) namespace 네임스페이스는 클래스들을 그룹별로 묶어서 더 체계적으로 관리하기 위한 목적으로 만들어졌다. 네임스페이스를 정의할 때는 키워드 namespace를 사용한다. 큰 프로젝트나 여러 명이 협업하여 만드는 경우 클래스 이름이 같아서 충돌이 생길 수 있다. 이런 경우 네임스페이스가 다르면 같은 이름을 가진 클래스를 만들어도 충돌을 방지할 수 있다. 충돌이 생길 때 마다 클래스명이 같은 지 일일이 비교하며 이름을 수정하는 것 보다 네임스페이스를 만들어서 관리하는 것이 훨씬 체계적이고 효율적이다. 위 코드에서 클래스들은 각각 Player.Contrlller1 , Enemy.Controller1 등으로 참조하게 된다. 네임스페이스의 단적인 예가 지금까지 스크립트를 작성할 때 제일 처음에 사용한 Unit.. 더보기
유니티25_C#15_구조체(Struct) 구조체 (Structure , Struct) Struct(구조체)는 Class(클래스)와 함께 객체를 생성하는 기본적인 두가지 틀 중의 하나이다. 구조체 또는 클래스를 정의하면 구조체명 또는 클래스명이 타입(type)명이 된다. 이 타입으로 인스턴스(객체)를 만들 수 있다. 구조체와 클래스의 가장 두드러진 차이점은 다음과 같다. 클래스는 참조 타입(reference type)이다. 구조체는 값 타입(value type)이다. 참조 타입은 객체가 저장된 변수에 메모리의 참조(저장되어 있는 주소)만 가지는 구조이다. 값 타입은 메모리에 실제 데이터를 저장하는 구조이다. 구조체에서는 일반적으로 struct가 만들어지면 그 이후에 변경되지 않는 데이터를 가지는 소규모 데이터 구조를 만들 때 사용한다. 구조체 만.. 더보기
유니티24_C#14_인터페이스(Interface) 인터페이스(Interface) 클래스는 하나의 부모클래스만 상속할 수 있다. 즉, 여러 부모클래스로 부터 상속받을 수 있는 '다중 상속'을 할 수 없다. 인터페이스는 클래스가 다중상속을 할 수 없는 단점을 보완하기 위해 만들어진 개념이다. 즉, 클래스는 인터페이스를 여러 개 상속받을 수 있다. 인터페이스의 구조는 추상클래스와 비슷한데 공통점은 추상화를 사용한다는 것이다. 인터페이스는 다음과 같이 만든다. 인터페이스 선언은 interface 라는 키워드를 사용한다. 인터페이스 이름은 클래스명과 구별할 수 있도록 이름 앞에 대문자 I (아이)를 붙여 만든다. 메서드, 프라퍼티(property 속성), 인덱서(indexer) 등을 멤버로 가질 수 있다. 멤버는 모두 추상화만 가능하다. 즉, 멤버 선언만 할 수.. 더보기
유니티23_C#13_추상 클래스(Abstract class) Abstraction(추상화 개념) 앞에서 추상화(Abstraction)라는 개념은 객체지향언어(OOP)의 출발점이자 기본 원칙이라고 했다. 피카소 같은 추상 화가의 추상화를 보면 다음과 같은 느낌을 가진다. 자신의 생각 또는 상상을 그림으로 표현했다. 자세하게 묘사하는 것이 아니라 기본 형태만 보여 준다. 코딩에서 사용하는 추상화(abstraction)도 미술의 추상화(abstract art)와 비슷한 형태를 가진다. 예를 들면 객체를 만드는 추상적인 과정이나 사용자에게 기본적인 내용만 보여주고 숨겨야 할 데이터는 나타내지 않는 것들이 그렇다. 아마 객체 지향 언어의 근간이 되는 개념에 abstraction(추상화)라는 이름을 붙인 것도 '추상'이라는 단어가 가지는 의미와 유사해서 붙였을 것이다. cl.. 더보기
유니티22_게임 제작 과정 06_Prefab 프리팹 만들기 여러 적 만들기 앞에서 적(Enemy)는 게임오브젝트로 객체를 만들었다. 그런데 만들어야 하는 적이 많다면 게임오브젝트로 일일이 만들기 번거롭다. 이런 경우에 프리팹(Prefab)을 이용하는 것이 올바른 방법이다. 또한 만든 프리팹에 적용할 스크립트도 이미 만들어 놓은 게임오브젝트의 스크립트를 상속(Inheritance)받아서 구현하는 것이 올바른 방법이며 이것이 객체 지향 언어인 C#을 제대로 사용하는 방법이다. 여러 적을 만들면서 클래스의 핵심 기능인 상속, 다형성, 캡슐화가 어떻게 적용되는 지 확인해 본다. 여기서는 적 2개를 다음과 같이 만든다. Enemy1프리팹 , Enemy2 프리팹을 만든다. 각각 Enemy1, Enemy2 스크립트를 만들어 연결한다. 공통인 필드와 메서드는 Enemy스크립트.. 더보기
유니티21_게임 제작 과정 05_충돌 설정 적 소멸 앞 글에 이어서 Enemy가 총알을 맞고 health값이 0 이 되면 소멸(죽음)하도록 만들어 본다. 17번~20번줄 적이 데미지(손상)을 입으면 health값이 감소한 후 if 조건문을 만들어서 0 이하가 될 때 실행할 코드를 만든다. health값이 0보다 작거나 같으면 Die( )메서드를 실행하도록 한다. *Die : 죽다 Die( )메서드가 없기 때문에 30번줄에 메서드를 만든다. 30번~33번줄 반환값이 없는 void 타입의 Die메서드가 호출되면 앞에서 총알을 없앨 때 사용했던 Destroy( ) 메서드를 사용한다. 여기서 gameObject는 현재 스크립트의 클래스의 Enemy 객체가 된다. this는 이전 글 '상속'에서 설명했다. this를 생략해도 된다. 스크립트를 저장한 후 .. 더보기
유니티20_게임 제작 과정 04_적 만들기 지금까지 익힌 내용으로 게임 제작에 적용해 본다. 유니티 허브를 실행한 후 게임 제작 과정1~3까지 만들었던 Project Practice Shooting 프로젝트를 실행한다. 적을 만들기 전에 우선 총알(Bullet)색을 바꾸어보자. 적 색깔을 빨간색으로 바꾸기 위해서다. 여기서는 노란색으로 바꿀 것이다. Prefabs폴더에 만든 Bullet을 선택한다. Inspector창에서 Sprite Renderer의 Color 를 선택한다. 원하는 색 선택한다. 정확한 색을 선택하기 위해서는 RGB 숫자를 입력한다. A는 투명도를 조절하는 부분이다. 게임 실행 후 Bullet을 발사했을 때 화면에 나타나는 것은 Prefabs 폴더에 Prefab(프리팹)과 호출 메서드가 담당하기 때문에 Bullet 게임오브젝트는.. 더보기
유니티19_C#_12_다형성 이번에는 객체 지향 언어에서 클래스라는 구조를 지지하는 다형성(Polymorphism)에 대해 알아본다. poly는 many(많은)이라는 뜻이고, morph는 form, shape(모양)이라는 뜻이다. 그래서 다형성은 '많은 모양을 가짐'이라는 뜻이다. 생물학에서 다형성은 유전자의 변이를 나타내는 것과 같이 코딩에서 다형성은 클래스의 메서드가 형태는 같지만 다른 역할로 변이할 수 있다는 것을 말한다. 간단한 예로 앞 글 '상속'에서 보았듯이 base클래스(부모)에서 파생된 derived클래스(자식)가 여러 개 또는 다양한 형태로 만들어질 수 있다는 것이 바로 다형성이다. 메서드 오버라이드(override) override는 '위에 + 올라타다'가 합쳐진 글자인데 기존 상태를 짓밟고 올라타서 다른 것으로 .. 더보기