본문 바로가기
게임 프로그래밍/유니티(2021.3 LTS) 강좌

[유니티 기초] 스크립트의 이해와 코드 작성

by 레오란다 2022. 10. 14.
반응형

1. 유니티 스크립트의 이해

유니티에서 새로운 스크립트를 추가하면 다음과 같이 기본 코드가 작성된 상태로 생성됩니다.

 

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

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

   }

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

   }
}

 

C# 문법은 다른 글에서 다루도록 하고 여기서는 유니티와 연관된 내용에 초점을 맞추도록 하겠습니다.

 

유니티의 스크립트는 C# 언어를 사용하고 한 개의 스크립트 파일당 MonoBehaviour 를 상속받은 한 개의 클래스가 사용됩니다. 클래스 이름은 스크립트 파일의 이름과 동일해야 합니다. 

* MonoBehaviour 는 유니티에서 지원하는 스크립트 기능을 사용하기 위해 반드시 상속해야 하는 기본 클래스입니다.

 

유니티 엔진은 프레임 단위로 처리가 이루어지고 매 프레임마다 각 스크립트에서 필요한 작업을 수행할 수 있도록 용도에 따른 여러 이벤트 메시지를 발생시켜 줍니다. 위 코드의 Start() 와 Update() 는 관련된 이벤트 메시지가 발생했을 때 자동으로 호출되는 함수입니다. 

◈ 게임에서 프레임 이란 1초에 화면이 몇 번 다시 그려질 수 있는지를 나타내는 단위입니다. 단위 표시는 FPS 를 사용하며 Frame Per Second의 약자입니다. 30 프레임은 1 초에 화면이 30번, 60 프레임은 1초에 화면이 60번 다시 그려진다는 것을 의미합니다. 프레임 수가 높을 수록 더 부드럽게 보입니다.

 

Start()와 Update()는 다음과 같은 조건에서 호출됩니다.

Start 게임이 실행된 후 한 번만 호출됩니다.
Update 매 프레임 마다 호출됩니다.

 

Start 는 주로 스크립트에서 사용할 여러 변수들을 초기화하는 용도에 사용됩니다.

Update 는 오브젝트의 이동이나 사용자 입력 등 매 프레임 마다 처리되어야 할 작업들에 사용됩니다. 만약 Update 에서 시간이 오래 걸리는 작업이 수행된다면 게임의 전체 성능에 영향을 미치게 됩니다.

 

 

2. 코드를 통한 Transform 컴포넌트의 속성 값 변경

스크립트 코드를 이용해 게임을 실행시킨 상태에서 큐브의 Transform 속성 값을 변경해 보도록 하겠습니다.

 

코드를 작성하기 전에 유니티 에디터의 상단에 있는 Play 버튼을 눌러 게임을 실행해 보도록 합니다. 게임을 실행하면 씬 화면에서 게임 화면으로 변경되면서 큐브가 중앙에 위치된 것을 보실 수 있습니다. Play 버튼을 한 번 더 클릭해서 실행을 중지합니다.

 

유니티 에디터에서의 실행 화면

 

이제 게임을 실행했을 때 큐브의 위치, 회전 각, 크기를 변경하는 코드를 작성해 보도록 하겠습니다.

 

void Start()
{
  transform.position = new Vector3(0f, 3f, 0f);
  transform.localEulerAngles = new Vector3(0f, 45f, 0f);
  transform.localScale = new Vector3(1f, 2f, 1f);
}

 

CubeHandler 스크립트의 Start 함수가 위와 같이 되도록 코드를 입력하시면 됩니다. 각 코드의 의미는 다음과 같습니다.

  • transform 은 인스펙터 창의 Transform 컴포넌트에 해당합니다.
  • transform.position = new Vector3(0f, 3f, 0f): 오브젝트를 y축으로 3만큼 이동
  • transform.localEulerAngles = new Vector3(0f, 45f, 0f): 오브젝트를 y 축 기준으로 45˚ 회전 (인스펙터 창의 Transform 컴포넌트의 Rotation에 해당합니다.)
  • transform.localScale = new Vector3(1f, 2f, 1f): 오브젝트를 y축 방향으로 2배 늘림

* 유니티에 수정한 코드를 반영하려면 코드 작성 완료 후 반드시 저장을 해 주셔야 합니다. 저장 방법은 키보드 CTRL+S 를 누르거나 Visual Studio 상단에 있는 디스크 아이콘을 클릭하시면 됩니다.

 

◈ Vector3 는 유니티에서 x, y, z 3개의 값을 갖는 벡터를 처리하기 위해 정의된 구조체이며 벡터 계산에 필요한 여러가지 유용한 함수를 제공해 줍니다. 단, 벡터 사용에만 국한되지 않고 x, y, z 로 구성된 3개의 값을 갖는 구조에 널리 사용됩니다.

 

다시 유니티 에디터로 돌아가면 변경된 스크립트를 자동으로 컴파일하는 과정을 거치게 됩니다. 컴파일이 끝나면 다시 Play 버튼을 눌러 게임을 실행합니다. 그러면 아래와 같이 스크립트에서 지정한 위치로 큐브가 이동되어 나타나는 것을 보실 수 있습니다. 만약 코드 작성에 오타가 있다면 컴파일 오류가 나면서 실행이 되지 않으니 잘 살펴보시기 바랍니다.

 

성공하셨다면 Play 버튼을 다시 눌러 플레이를 종료한 후에 코드에서 position, localEulerAngles, localScale의 x, y, z 에 여러 값을 넣어 보시고 결과를 확인해 보시기 바랍니다.

반응형

댓글