Script
- 이전 글 Unity 게임 엔진에서 설명했듯이 게임 내의 object들은 component의 조합으로 이루어짐
- 하지만 이미 만들어져있는 component만으로는 우리가 원하는 기능을 구현하는데에 충분하지 않을 수 있음
- 따라서 Script를 작성하여 원하는 기능을 목적으로 하는 component를 생성
- Unity에서 Script는 C#으로 작성

Script 작성

Debug.Log("message"); 를 통해 console에서 log를 확인 가능
- Start 함수 안에 넣어주고 저장

- 저장한 script파일을 object component로 드래그하여 추가

- Project 화면 중앙 상단부에 있는 play 버튼을 누른 후 console 창에서 log를 확인 가능

C # 기초 문법
변수 선언
void Start()
{
int level = 5;
float hp = 100.0f;
string job = "전사";
bool is_full_health = true;
int money;
money = 100;
}
- C와 비슷하게 변수 선언과 초기화 가능
- string 자료형 : 문자열을 저장할 수 있는 변수 자료형. 쌍따옴표를 통해 사용.
값 형식 vs 참조 형식
- int 변수의 값은 스택 메모리에 바로 저장
- string 변수의 문자열은 heap에 저장. 문자열이 저장된 heap 메모리의 주소를 선언한 문자열 변수의 값으로 스택에 저장
string name = "Sogguem"; 에서 Sogguem은 heap에 저장되고, 변수 이름 name은 참조변수로서 heap에 저장된 문자열의 주소값을 저장.

String
- string 선언 후 문자열을 저장할 때, heap에 동적할당
- UTF-16 인코딩을 사용하기 때문에 각 문자는 2바이트로 저장
- C처럼 문자열 끝에 \0(널 문자)을 붙여주지 않음. 문자열의 길이 정보도 함께 저장하므로 문자열의 끝을 알 수 있다.
- 위의 name 선언 이후
name += velog; 코드 작성했을 경우
- 기존 저장되어있던 Sogguem 메모리를 수정하는 것이 아니라 새로운 문자열 "Soggeum velog"를 heap 메모리에 새로이 할당
- 참조변수 name이 새롭게 할당된 메모리 주소값을 참조(저장)
- 기존 Sogguem 메모리는 Garbage Collector에 의해 메모리가 알아서 해제됨.
- Garbage Collector : 참조가 없는 문자열 객체를 자동으로 메모리에서 해제. C에서와 같은 free 기능이 C#에는 존재하지 않음
- 만약, 기존 Sogguem을 참조하던 다른 참조 변수들의 값은 알아서 update되지 않으므로 해제된 메모리를 참조하지 않도록 주의해야 한다
출력
void Start()
{
Debug.Log("Hello World!");
int level = 5;
float hp = 100.0f;
string job = "전사";
bool is_full_health = true;
int money;
money = 100;
Debug.Log("플레이어의 레벨 : " + level);
Debug.Log("플레이어의 체력 : " + hp);
Debug.Log("플레이어의 직업 : " + job);
Debug.Log("플레이어는 풀피인가? : " + is_full_health);
Debug.Log("플레이어의 소지금 : " + money);
}

- '+' : python처럼 + 연산자를 통해 문자열과 다른 자료형의 변수들을 연결하여 출 가능
Debug.Log($"{변수} message"); 를 이용해 편하게 log 출력 가능
Debug.Log($"플레이어의 레벨 : {level}");
log : 플레이어의 레벨 : 5
배열
int num;로 선언하듯이 int[] nums;로 선언
string[], Datetime[] 처럼 여러 자료형을 배열로 가질 수 있다
new_type이라는 새로운 자료형을 만들었을 때도, new_type[] arrs; 처럼 []만 추가해주어 배열로 사용 가능
배열 선언 및 초기화
int[] my_array = new int[5];
my_array[0] = 1;
my_array[1] = 4;
my_array[2] = 9;
my_array[3] = 16;
my_array[4] = 25;
int[] Array1 = new int[5] { 1, 4, 9, 16, 25 };
int[] Array2 = { 1, 4, 9, 15, 25 };
- Collection initializer 사용하는 것이 보기 좋고, 작성하기 쉽고, 오타 안 나고, 에러 찾기도 쉬우니 좋다
배열 초기화
- C#는 배열을 만들 때 C와 달리 쓰레기 값이 들어가있지 않다. 0으로 초기화하여 참조 시 쓰레기 값을 참조하지 않게 함.

다음 내용
- 문자열, 배열은 객체이다
- 객체 지향 프로그래밍인 C#에서의 객체에 대해 알아보고, 객체로서의 배열에 대해 더 자세히 알아본다
References