Unity 기초_0 (script, 변수, 배열)

김펭귄·2024년 11월 13일

Unity 기초

목록 보기
2/9

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; 코드 작성했을 경우
    1. 기존 저장되어있던 Sogguem 메모리를 수정하는 것이 아니라 새로운 문자열 "Soggeum velog"를 heap 메모리에 새로이 할당
    2. 참조변수 name이 새롭게 할당된 메모리 주소값을 참조(저장)
    3. 기존 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];	// 0으로 초기화
my_array[0] = 1;
my_array[1] = 4;
my_array[2] = 9;
my_array[3] = 16;
my_array[4] = 25;

// Collection initializer 사용
int[] Array1 = new int[5] { 1, 4, 9, 16, 25 };

// 또 다른 Collection initializer 사용법
int[] Array2 = { 1, 4, 9, 15, 25 };
  • Collection initializer 사용하는 것이 보기 좋고, 작성하기 쉽고, 오타 안 나고, 에러 찾기도 쉬우니 좋다

배열 초기화

  • C#는 배열을 만들 때 C와 달리 쓰레기 값이 들어가있지 않다. 0으로 초기화하여 참조 시 쓰레기 값을 참조하지 않게 함.

다음 내용

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

References

profile
반갑습니다

0개의 댓글