[Unity 입문 강좌 - 3] C# 유니티 스크립트(Script)와 변수

유니티 c# 스크립트(Script)

스크립트는 프로그램을 만들기 위해서는 필수 요소입니다. 오브젝트를 움직이거나, 이벤트를 발생하거나, 화면을 전환하는 모든 행동을 스크립트를 통해 제어하기 때문입니다.  스크립트는 컴포넌트(Component) 형태로 오브젝트에 부착되어 사용됩니다. 따라서 어떤 오브젝트를 제어하고 싶다면 그 오브젝트에 컴포넌트를 부착하여 제어해야 합니다. 

 

유니티는 기본적으로 Transform, mesh Renderer, Box Collider 등 내장 컴포넌트를 지원합니다. 하지만 내장 컴포넌트 만으로 오브젝트를 제어하거나 이벤트를 만들 수는 없습니다. 때문에 사용자가 직접 기능을 만들어 줘야합니다.

 

유니티의 오브젝트는 Hierarchy창에서 확인할 수 있으며 오브젝트를 클릭하면 Inspector창에서 오브젝트의 컴포넌트를 확인할 수 있습니다. 여기서 컴포넌트의 값을 수정하여 간편하게 작업할 수 있습니다.

 


스크립트 생성

유니티에서 스크립트를 생성하는 것은 매우 간편합니다. 유니티 Project 창에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택하면 됩니다. 그리고 Script의 이름을 변경해주면 됩니다. 이때 Script의 이름을 처음 확정하고 다시 변경하면 스크립트 안에서 class이름도 변경해줘야 오류가 안 나옵니다. 이 점 주의해주세요.

 

Script를 만들어줬다면 생성된 스크립트 파일을 더블클릭하여 실행시켜줍니다. 그러면 아래 이미지처럼 처음 코드가 작성되어 있습니다.   여기서는 간단하게 필요한 부분만 설명하겠습니다. 차근차근 진도를 나가면서 자세히 설명할 예정입니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Hello : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

using : 이 문서에서는 유니티에서 사용할 수 있는 명령어를 사용하기 위해 작성한다.라고 알아주시면 됩니다. (진도를 나가면서 자세히 이야기할 예정입니다.)

class Hello : MonoBehaviour :  클래스는 진도를 나가면서 자세히 이야기할 예정입니다. 때문에 지금은 스크립트 이름과 클래스 이름이 같아야 하는(밑줄 부분)것만 참고해주시면 됩니다.

start :  스크립트가 불러와지고 한번만 실행되는 코드를 작성하는 부분 

update:  스크립트가 불러와지고 매 프레임마다 동작되는 코드를 작성하는 부분 

start와 update의 차이점은 아래 출력 스크립트 작성 부분에서 어떻게 다른지 확인해볼 예정입니다.


오브젝트에 컴포넌트 부착

다음과 같이 스크립트를 만들었다면 이제 만든 스크립트를 빈 오브젝트에 컴포넌트 형태로 부착해보도록 하겠습니다. 빈 오브젝트를 생성해 줍니다. 빈 오브젝트 생성은 Hierarchy 창에서 오른쪽 버튼을 클릭해주고 3D Object > Create Empty를 선택해주시면 됩니다. 빈 오브젝트를 생성하면 기본 이름은 GameObject입니다. 이름은 여러분들이 원하는 이름으로 설정해주시면 됩니다.

 

그러면 아래 이미지 처럼 빈 오브젝트가 생성된 것을 확인할 수 있습니다. 여기서 우리가 만든 스크립트를 Hierarchy창에 생성된GameObject에 드래그 드롭 해주면 됩니다. 그러면  다음과 같이 GameObject에 만든 스크립트가 컴포넌트 형태로 부착된 것을 확인할 수 있습니다.


출력 스크립트 작성

출력 스크립트를 작성하기 위해 위에서 만들었던 스크립트를 더블 클릭하여 코드 작성 부분으로 들어간다. Console창에 원하는 문자열을 출력하기 위해서 사용하는 함수는 Debug.Log()이다.  (함수는 진도를 나가면서 배우도록합니다. 여기서는  어떤 역할을 해주는 코드를 묶어서 편리하게 사용하도록 만들어준 것이다. 라고 생각하시면 됩니다.)

우리는 여기서 "안녕하세요"는 한번만 출력하고 "반갑습니다"는 매 프레임마다 출력해줄 것입니다.  위에서 알아본 것 처럼 한번 만 실행하기 위해서 "안녕하세요"는 Start() 아래에 입력하고 "반갑습니다"는 매 프레임 출력해주기 위해서 Update() 아래에 입력합니다.  여기서 주의 점은 {}안에 입력해야하는 것이다. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Hello : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("안녕하세요");
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("반갑습니다");
    }
}

 

코드를 저장하고 유니티 에디터 상단 재생 버튼을 눌러 실행해 봅니다.

 

consol창에 아래처럼 원하는 문자열이 출력되는 것을 볼 수 있습니다.

 



유니티에서 스크립트를 생성하고 스크립트에 Debug.Log 작성하고 오브젝트에 부착하는 방법까지 배워봤습니다. 이제 스크립트 작성에 가장 기초가 되는 변수에 알아보도록 하겠습니다.


변수의 사전적 의미

변수의 사전적 의미는 다음과 같다. 컴퓨터 프로그래밍에서 변수(變數, variable) 또는 스칼라(scalar)는 아직 알려지지 않거나 어느 정도까지만 알려져 있는 양이나 정보에 대한 상징적인 이름이다. 컴퓨터 소스 코드에서의 변수 이름은 일반적으로 데이터 저장 위치와 그 안의 내용물과 관련되어 있으며 이러한 것들은 프로그램 실행 도중에 변경될 수 있다. 


쉽게 정의 해보기

이런 사전적 의미를 보고 변수가 무엇인지 알기는 쉽지 않습니다.  때문에 변수를 좀 더 알기 쉽게 정의 해보도록 해보겠습니다. 변수는 아래 이미지에 보이는 것과 같이 메모리에 존재하는 공간이라고 볼 수 있습니다. 그리고 그 공간은 정보를 저장하기 위해서 사용됩니다.  이때 이 공간을 주소 00120B14와 같이 어려운 주소가 아니라 찾기 쉽게 만들기 위해 이름(변수명)을 붙여서 사용합니다.

 


비유를 통해 알아보기

이렇게 쉽게 정의를 해도 무엇인지 알기 어려울 수 있습니다.  이 변수를 좀 더 알기 쉽게 아래 이미지를 보며 비유를 통해 보도록 해보겠습니다.  아래 이미지는 White Box에 콜라가 담겨져 있는 이미지입니다. 아래 이미지에서 변수(메모리 공간)은 박스에 해당합니다. 그리고 주소를 대체하는 변수명은 박스에 붙인 WhiteBox와 같은 이름,메모리 공간에 저장되는 변수 값은 콜라에 해당합니다.

 


선언과 할당

변수는 선언과 할당이라는 것이 존재합니다. 이 선언과 할당에 대해 비유를 통해 알아보도록 하겠습니다.


선언

선언은 박스를 만들고 그 박스에 라벨을 붙이는 것이라고 할 수 있다.

(ex : 하얀색 박스를 만들고 WhiteBox라는 라벨을 붙여라)

할당

할당은 박스에 내용물을 넣는 것이라고 할 수 있다. 이때 조심해야 할 것이 있다. 그것은 우리가 할당을 할때 넣을 자료에 따라 메모리의 크기(자료형)를 미리 지정해줘야한다. 아래 박스에 예를 들면  넣을 내용물에 따라 박스의 크기를 미리 지정해줘야한다.

(ex : WhiteBox에 콜라를 넣어라)


자료형

자료형은 프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 뜻한다.  만약 주식 예측기를 만들려면 어떤 주식의 이름과 가격을 알고 값을 저장하는 것 처럼, 게임을 만들려면 게임 캐릭터의 이름, 능력치 등을 알고 저장해야 하는 것 처럼 기본 중의 기본이다.

 

자료형은 대표적으로  int, float , string, bool 이 있다.  int는 123, -123처럼 정수형을 나타내는 자료형입니다.  float는 1.23, -1.23처럼 실수형을 나타내는 자료형입니다. string은 문자열을 나타내는 자료형입니다. 문자열을 작성할때는 꼭 ""(큰따옴표)를 사용해줘야 합니다.  bool은 논리형을 나타내는 자료형입니다.

 

 

유니티에서만 특별하게 사용되는 변수가 있습니다.  이 변수들은 입문 강좌를 진행하는 동안 천천히 알아보도록 하겠습니다.

 

그런데 왜? 우리는 자료형을 미리 지정해줘야 하는 것일까?? 그것은 자료형의 종류에 따라 메모리를 차지하는 크기가 다르기 때문이다. 예시를 들어보자. 우리가 자동차를 넣기 위해서는 일반 상자가 아니라 컨테이너 박스가 필요하다. 혹은 코끼리를 넣기 위해서는 일반 상자가 아니라 큰 철창이 필요한다. 이 것 처럼 자료형이 가지는 크기에 따라 미리 메모리의 크기를 잡아줘야한다.

 

위에서 설명한 것 처럼 모든 자료형의 크기가 다르다고 했다.  각 자료형이 가지고 있는 크기를 표를 통해 확인해보자.

 


예시를 통한 복습

아래 이미지 처럼 음료수와, 아이스크림이 있다. 음료수와 아이스크림은 각기 다른 자료형이라고 생각하면된다. 그리고 음료수와 아이스크림의 종류(ex: 콜라, 사이다, 폴라포, 뽕다 등)는 각기 다른 데이터 값이라고 생각하면된다. 

 

여기서 우리는 이미 정해진 자료형을 담을 수 있는 상자를 준비하고 변수명을 붙여준다.

ex) 자료형 -> 음료수 / 변수명 -> 흰색 상자 / 데이터 값은 -> 콜라

 

ex) 자료형 -> 아이스크림 / 변수명 -> 검은색 상자 / 데이터 값은 -> 죠스바

 

위에서 설명한 것처럼 음료수만 담을 수 있는 흰색 상자에는 죠스바를 넣을 수 없다. 


이제 이것을 우리는 코드로 작성을 해야 한다.  위의 예시를 코드형태로 작성해보면 아래처럼 된다. 초록색 부분은 자료형, 주황색 부분은 변수명, 빨간색 부분은 데이터 값이다. = 는 할당한다는 표시로 변수명이라는 메모리 공간에 콜라라는 정보를 저장하는 것이다.

 

 

 

이것을 c# 코드로 변환 해보면 아래와 같다.(char는 문자만 저장할 수 있어 죠스바를 J로 저장했다.)

string whitebox = "coke"
char Blackbox = 'J' //Char는 문자하나만 저장할 수 있으며 작은따옴표를 사용한다.

변수명 작성 법

변수명 작성 방법은 다음과 같이 규칙이 정해져 있어 규칙을 지켜 변수명을 지정해야한다. 첫 번째로 영문과 숫자를 이용해 작성할 수 있다. 두 번째는 숫자로 시작하는 변수명은 불가능하다. 세 번째는 변수명에 공백은 불가능하다. 네 번째 변수에 특수문자는 불가능하다. 다섯 번째는 언더바(_)는 사용이 가능하다. 여섯 번째는 중복된 변수명 사용은 불가능하다.