스크립팅 개요
변수와 인스펙터

스크립트 작성 및 사용

게임 오브젝트의 동작은 연결된 Components에 의해 제어됩니다. Unity 기본 컴포넌트는 다양한 목적으로 사용할 수 있지만 사용자 지정 게임 기능을 구현하려면 충분하지 않은 경우가 많습니다. Unity에 의해 Script를 사용하여 사용자 정의 컴포넌트를 생성하고, 게임의 이벤트 시작, 시간이 지남에 따라 컴포넌트 속성 수정, 사용자 입력 작업에 대한 반응이 가능합니다.

Unity는 2개의 프로그래밍 언어를 지원합니다:

  • C# (씨샵 이라고 발음), Java 또는 C++과 유사한 산업 표준 언어
  • __ UnityScript__, JavaScript를 바탕으로 모델링 된 Unity 독자적인 설계 언어

또한 Compatible DLL 컴파일이 가능하여 다양한 다른 .NET 언어를 사용할 수 있습니다. 자세한 내용은 이 페이지를 참조하십시오.

프로그래밍 기술 및 개별 언어의 사용법을 마스터하는 것은 입문편의 범위를 초과합니다. 그러나 Unity 프로그래밍을 배우기 위하여 많은 책, 튜토리얼 및 기타 리소스가 있습니다. 자세한 내용은 Unity 웹 사이트에 있는 Learning 섹션을 참조하십시오.

스크립트 만들기

다른 애셋들과는 달리, 스크립트 파일은 대게 Unity에서 바로 생성합니다. 새 스크립트를 만들려면 메뉴에서 Assets > Create > C# Script (또는 JavaScript) 를 엽니다.

새 스크립트는 프로젝트 패널에서 선택한 임의의 폴더에 만들어집니다. 새 스크립트 파일 이름이 선택 상태가 되고, 새 이름을 입력하라는 메시지가 표시됩니다.

새 스크립트에 이름을 붙이는 것을 미루지 않고,이 시점에서 하면 좋습니다. 뒤에서 설명하겠지만, 여기에 붙인 이름은 처음 텍스트 생성에 사용됩니다.

스크립트 파일의 구조

Unity에서 스크립트 에셋을 더블 클릭하면 텍스트 에디터에서 열립니다. 기본적으로 Unity는 MonoDevelop를 사용하지만 Unity의 Preferences의 External Tools 패널에서 변경할 수 있습니다.

처음 생성 후, 파일은 다음과 같이 표시될 것입니다 :

using UnityEngine;
using System.Collections;

public class MainPlayer : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    
    }
}

스크립트는 Unity 내부 처리와 연계하기 위해 MonoBehaviour라는 기본 클래스의 파생 클래스를 구현합니다. 클래스는 게임 오브젝트에 연결할 수 있는 새로운 유형의 컴포넌트를 만들기 위한 청사진이라고 할 수 있습니다. 청사진에 기초하여 오브젝트의 새 인스턴스를 만듭니다. 만들 파일 이름과 일치하도록 클래스 이름이 붙여져 있습니다. 클래스 이름과 파일 이름이 일치하지 않으면 게임 오브젝트에 연결된 스크립트 컴포넌트는 무효가 됩니다.

클래스에 정의된 두 함수에 주목하십시오. Update 함수는 게임 오브젝트의 프레임 업데이트를 처리하는 코드를 삽입하는 장소입니다. 어떤 동작을 시키거나, 무언가를 실행시키거나 또는 사용자 입력 조작에 반응하고, 시간의 경과와 함께 처리되는 게임 안의 모든 것을 포함합니다. Update 함수에서 필요한 작업을 수행하기 위해서는 변수의 설정, 설정을 읽고 게임 안의 작업이 수행되기 전에 다른 게임 오브젝트와의 결합을 수행합니다. Start 함수는 게임 플레이 직전에 Unity 의해 호출되어, 모두 초기화 할 수 있는 좋은 장소입니다.

프로그래밍 상급자가 주의해야할 것 : 오브젝트의 초기화가 생성자 함수(constructor)가 아닌 것이 의외일지도 모릅니다. 그 이유는 오브젝트 생성은 에디터에 의해 처리되어 의외로 게임 시작 직후에 수행되지 않기 때문입니다. 스크립트 컴포넌트에서 생성자를 정의하려고 하면 Unity의 일반적 처리에 간섭하기 때문에 프로젝트에서 문제를 발생시킵니다.

A UnityScript script works a bit differently to C# script:

#pragma strict

function Start () {

}

function Update () {

}

Start 및 Update 함수의 역할은 이미 언급한 대로지만, 클래스 이름이 명시적으로 선언되어 있지 않습니다. 스크립트 자체가 클래스를 정의하는 것을 전제로 하고 있습니다. MonoBehaviour에서 명시적으로 파생하여, 스크립트 에셋의 파일명과 이름이 일치하도록 합니다.

게임 오브젝트의 호출

이미 언급한 바와 같이 스크립트는 컴포넌트의 청사진이며, 게임 오브젝트에 스크립트가 연결될 때까지는 코드 실행되지 않습니다. 계층 뷰에서 스크립트 에셋을 게임 오브젝트로 드래그하거나 현재 선택되어 있는 게임 오브젝트의 인스펙터(inspector) 상에 드래그하여 스크립트를 연결할 수 있습니다. 컴포넌트 메뉴의 스크립트 하위 메뉴가 있으며, 프로젝트에서 사용 가능한 모든 스크립트를 포함합니다. 스크립트의 인스턴스는 인스펙터 안에서 다른 컴포넌트와 외형이 동일하게 나타납니다:

한 번 연결한 후, Play 버튼을 눌러 게임을 시작하면 스크립트가 작동합니다. 시험해보려면 아래의 코드를 Start 함수에 더합니다 :

// Use this for initialization
void Start () {
    Debug.Log("I am alive!");
}

__Debug.Log__은 Unity 콘솔 출력에 메시지를 씁니다. 만약 Play 버튼을 누르면 기본 Unity 에디터 창과 콘솔 하단(메뉴 : Window>Console)에 메시지가 표시됩니다.

스크립팅 개요
변수와 인스펙터