유니티 기초

[Unity 기초] 2. 자료형에 대하여

갓것걋 2024. 3. 1. 18:04
※참고사항※
해당 포스트는 본업 개발자가 정성껏 포스팅한 포스트가 아닙니다!
평범한 고등학생이 유니티를 배우면서 적어나가는 포스트라는 점을 이해해 주십사 하고 청하는 바입니다.
(잘못된 정보는 댓글로 감사히 받겠습니다!)

목차

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에 좀 더 가깝게 회전