게임 오브젝트의 동작은 연결된 컴포넌트 에 의해 조절됩니다. Unity 내장 컴포넌트는 다양한 목적으로 사용할 수 있지만 사용자 지정 게임플레이 기능을 구현하려면 충분하지 않은 경우가 많습니다. Unity에서는 스크립트 를 사용하여 사용자 정의 컴포넌트를 생성할 수 있습니다. 게임의 이벤트 시작, 시간이 지남에 따라 컴포넌트 프로퍼티 수정, 사용자 입력 작업에 대한 반응을 자유롭게 활용할 수 있습니다.
Unity는 기본적으로 두 개의 프로그래밍 언어를 지원합니다.
또한 Unity상에서 호환성 DLL 컴파일이 가능하여 다양한 .NET 언어를 사용할 수 있습니다. 자세한 내용은 여기를 참조하십시오.
프로그래밍 기술 및 특정 언어의 사용법을 배우는 것은 입문편의 범위를 초과합니다. 그러나 Unity 프로그래밍을 배우기 위하여 많은 책, 튜토리얼 및 기타 리소스가 있습니다. 자세한 내용은 당사의 웹 사이트에 있는 학습 섹션을 참조하십시오.
다른 에셋과는 달리 스크립트는 일반적으로 Unity에서 바로 생성됩니다. 새 스크립트를 만들려면 프로젝트 패널의 상단 왼쪽에 있는 생성 메뉴를 선택하거나 메인 메뉴에서 에셋(Assets) > 생성(Create) > C# 스크립트(C# Script)(또는 JavaScript)를 선택합니다.
새 스크립트는 프로젝트 패널에서 선택한 임의의 폴더에 만들어집니다. 새 스크립트 파일 이름이 선택 상태가 되고 새 이름을 입력하라는 메시지가 표시됩니다.
나중에 편집하지 말고 이 시점에서 새 스크립트의 이름을 입력하는 것이 좋습니다. 입력한 이름은 아래 설명된 대로 파일 내에 초기 텍스트를 만드는 데 사용됩니다.
Unity에서 스크립트 에셋을 더블 클릭하면 텍스트 에디터에서 열립니다. 기본적으로 Unity는 MonoDevelop을 사용하지만 Unity의 환경 설정에서 외부 툴 패널에서 원하는 에디터를 선택할 수 있습니다.
파일의 초기 내용은 다음과 같습니다.
using UnityEngine;
using System.Collections;
public class MainPlayer : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
스크립트는 MonoBehaviour 라는 기본 제공 클래스에서 파생되는 클래스를 구현하여 Unity의 내부 작업과 연결합니다. 클래스를 게임 오브젝트에 첨부할 수 있는 새로운 컴포넌트 타입을 만드는 일종의 청사진이라고 생각할 수 있습니다. 게임 오브젝트에 스크립트 컴포넌트를 연결할 때마다 청사진으로 정의 된 오브젝트의 새 인스턴스를 만듭니다. 클래스의 이름은 파일을 만들 때 제공 한 이름에서 가져옵니다. 게임 오브젝트에 스크립트 컴포넌트를 연결하려면 클래스 이름과 파일 이름이 동일해야 합니다.
주목해야 할 주요 사항은 클래스 내부에 정의 된 두 개의 함수입니다. Update 함수는 게임 오브젝트에 대한 프레임 업데이트를 처리할 코드를 넣을 장소입니다. 여기에는 움직임, 트리거링 액션 및 사용자 입력에 응답하는 기능이 포함될 수 있습니다. 기본적으로 게임플레이 중에 시간이 지남에 따라 처리해야 합니다. Update 함수를 사용하여 작업을 수행하려면 게임 액션을 수행하기 전에 변수를 설정하고 환경 설정을 읽고 다른 게임 오브젝트와 연결하는 것이 유용할 때가 있습니다. Start 함수는 게임플레이가 시작되기 전에(즉, Update 함수가 처음으로 호출되기 전에) Unity에 의해 호출되며 초기화를 수행하기에 이상적인 곳입니다.
숙련된 프로그래머 참고 사항: 생성자 함수를 사용하여 오브젝트 초기화가 수행되지 않는다는 사실에 놀랄 수 있습니다. 이는 오브젝트의 구성이 에디터에 의해 처리되고 예상대로 게임플레이가 시작될 때 발생하지 않기 때문입니다. 스크립트 컴포넌트에 대한 생성자를 정의하려고 하면 Unity의 정상적인 작동을 방해하고 프로젝트에 중대한 문제가 발생할 수 있습니다.
UnityScript의 스크립트는 C# 스크립트와는 조금 다르게 작동합니다.
#pragma strict
function Start () {
}
function Update () {
}
여기서 Start와 Update 함수는 동일한 의미이지만 클래스는 명시적으로 선언되지 않습니다. 스크립트 자체는 클래스를 정의한다고 가정합니다. 암시적으로 MonoBehaviour에서 파생되고 스크립트 에셋의 파일 이름에서 해당 이름을 가져옵니다.
위에서 언급했듯이 스크립트는 컴포넌트의 청사진만 정의하므로 스크립트의 인스턴스가 게임 오브젝트에 첨부될 때까지 해당 코드가 활성화되지 않습니다. 스크립트 에셋을 계층 구조 패널의 게임 오브젝트 또는 현재 선택된 게임 오브젝트의 속성에 드래그하여 스크립트를 첨부할 수 있습니다. 컴포넌트 메뉴에는 프로젝트에서 사용할 수있는 모든 스크립트(사용자가 직접 작성한 스크립트 포함)를 포함하는 스크립트 서브메뉴가 있습니다. 스크립트 인스턴스는 인스펙터의 다른 모든 컴포넌트와 아주 비슷합니다.
일단 연결되면 플레이를 누르고 게임을 실행할 때 스크립트가 작동하기 시작합니다. Start 함수에 다음 코드를 추가하여 이를 확인할 수 있습니다.
// Use this for initialization
void Start () {
Debug.Log("I am alive!");
}
Debug.Log는 Unity의 콘솔 출력에 메시지를 출력하는 간단한 커맨드입니다. 지금 재생을 누르면 Unity 에디터 창 하단과 콘솔 창(메뉴 : Window > Console)에 메시지가 표시됩니다.