cyphen156

유니티의 C# 스크립팅 시스템 본문

프로젝트/유니티

유니티의 C# 스크립팅 시스템

cyphen156 2024. 9. 25. 18:58

유니티는 기본적으로 C# 소스 파일을 오브젝트의 컴포넌트로 활용할 수 있다. 

무슨 말이냐 하면 유니티를 사용하는 게임 개발자는 전체 시스템에 대한 구조를 고민할 필요 없이 하위 컨텐츠만을 생각하면 된다는 이야기이다. 

특이하게 유니티는 전통적으로 프로젝트의 진입점을 정의하는 main파일을 제공하지 않는다. 대신 엔진내부에서 MonoBehaviour 클래스를 통해 게임 오브젝트의 컴포넌트를 제어한다. 

유니티는 다양한 샘플 스크립트들을 제공하는데 가장 많이 쓰이는 것은 MonoBehaviour 스크립트이다.

MonoBehaviour 클래스는 다른 모든 유니티에서의 동작 클래스들을 상속하고 있는 클래스로 가장 범용적으로 사용되기 때문이다. 

프로젝트 창에서 샘플용 MonoBehaviour C#스크립트를 생성해보면 다음과 같은 구조를 가지고 있다.

using UnityEngine;

public class SampleScript : MonoBehaviour
{
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        
    }

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

using UnityEngine을 통해 네임스페이스를 포함하여 사용하고 있고, 이 파일 안에 MonoBehaviour클래스가 정의되어 있다.

그리고 SampleScript 클래스는 이 MonoBehaviour 클래스를 상속받아 사용한다. 

void Start()함수는 인스턴스가 생성될 때 딱 한번 실행되는 구문이다. 

void Update()는 인스턴스가 1프레임마다 계속해서 반복문을 돌면서 실행되는 구문이다.

중요한건 서로 다른 변수 범위를 가지고 있기 떄문에 공유되는 변수를 사용하려면 매서드 외부에 변수를 선언하여 공유가능한 변수를 만들어야 한다.

그리고 스크립트를 비주얼 코드에서 수정한 다음 저장하면 그 즉시 Unity Engine에 연동되어 수정된 스크립트가 컴포넌트로 재적용된다.

간단하게 디버그 콘솔창에 로그를 남겨보고, 프레임당 디버그 로그를 추가로 남기는스크립트를 Box인스턴스에 적용하여보자. 

using UnityEngine;

public class SampleScript : MonoBehaviour
{

    // 프레임을 기록하기 위한 변수
    int frameCount = 0;
    int interval = 1;
    int nextFrame = 1;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        Debug.Log("Hello Wolrd!");
    }

    // Update is called once per frame
    void Update()
    {
        // 프레임 카운트 증가
        frameCount++;


        // 지정된 프레임 수가 지난 경우 로그 출력
        if (frameCount >= nextFrame)
        {
            Debug.Log($"Frame Count: {frameCount}");

            // 다음 로그를 찍을 프레임 설정 (다음에는 frameInterval 프레임 후에 로그 출력)
            nextFrame++;
            nextFrame += interval; // 로그를 출력할 때마다 간격을 늘려감
        }
    }
}

지금 디버그 로그 속도를 프레임값을 계속 늘려감에도 엄청빨리찍히는 이유는 1초당 프레임 레이트가 약 80프레임 정도가 되어서 그렇다.

이제 다음에는 새 프로젝트로 진행하도록 하겠다.

예제 코드는 한빛 아카데미 예제 소스

IT CookBook, 게임 제작으로 배우는 유니티 (hanbit.co.kr)

 

IT CookBook, 게임 제작으로 배우는 유니티

게임을 만들면서 유니티를 배우려는 모든 독자층을 대상으로 합니다. 유니티의 설치 방법과 기본 사용법을 먼저 설명한 다음 유니티에서 그래픽 리소스를 설정하고 스크립트를 코딩하는 과정

www.hanbit.co.kr

또는 다음 레포지토리에 업로드 될 예정입니다. 유니티 프로젝트는 용량이 너무 거대한 관계로 제가 짠 스크립트만을 업로드하고 나머지는 링크형식으로 제공하겠습니다.

GitHub - cyphen156/Unity: UnityProject

 

GitHub - cyphen156/Unity: unity

unity. Contribute to cyphen156/Unity development by creating an account on GitHub.

github.com