유니티 기초 강좌: C# 스크립트 생성

게임 개발에 있어 스크립트는 필수적인 요소입니다. 유니티(Unity)에서는 C# 언어를 사용하여 게임 오브젝트의 행동과 상호작용을 정의합니다. 본 강좌에서는 유니티에서 C# 스크립트를 생성하고 사용하는 방법을 자세히 설명하겠습니다. 본 강좌를 통해 유니티에서의 C# 스크립트의 기본 개념을 익히고, 실습을 통해 이를 적용해 보세요.

1. 유니티란?

유니티는 다양한 플랫폼에서 게임 및 시뮬레이션을 개발할 수 있는 강력한 게임 엔진입니다. 유니티는 사용자 친화적인 인터페이스를 제공하며, 프로그래밍 경험이 없는 사용자도 쉽게 접근할 수 있습니다. C# 언어를 사용하여 스크립트를 작성하고, 풍부한 에셋 스토어를 통해 다양한 리소스를 활용할 수 있습니다.

2. C# 언어 소개

C#은 마이크로소프트에서 개발한 객체 지향 프로그래밍 언어입니다. 유니티는 이 언어를 기본 프로그래밍 언어로 채택하고 있으며, 여러가지 강력한 기능을 제공합니다. C#의 주요 기능은 다음과 같습니다:

  • 객체 지향 프로그래밍(Object-Oriented Programming): 코드의 재사용성과 유지 보수성을 높여줍니다.
  • 정적 타입(Static Typing): 데이터 타입을 명시적으로 선언하여 컴파일 타임에 오류를 발견할 수 있습니다.
  • 메모리 관리: 가비지 컬렉션(Garbage Collection) 기능을 통해 메모리 관리가 용이합니다.

3. 유니티에서 C# 스크립트 생성하기

유니티에서 C# 스크립트를 생성하는 과정은 다음과 같습니다:

  1. 유니티를 실행하고 새 프로젝트를 만듭니다.
  2. 프로젝트 창에서 우클릭하고 Create > C# Script를 선택합니다.
  3. 스크립트의 이름을 입력하고 Enter 키를 누릅니다.

위 과정을 통해 새로운 C# 스크립트 파일이 생성됩니다. 이 파일을 더블 클릭하면 기본 코드 편집기가 열립니다. 기본적으로 유니티는 비주얼 스튜디오(Visual Studio)를 제공합니다.

3.1. 기본 스크립트 구조

유니티에서 생성된 C# 스크립트의 기본 구조는 다음과 같습니다:

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

public class NewBehaviourScript : MonoBehaviour
{
    // 이곳에 변수를 선언합니다.
    
    void Start()
    {
        // 게임이 시작될 때 실행되는 코드입니다.
    }

    void Update()
    {
        // 매 프레임마다 실행되는 코드입니다.
    }
}

3.2. 스크립트 설명

위 스크립트는 세 부분으로 나뉘어 있습니다:

  • using 문: 필요한 네임스페이스를 가져오는 데 사용됩니다. 여기서는 System.CollectionsUnityEngine를 가져왔습니다.
  • public class NewBehaviourScript: 스크립트의 클래스 정의입니다. 클래스는 객체 지향 프로그래밍의 기본 단위입니다.
  • MonoBehaviour: 유니티의 기본 클래스로, 유니티 엔진에서 기능을 수행하는 스크립트입니다. 이 클래스를 상속받아야 유니티의 기능을 사용할 수 있습니다.

3.3. 메서드 설명

  • Start(): 게임 오브젝트가 활성화되고 첫 번째 프레임이 렌더링되기 전, 한 번만 호출되는 메서드입니다. 주로 초기화 코드가 들어갑니다.
  • Update(): 매 프레임마다 호출되는 메서드로, 게임의 로직 갱신, 입력 처리 등의 용도로 사용됩니다.

4. C# 스크립트를 게임 오브젝트에 연결하기

스크립트를 생성한 후, 해당 스크립트를 게임 오브젝트에 연결해야 합니다. 이를 통해 게임 오브젝트에 스크립트의 기능을 부여할 수 있습니다. 다음 단계를 따라 해보세요:

  1. Hierarchy 창에서 새로운 게임 오브젝트를 생성합니다.
  2. 생성한 게임 오브젝트를 선택한 후, Inspector 창에서 Add Component 버튼을 클릭합니다.
  3. 검색창에 방금 생성한 C# 스크립트의 이름을 입력하고 선택합니다.

이제 스크립트가 게임 오브젝트에 연결되어 실행될 준비가 완료되었습니다.

5. 변수를 사용한 데이터 저장

변수는 데이터를 저장하고 조작하는 데 사용됩니다. C#에서는 다양한 데이터 타입을 지원하며, 변수는 다음과 같이 선언합니다:

public int score; // 정수형 변수
private float speed; // 실수형 변수
public string playerName; // 문자열 변수

변수의 접근 제어자는 publicprivate로 나뉘며, 각각 외부에서 접근 가능 여부를 결정합니다. public 변수를 사용하면 Inspector 창에서 값을 설정할 수 있으므로, 게임 오브젝트의 구성 요소를 쉽게 조정할 수 있습니다.

6. 기본적인 입력 처리

유니티에서 사용자 입력을 처리하는 방법은 여러 가지가 있으며, 대표적으로 Input 클래스를 사용합니다. Update() 메서드 내에서 입력을 체크하는 기본적인 예제를 살펴보겠습니다:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("스페이스 키가 눌렸습니다!");
    }
}

위 코드는 사용자가 스페이스 키를 눌렀을 때 콘솔에 출력되는 메시지를 나타냅니다. 다른 입력 방법으로는 마우스 클릭이나 터치 입력을 체크할 수도 있습니다.

7. 오브젝트 간 상호작용

게임 오브젝트 간 상호작용은 게임의 흐름을 결정하는 중요한 요소입니다. 여러 게임 오브젝트 간 협력하거나 충돌하는 방식을 구현할 수 있습니다. 다음은 두 오브젝트가 충돌하는 예제 코드입니다:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.tag == "Enemy")
    {
        Debug.Log("적과 충돌했습니다!");
    }
}

위 코드는 오브젝트가 다른 오브젝트와 충돌했을 때 실행되는 메서드입니다. 충돌한 오브젝트의 태그를 체크하여 특정 행동을 정의할 수 있습니다.

8. 스크립트의 재사용성

스크립트의 재사용성은 코드의 유지 보수성을 높이고, 새로운 기능을 추가할 때 유용합니다. 스크립트를 여러 게임 오브젝트에 적용하여 동일한 로직을 공유할 수 있습니다. 예를 들어, 다음과 같은 스크립트를 작성하여 여러 오브젝트에 적용할 수 있습니다:

public class Health : MonoBehaviour
{
    public int health = 100;

    public void TakeDamage(int damage)
    {
        health -= damage;
        if (health <= 0)
        {
            Destroy(gameObject);
        }
    }
}

이 스크립트는 다양한 게임 오브젝트에서 건강(health) 상태를 관리하는 방식으로, 스크립트를 여러 오브젝트에 추가함으로써 코드의 재사용성을 확보할 수 있습니다.

9. 디버깅 방법

코드를 작성하다 보면 예상치 못한 오류가 발생할 수 있습니다. 유니티에서 디버깅할 수 있는 방법은 여러 가지가 있으며, 대표적으로 Debug.Log() 메서드를 사용하여 콘솔에서 메시지를 출력할 수 있습니다. 이는 코드의 흐름과 변수의 값을 확인하는 데 유용합니다.

10. 정리

본 강좌에서는 유니티에서 C# 스크립트를 생성하고 활용하는 기본적인 방법을 소개하였습니다. 게임 오브젝트에 스크립트를 연결하고, 변수를 사용하여 데이터를 저장하고 처리하는 방법을 배웠습니다. 또한, 사용자 입력을 처리하고, 오브젝트 간 상호작용을 구현하는 과정도 살펴보았습니다.

이제 여러분은 유니티의 기초적인 스크립트 작성 방법을 익혔습니다. 더 고급 기능을 배우고 싶은 분들은 유니티의 공식 문서나 다양한 온라인 강좌를 참고하시기 바랍니다. 끊임없이 실습하고 경험을 쌓아가다 보면, 자신만의 멋진 게임을 제작하는 날이 올 것입니다.

참고 자료