본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티와 C# 개념 정리_Concept Summary

유니티와 C# 개념 정리_007_Unity의 변수 타입

유니티에서만 사용하는 변수 타입들이 있다.

이전 글 '타입과 초기화'에서 언급한 클래스 타입들이다.

 

유니티 사용에 도움을 주기 위해 이미 만들어진 수 많은 클래스들이 있다.

그 클래스들을 변수 타입으로 사용해서 다양한 기능을 구현할 수 있다.

 

클래스 타입을 만든다는 것은 클래스의 개체를 만든다는 뜻이다.

이전 글(C# 특징과 기본 구조)에서 클래스로 부터 new 키워드로 클래스의 오브젝트(개체)를 만들 수 있고,

이 개체로 부터 클래스 타입 변수를 사용해서 인스턴스(instance, 예, 복제)가 생성할 수 있다고 했다.

인스턴스를 통해서 클래스 안에 있는 변수와 함수를 활용할 수 있다.

 

유니티에서 C# 스크립트를 만들면 제일 위에 using UnityEngine; 코드가 있다.

이것은 UnityEngine(유니티엔진)을 사용한다는 선언이다.

유니티엔진 안에는 프로젝트를 제작에 필요한 많은 클래스들이 이미 작성되어있다.

(엔진의 역할이 이런 것이다. 사용자가 필요한 기능을 스크립트로 작성하지 않아도 되도록 미리 준비해 두었다.)

유니티엔진을 사용하겠다고 선언하면 그 클래스들을 모두 사용할 수 있는 것이다.

스크립트에서 사용하려면 기본 타입(int, float 등)과 마찬가지로 그냥 타입(Type)으로 선언하면 된다.

 

유니티에서는 new 키워드를 사용하지 않고 개체(오브젝트)를 만들 수 있다.

Hierarchy(하이어라키)라는 곳에 개체를 만들어서 관리하고, 만들어진 개체들은 Scene(씬, 장면)에 나타난다.

C#의 object(오브젝트, 개체)와 구별하기 위해 GameObject(게임오브젝트)라는 표현을 사용한다. 

즉, GameObject 역시 GameObject 클래스에 의해 만들어진 GameObject 타입의 개체이다.

 

중요한 타입(Type)들

 

GameObject 타입

 

GameObject는 유니티 Scene(씬)에 만들어지는 모든 개체의 기본 클래스이다.

UnityEngine(유니티엔진)에 정의되어 있다.

유니티 프로젝트를 시작하면 Hierarchy(하이어라키, 계층구조) 탭에 기본으로 만들어지는 GameObject를 2개를 볼 수 있다.

MainCamera(메인카메라) 게임오브젝트와 Directional Light(방향 불빛) 게임오브젝트이다.

필요한 게임오브젝트는 + 기호를 클릭해서 추가할 수 있다.

유니티에서는 이 게임오브젝트에 Component(컴퍼넌트, 구성요소)들을 연결해서 원하는 기능을 구현한다.

 

메인카메라 개체를 선택하면 Inspector(인스펙터, 검사관)탭에 Transform, Camera, Audio Listener 컴퍼넌트가 연결되어 있는 것을 볼 수 있다. 

 

게임오브젝트나 컴퍼넌트는 모두 클래스 또는 struct(스트락트, 구조체)로 부터 만들어진 것이다.

게임오브젝트 타입의 변수를 선언하려면 다음과 같이 한다.

 

GameObject myObject ;    //게임오브젝트 타입의 변수(myObject) 정의

 

Transform 타입

Transform(트랜스폼) 은 모든 게임오브젝트에 기본으로 장착되는 컴퍼넌트이다.

Position(위치), Rotate(회전), Scale(크기)와 같은 기본 정보를 처리한다.

 

Transform myTransform ;    //트랜스폼 타입의 변수(myTransform) 정의

 

Vector3(벡터쓰리) 타입

이 타입은 개체의 위치를 3차원(x, y, z)으로 새로 지정할 때 사용한다.

3개 모두 float타입이다.

 

유니티에서 개체의 위치는 Transform 컴퍼넌트의 Position의 각 차원 값으로 결정된다.

 

검색창에 'unity Vector3'을 입력하고 엔터키를 치면 '유니티 문서'로 이동할 수 있다.

링크를 클릭해서 들어가면 아래와 같은 구조로 만들어져 있다.

 

위 내용은 설명서 이지만 본래는 클래스 스크립트로 작성되어 있다.

위에서 보듯이 Constructor(구조체)로 만들어져 있는 Vector3 을 이용하면 타입을 만들 수 있다.

링크를 눌러보면 사용법 예시와 설명을 볼 수 있다.

 

예를 들어 Vector3 타입으로 position(위치)라는 변수를 선언하고 새 위치를 지정하고 싶으면 아래와 같이 작성한다.

 

Vector3 position = new Vector3 (2.0f, 3.0f, 4.0f) ;

 

또한 위 그림에서 보듯이 Vector3 클래스 안에는 Property(프라퍼티; 속성)라고 부르는 변수들과 메서드(Methods)들도 많이 있다. 이것을 이용하여 값을 수정하거나 필요한 값을 생성할 수 있다.

 

예를 들어

위 코드처럼 Vector3 클래스의 Properties에 있는 x를 사용하면 9번 줄처럼 변수 position에 저장되어 있는 x값(2.0f)을 확인하거나 11번 줄처럼 다른 값을 넣을 수도 있다. 위의 x와 같이 어떤 타입의 변수에 직접 연결할 수 있는 변수를 Instance(인스턴스) 변수라고 부른다. 

 

 

또한  Static Properties에 있는 Vector3.one 을 사용하면 개체의 위치를 미리 정해져 있는 Vector3(1, 1, 1)의 위치로 바꿀 수 있다. Static(스태틱, 고정된)에 대해서는 다음에 정리하기로 하고 일단 static '고정'되어 있는 것이어서 다른 것으로 바꿀 수는 없고, 호출해서 사용할 수만 있다라고 기억하면 된다.

static이 붙지 않은 변수와 메서드는 이전 글 '타입과 초기화'에서 설명한 Instance로 작동한다고 생각하면 된다.

 

그외에도 2D 이미지를 나타내 주는 SpriteRenderer(스프라이트 렌더러),

3D 모델을 보여주는 MeshFilter(메시필터) 와 MeshRenderer(메시렌더러),

충돌에 사용하는 Collider(콜라이더),

물리적 작용에 사용하는 Rigidbody(리지드바디) 등, 유니티 제작에 필수적인 수 많은 클래스들이 있으며,

이런 클래스들을 게임오브젝트에 컴퍼넌트(구성요소)로 장착하고 코드에서 타입으로 사용할 수 있다.

 

끝.

Wraven...