[Unity 기초] 2. 자료형에 대하여
※참고사항※
해당 포스트는 본업 개발자가 정성껏 포스팅한 포스트가 아닙니다!
평범한 고등학생이 유니티를 배우면서 적어나가는 포스트라는 점을 이해해 주십사 하고 청하는 바입니다.
(잘못된 정보는 댓글로 감사히 받겠습니다!)
목차
1. 자료형이란?
1-1. 많은 종류의 자료형이 필요한 이유
1-2. 변수 선언 규칙
2. 기본적인 자료형
2-1. 자료형의 종류
2-2. 형변환 (캐스팅)
3. 유니티의 자료형
3-1. 자료형의 종류 및 개요
3-2. 각 자료형들의 부연설명
1. 자료형이란?
먼저 자료형은 변수가 저장하는 데이터 형식이라는 뜻을 가지고 있습니다.
(변수는 값이 변하는 수를 칭하는 뜻입니다.)
1-1. 많은 종류의 자료형이 필요한 이유
이건 실제로 코딩을 해보면 와닿는 내용이긴 한데요.
1번째
자료형마다 메모리 공간의 크기가 다릅니다.
"엥? 메모리 공간이 다르면 뭔 일이 생기남?" (제가 그랬습니다.)
하는 사람들도 있을 텐데요.
일단 변수를 선언했다고 칩시다. (어떤 자료형인지는 나중에 설명하겠습니다!)
// 변수 선언
// 자료형 변수명 = 값;
int number = 6;
float num = 8.2f;
이렇게 'int'라는 자료형의 변수가 하나 선언 되었습니다.
이러면 일단 컴퓨터는 'int'라는 자료형의 메모리 공간의 크기 만큼 공간을 주고 그 곳에서 값을 처리하도록 합니다.
글로는 잘 이해가 안 되시죠?
그림을 보겠습니다. (그림판으로 그려서 양해 부탁드립니다 ㅎ)
한 마디로 변수의 값이 저 범위를 벗어나게 된다면 오류가 발생하게 되는 것입니다.
그래서 저 범위를 벗어난 값을 변수에 할당하려면 다른 범위를 가진 자료형을 사용하는 것이죠!
2번째
자료형마다 서식 문자와 데이터 표현 범위가 다릅니다.
제가 생각하기엔 이 부분이 가장 큰 이유인 것 같은데요.
위에서 나온 "int"와 "float" 그리고 나오진 않았던 "string" 자료형을 가지고 설명을 해보겠습니다.
일단 3가지의 자료형의 변수를 선언해보겠습니다.
int number = 6;
float num = 8.2f;
string str = "안녕하세요";
보자마자 값들이 뭔가 다르죠?
눈치가 빠른 사람들은 눈치를 채셨을텐데요.
- int는 정수를 취급하고요.
- float는 실수를 취급합니다. (대충 소수점이 있는 숫자라고 생각하시면 편합니다!)
- 또한 string은 문자열을 취급합니다.
- 물론 값을 할당 하는 방법도 다릅니다. (int는 숫자만 float는 뒤에 f, string은 " "사용 등등)
취급하는 문자 자체가 다르기 때문에 여러 자료형을 사용하는 것입니다.
(데이터 표현 범위는 아래에서 서술하겠습니다!)
1-2. 변수 선언 규칙
이건 짧으니 대충 짚고 가겠습니다.
- 모든 C# 변수의 이름은 대소문자를 구별(Case-Sensitive)함
- 변수명은 영문과 숫자를 이용해 작성해야 하고, 시작은 영문으로 해야함
- 변수명에 공백이나 언더바(_)를 제외한 특수 문자 사용 불가
- 변수명에 유니티 C#에서 사용되는 키워드는 사용 불가하고, 영역 내에서 변수 이름을 중복 선언할 수 없음
이 정도입니다.
2. 기본적인 자료형
2-1. 자료형의 종류
정수형
자료형 | 의미 | 값의 범위 |
sbyte | 부호가 있는 가장 작은 정수 | -128 ~ 127 |
byte | 부호가 없는 가장 작은 정수 | 0 ~ 255 (128 + 127) |
short | 부호가 있는 작은 정수 | -32768 ~ 32767 |
ushort | 부호가 없는 작은 정수 | 0 ~ 65535 |
int | 부호가 있는 정수 | -2147483648 ~ 2147483647 |
uint | 부호가 없는 정수 | 0 ~ 4294967295 |
long | 부호가 있는 큰 정수 | -9223372036854775808 ~ 9223372036854775807 |
unlog | 부호가 없는 큰 정수 | 0 ~ 18446744073709551615 |
char | 유니코드 문자 (문자 1개) | 0 ~ 4294967295 |
실수형 (부동소수점)
자료형 | 의미 | 값의 범위 |
float | 부동 소수점 실수 | ±1.5 × 10-45 ~ ±3.4 × 1038 |
double | float보다 2배 정밀한 실수 | ±5.0 × 10-324 ~ ±1.7 × 10308 |
논리형
자료형 | 의미 | 값의 범위 |
bool | 논리 표현 | true, false |
문자형
자료형 | 의미 | 값의 범위 |
string | 문자열 정보를 받는 자료 타입 | 제한 X |
상수형 (모르는 내용은 일단 무시하셔도 됩니다.)
비교 | const | readonly |
변수 사용 시기 | 컴파일 | 런타임 |
Static | static | static은 아니지만 static으로 선언 가능 |
메모리 위치 | 힙 | 스택 |
장점 | 접근이 빠름 | 생성시 선언만하고 생성자에서 초기화해서 유연하게 사용 가능 |
단점 | 값 수정시 | |
비고 | const보다 사용 시 이점이 많음 |
2-2. 형변환 (캐스팅)
- 문자열의 형변환
- 단점 : Parse 함수는 파라미터로 "문자열만" 줄 수 있습니다.
자료형 | 사용 함수 |
정수 | int.Parse(”문자열”) |
실수 | double.Parse(”문자열”) |
- 그 외의 형변환
- 위에 있는 Parse 함수의 단점으로 인해 Convert 클래스를 사용합니다.
- 사용법은 Convert.ToXXX(파라미터)의 형태로 사용합니다.
3. 유니티의 자료형
3-1. 자료형의 종류 및 개요
위에서 보았던 자료형은 모두 C#의 자료형이였습니다.
이제부턴 실전에서 사용하는 유니티의 자료형을 살펴보겠습니다.
(전부 다 살펴보는 것이 아닌 점은 양해 부탁드립니다.)
자료형 | 의미 | 비고 |
GameObject | 게임 오브젝트 객체들 | 씬 내에 있는 모든 요소를 나타내는 데 사용함 |
Text | 사용자에게 상호작용이 되지 않는 텍스트 객체들 | using UnityEngine.UI; 필요! |
Image | 사용자에게 상호작용이 되지 않는 이미지 객체들 | using UnityEngine.UI; 필요! |
Sprite | 2D 그래픽 오브젝트들 | using UnityEngine.UI; 필요! |
Button | 버튼 컨트롤들 | using UnityEngine.UI; 필요! |
Slider | 값의 범위 내에서 1개의 값을 선택할 수 있는 컨트롤들 | using UnityEngine.UI; 필요! |
InputField | 사용자가 텍스트 입력을 할 수 있도록 하는 컨트롤들을 의미함 | using UnityEngine.UI; 필요! |
Vector2, Vector3 | x, y, (z)축의 좌표들을 의미함 | Z축의 유무의 차이 |
3-2. 각 자료형들의 부연설명 (없는 설명도 있을 수 있습니다!)
지금부턴 이해하지 못하는 내용이 많을 수 있습니다.
(유니티로 게임을 만들다보면 자연스럽게 이해하실 수 있을테니 걱정하지 않으셔도 됩니다!)
(보면 좋은 정보이긴 하지만 굳이 모두 다 외우겠어! 하면서 보시진 않으셔도 괜찮습니다!)
GameObject
변수
종류 | 설명 | 리턴 |
activeSelf | 활성화 되어 있는지 여부를 정의함 | Boolean |
layer | GameObject의 레이어를 가져옴 | Integer |
tag | GameObject의 태그 | string |
transform | GameObject에 연결된 Transform 속성 | Transform |
Public 함수
종류 | 설명 | 리턴 |
GetComponent<type> | 파라미터로 있는 type의 컴포넌트를 가져옴 | 임의로 설정한 type |
SetActive(bool) | GameObject를 활성화/비활성화 함 | GameObject 활성화/비활성화 |
정적 함수
종류 | 설명 | 리턴 |
Find(string) | 파라미터로 있는 오브젝트명과 같은 이름의 GameObject를 반환함 | GameObject |
FindGameObjectsWithTag(string) | 파라미터로 있는 태그명이 붙은 GameObject의 배열을 반환함 | GameObject[] |
상속된 멤버
변수
종류 | 설명 |
name | GameObject의 이름 |
정적 함수
종류 | 설명 | 리턴 |
Instantiate(GameObject) | GameObject의 복사본을 생성함 | GameObject 생성 |
Destroy( GameObject ) | GameObject를 제거함 | GameObject 파괴 |
DontDestroyOnLoad(GameObject ) | 새로운 씬을 불러올 때 GameObject를 제거하지 않게 함 | GameObject 파괴 X |
FindObjectsOfType<type> | 파라미터로 있는 type과 일치하는 모든 GameObject를 반환하지만 없으면 null 값을 리턴함 | GameObject[] OR null |
GameObject와 gameObject의 차이점
비교 | 특성 |
gameObject | 해당 컴포넌트에 할당된 자기 자신임 (객체) |
GameObject | GameObject는 클래스임 (자기 자신이 아닐 수 있음) |
Text
속성
속성 | 설명 |
Text | 컨트롤에 의해 표시되는 텍스트 |
Font | 텍스트 표시에 사용되는 폰트 |
Font Style | 텍스트에 적용되는 스타일 Normal, Bold, Italic, Bold And Italic 옵션이 있음 |
Font Size | 표시된 텍스트의 크기 |
Line Spacing | 텍스트 행 간격 |
Rich Text | 텍스트 마크업 요소를 리치 텍스트 스타일링으로 간주할지 여부 |
Alignment | 텍스트의 수평 및 수직 정렬 |
Horizontal Overflow | 텍스트가 너무 넓어 사각형에 들어가지 않는 경우 사용하는 방법 Wrap 과 Overflow 옵션이 있음 |
Vertical Overflow | 래핑된 텍스트가 너무 길어 사각형에 들어가지 않는 경우 사용하는 방법 Truncate 과 Overflow 옵션이 있음 |
Color | 텍스트 렌더링에 사용되는 컬러 |
텍스트와 변수 연동
Text TEST;
int test_int = 10;
float test_float = 2.5f;
// Format 함수를 사용해서 텍스트 내에 변수를 사용할 수 있게 함
TEST.text = string.Format(”텍스트 {0} / {1}”, test_int, test_float);
실행 결과 : TEST.text = 텍스트 10 / 2.5f
Image
속성 | 설명 |
Source Image | 표시할 이미지를 나타내는 텍스처 (단, 스프라이트 형식으로 가져와야함) |
Color | 이미지에 적용할 컬러 |
Set Native Size | 이미지 박스의 크기를 텍스처의 원래 픽셀 크기로 설정함 |
Button
- 버튼(Button)은 사용자 인터페이스 (UI) 요소 중 하나입니다.
- 클릭 이벤트를 처리하거나 특정 동작을 수행하는 역할을 담당하죠!
버튼 컴포넌트
- 버튼은 아래와 같은 Button 컴포넌트를 통해 구현됩니다!
- On Click () 이벤트가 있으며 해당 이벤트에 특정 함수를 연결하면 버튼이 클릭될 때마다 해당 함수가 실행됩니다!

속성
속성 | 설명 | 비고 |
Interactable | 버튼이 상호 작용 가능한지 여부 | Interactable이 비활성화되면 사용자가 해당 버튼을 클릭할 수 없음 |
Transition | 버튼의 상태 변화 방식을 지정함 | Normal(기본), Highlighted(강조), Pressed(누름), Disabled(비활성화) 등이 있음 |
Colors | 각각의 상태에 대한 색상 값을 설정함 | NormalColor(기본 색상), HighlightedColor(강조 색상), PressedColor(누름 색상) 등을 지정할 수 있음 |
Slider
- 슬라이더란 컨트롤을 이동하여 값 범위에서 선택할 수 있는 UI입니다.
- 타이머, 체력, 로딩 게이지 등을 구현할 때 사용할 수 있죠!
속성
속성 | 설명 |
HandlesScrolling | 컨트롤에서 스크롤을 지원하는지 여부 |
Cursor | 마우스가 Slider 위에 있을 때 표시되는 커서를 가져오거나 설정함 |
IsMouseOver | 마우스가 Slider 또는 자식 요소 위에 있는 지 여부 |
IsVisible | Slider가 표시되는 지 여부 |
IsEnabled | Slider를 사용할 수 있는지 여부 |
Name | Slider를 식별하는 이름을 가져오거나 설정 |
Tag | Slider의 태그를 가져옴 |
Parent | Slider의 부모 요소를 가져옴 |
Value | 현재 Slider 값의 크기를 가져오거나 설정함 |
MaxValue | Slider의 최댓값 |
MinValue | Slider의 최솟값 |
이벤트
이벤트 | 설명 |
ValueChanged | Slider의 값이 변경되면 발생함 |
InputField
- 인풋필드는 사용자가 직접 타자로 글자를 칠 수 있도록 해줍니다.
- 닉네임 설정, 나이 입력 등을 구현할 때 사용할 수 있죠!
속성
속성 | 설명 |
Interactable | 입력 필드가 상호작용 가능한지 여부를 정의함 |
Transition | 일반, 강조 표시, 누름 또는 비활성화 시 입력 필드 전환 방법을 설정하는데 사용함 |
Navigation | 컨트롤의 순서를 결정함 |
TextComponent | 사용되는 텍스트 요소에 대한 참조 |
Text | 시작 값으로, 사용자가 입력하기 전 필드에 있는 초기 텍스트를 의미함 |
Character Limit | 입력할 수 있는 글자 수 |
Content Type | 입력 필드에서 입력하는 문자 유형 (아래 들여쓰기 되어 있는 것들로 설정 가능함) |
Standard | 기본 - 모든 문자 입력 가능 |
Autocorrected | 입력이 알 수 없는 단어인지 여부를 결정하고 대체 후보를 제안하며, 사용자가 재정의하지 않는 한 입력된 텍스트를 자동으로 대체함 |
Integer Number | 정수만 입력 가능 |
Decimal Number | 숫자와 소수점 하나만 입력 가능 |
Alphanumeric | 문자와 숫자 모두 입력 가능하지만 기호는 입력 불가능 |
Name | 각 단어의 첫 글자를 자동으로 대문자로 표시함 (사용자가 별도로 소문자로 표시 할 수 있음) |
Email Address | 하나의 @ 기호로 구성된 영숫자 문자열을 입력할 수 있음 |
Password | 입력한 문자를 숨기고 (별표로 치환함) 모든 문자 입력 가능 |
Pin | 입력한 문자를 숨기고(별표로 치환함) 정수만 입력 가능 |
Custom | 라인 유형, 입력 유형, 키보드 유형 및 문자 유효성 검사를 사용자가 정할 수 있게 함 |
Line Type | 텍스트 필드 내에서 테스트의 형식을 정의함 (선 종류) (아래 들여쓰기 되어 있는 것들로 설정 가능함) |
Single Line | 텍스트를 한 줄에만 표시함 |
Multi Line Submit | 텍스트를 여려 줄에 표시함 (필요한 경우에만 새 줄을 사용함) |
Multi Line Newline | 텍스트를 여려 줄에 표시함 (Enter 키를 눌러 새 줄을 사용함) |
Placeholder | 인풋 필드가 비어있음을 알리는 “글자” (닉네임을 입력하세요! 등등) |
Caret Blink Rate | 텍스트 입력을 표시하는 표식이 얼마나 자주 깜빡이는지를 정의함 |
Selection Color | 텍스트 선택 부분의 배경 컬러 (마우스 드래그) |
Hide Mobile Input (iOS only) | 모바일 장치의 화면 키보드에 연결된 기본 입력 필드를 숨김 (iOS 기기에서만 작동함) |
인풋필드의 이벤트
이벤트 | 설명 |
On Value Change | 인풋 필드에 텍스트를 입력했을 때호출되는 Unity 이벤트 |
End Edit | 사용자가 인풋 필드에 입력을 마친 경우 호출되는 Unity 이벤트 |
Vector2, Vector3
속성
속성 | 설명 (2D) | 설명 (3D) |
x | x축 좌표 | x축 좌표 |
y | y축 좌표 | y축 좌표 |
z | 없음 | z축 좌표 |
magnitude | 벡터의 길이 및 크기 (float) | 벡터의 길이 및 크기 (float) |
sqrMagnitude | 벡터의 길이 제곱 (float) | 벡터의 길이 제곱 (float) |
normalized | 방향 벡터 (값 = 1) | 방향 벡터 (값 = 1) |
right | 언제나 Vector2(1, 0)의 값을 가짐 | 언제나 Vector3(1, 0, 0)의 값을 가짐 |
left | 언제나 Vector2(-1, 0)의 값을 가짐 | 언제나 Vector3(-1, 0, 0)의 값을 가짐 |
up | 언제나 Vector2(0, 1)의 값을 가짐 | 언제나 Vector3(0, 1, 0)의 값을 가짐 |
down | 언제나 Vector2(0, -1)의 값을 가짐 | 언제나 Vector3(0, -1, 0)의 값을 가짐 |
forward | 언제나 보는 방향의 값을 가짐 | 언제나 Vector3(0, 0, 1)의 값을 가짐 |
backward | 언제나 보는 방향 * (-1)의 값을 가짐 | 언제나 Vector3(0, 0, -1)의 값을 가짐 |
zero | 언제나 Vector3(0, 0)의 값을 가짐 | 언제나 Vector3(0, 0, 0)의 값을 가짐 |
함수
함수 | 설명 | 파라미터 설명 |
SmoothDamp(Vector3, Vector3, Vector3, float, float, float) | 시간이 지남에 따라 원하는 목표를 향해 벡터를 점차적으로 변경함 | 1. 시작 지점 2. 도착 지점 3. 속도 4. 도착까지 걸리는 시간 5. 최대 속도 (대부분 Mathf.Infinity 사용) 6. 함수를 마지막으로 호출한 이후의 시간 (대부분 Time.deltaTime 사용) |
Distance(Vector3 a, Vector3 b) | a에서 b까지의 거리를 리턴함 (float) | 생략 |
Angle(Vector3 a, Vector3 b) | a와 b사이의 각도를 리턴함 (float) | 생략 |
Set(float x, float y, float z) | Vector3의 x, y, z 속성을 설정함 | 생략 |
SqrMagnitude(Vector3 a, Vector3 b) | a에서 b까지의 거리의 제곱을 리턴함 (float) | 생략 |
MoveForwards(Vector3 a, Vector3 b, float c) | a에서 b까지의 거리를 c의 속도로 이동한 결과를 리턴함 (Vector3) | 생략 |
Lerp(Vector3 a, Vector3 b, float c) | a와 b사이를 t의 비율만큼 보간한 값을 리턴함 (Vector3) | c의 값에 따른 비율 0.5f - 중간 1.0f - b을 그대로 따름 0.0f - a을 그대로 따름 0.2f - a에 좀 더 가깝게 회전 0.8f - b에 좀 더 가깝게 회전 |