※참고사항※
해당 포스트는 본업 개발자가 정성껏 포스팅한 포스트가 아닙니다!
평범한 고등학생이 유니티를 배우면서 적어나가는 포스트라는 점을 이해해 주십사 하고 청하는 바입니다.
(잘못된 정보는 댓글로 감사히 받겠습니다!)
목차
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에 좀 더 가깝게 회전 |
'유니티 기초' 카테고리의 다른 글
[Unity 기초] 1. 다운로드 및 환경설정에 대하여 (2) | 2024.03.01 |
---|