본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티unity로 게임 만들기

유니티04_스크립트 익히기

이전 글에서 오브젝트에 속성을 부여하는 '컴퍼넌트(component ; 구성 요소)'에 대해 설명했었다.

유니티에는 다양한 컴퍼넌트가 있지만 원하는 속성 또는 기능이 없다면 직접 만들어야 할 것이다.

이런 경우에 프로그래밍 언어를 사용해서 원하는 기능을 가진 속성 또는 컴퍼넌트를 자체적으로 만들 수 있다.

이렇게 직접 만든 컴퍼넌트를 Script(스크립트)라고 부른다.

즉, 스크립트는 객체(오브젝트)에 속성 또는 기능을 부여하는 코드이다.

 

유니티는 component(컴퍼넌트)를 기반으로 게임을 만든다.

게임 화면을 구성하는 각 GameObject(게임오브젝트)에 필요한 component들을 붙여서 작동하게 한다.

직접 작성한 스크립트도 component로 사용할 수 있는데 유니티의 base(기본)클래스인 MonoBehaviour클래스를 상속받은 후 GameObject에 component로 연결하면 된다.

 

유니티에서 스크립트로 사용할 수 있는 언어는 C# (씨샵)과 자바스크립트이다.

여기서는 C#의 기초를 익힌다.

 

1. C# 파일 만들기

 

연습을 위해 ScriptSample이라는 새 프로젝트를 만들고 탬플릿은 2D를 선택한다.

 

 

프로젝트 창에서 마우스 오른쪽 버튼 클릭 후 Create > C# Script 클릭

 

NewBehaviourScript (새 행동 스크립트) 파일이 만들어진다.

 

객체를 만들기 위해 Hierarchy창에서 +버튼을 눌러 Create Empty를 클릭한다.

*Create : 만들다, 생성하다

*Empty : 비어있는, 아무것도 없는

 

이렇게 만들어진 GameObject(게임 오브젝트; 게임 객체)는 Empty Object (빈 객체, 빈 오브젝트)가 된다.

 

스크립트를 객체에 적용(Attach)하려면 스크립트 파일을 마우스로 끌어서 원하는 객체로 가져가서 놓는다.

 

Inspector창을 보면 GameObject 라는 객체에 스크립트가 적용된 것을 확인할 수 있다.

또한 Inspector창 아래에 있는 Add component버튼으로 추가할 수도 있다.

 

정리하면, 게임오브젝트에 명령을 내려 작동시키기 위해서는 C# 언어로 작성한 스크립트를 연결해야 한다는 것이다.

 

2. C# 파일 편집하기

 

스크립트 파일을 편집하려면 '더블클릭'한다.

편집기는 앞에서 설치했던 Microsoft Visual Studio 2019를 사용한다.

 

비주얼스튜디오는 통합개발환경(IDE) 프로그램이다.

안드로이드 스튜디오 처럼 편집, 프로젝트 관리, 디버깅, 컴파일 등의 기능이 통합되어 있다.

 

이와 비슷한 이름의 비주얼스튜디오 코드(Visual Studio Code)는 코드 편집에 필수적인 기능만 있는 에디터(편집기)이다.

이 VSC 에디터도 C# 스크립트에 필요한 기능이 모두 포함되어 있으므로 익숙하다면 비주얼스튜디오를 대신해서 사용해도 상관없다.

 

비주얼 스튜디오가 실행되면 마이크로소프트 계정으로 로그인하라는 메시지가 뜬다.

여기서는 일단 로그인하지 않고 실행한다.

 

스크립트 파일을 열어보면 위와 같이 기본 코드가 적혀있다.

 

그런데 글꼴과 크기가 마음에 들지 않는다.

 

도구 메뉴 > 옵션에 들어가서 바꿀 수 있다.

 

자바(JAVA)에서 사용하는 코드와 비슷한 것도 보인다.

 

낯선 코드들의 뜻을 알아보자.

 

먼저 C# (씨샤프, 씨샵) 이라는 언어에 대해 간단하게 정리한다.

 

C# 언어는 마이크로소프트가 개발한 객체지향 프로그래밍 언어다.

이름이 비슷한 C , C++와는 별로 상관이 없다.

참고로 C++(씨플러스플러스)는 C 언어의 확장판이다.

C와 비슷하면서 class(클래스)를 사용을 추가하여 객체지향 프로그래밍을 지원하는 것이 특징이다.

 

C#은 JAVA(자바)와 비슷하다.

 

썬마이크로 시스템즈라는 회사가 20여년 전에 미래의 네트워크 환경에 적합한 JAVA라는 언어를 만들었다.

마이크로소프트 회사도 이 자바를 네트워크 구축에 활용하다가 썬마이크로 시스템즈로 부터 특허 소송을 당해 패소하게 되고 독자적인 닷넷(.Net)이라는 네트워킹 환경을 구축하게 된다. 이때 개발한 언어가 C# 이다.

C#은 JAVA의 장점을 많이 수용했기 때문에 처음 만들었을 때는 JAVA와 비슷했다고 한다.

 

C#은 처음에는 .Net Framework(닷넷 프레임워크: 윈도우 프로그램 개발 및 실행환경)를 위해 만들어졌는데 그 후 프로그래밍 언어의 표준에 부합하는 언어로 자리잡게 된다. 또한 유니티 엔진의 3D에 사용되면서 점점 더 인기를 끌게 되었다고 한다. 2020년 3월에는 C#8.0 버전까지 배포되었다.

 

스크립트의 기본 구조를 살펴보자.

 

1~3번줄 코드는 using으로 시작한다.

이것은 스크립트 외부에서 필요한 부분을 가져다 사용(using)한다는 뜻이다.

 

1~2번줄 코드

System.Collections , System.Collections.Generic은 데이터 저장 타입(Type)을 제공하는 코드이다.

3번줄 코드

UnityEngine(유니티 엔진)은 유니티가 동작하는데 필요한 기능을 제공한다.

 

5번줄 코드

class(클래스)이름 (스크립트명)을 정한다. C#은 클래스 단위로 관리한다.

6번줄과 18번줄의 중괄호 { } 블록 사이에 처리 코드를 작성한다.

클래스명과 콜론 뒤에 MonoBehaviour은 클래스를 컴퍼넌트로 만드는 역할을 한다.

클래스가 컴퍼넌트로 사용할 수 있어야 오브젝트에 연결할 수 있기 때문이다.

 

7번줄, 13번줄에 있는 // (더블 슬래시)로 시작하는 줄은 주석(comment)이다.

주석은 편집자가 참고하거나 노트하기 위해 작성하는 문장이며 코드에는 영향을 미치지 않는다.

코드 중간에 주석을 사용할 수도 있다.

 

8번줄, 14번줄에 있는 Start( ) , Update( )는 메서드(method ; 함수)를 나타낸다.

메서드 코드는 그 다음에 있는 중괄호 안에 작성한다.

 

7번줄과 13번줄 주석에는 다음과 같은 메모가 적혀있다.

 

Start 메서드는 스크립트를 실행하면 첫 프레임 업데이트 전에 호출되어 한번만 실행된다.

(Start is called before the first frame update)

 

Update 메서드는 프레임 당 한번씩 호출된다.

(Update is called once per frame)

 

예를 들어 어떤 캐릭터가 오른쪽으로 이동하는 장면을 코딩하려면

Start메서드에서 캐릭터를 표시하는 코드를 작성하고

Update메서드에는 캐릭터를 오른쪽으로 이동하는 처리를 코드로 작성하면 된다.

 

3. 프레임(frame)

 

영화, 애니메이션 등과 마찬가지로 게임도 한 컷의 그림을 연속으로 바꾸어 움직임을 표현한다.

이때 '한 컷의 그림'을 프레임이라고 한다.

 

1초에 얼마나 많은 프레임을 보여 주느냐에 따라 움직임의 속도가 결정된다.

이 단위가 FPS (Frame Per Second ; 초당 프레임 수)이다.

 

보통 영화는 24FPS, 게임은 60FPS이다.

즉, 게임은 1초에 60번 프레임이 바뀐다는 말이며, 1프레임은 1/60초의 속도라는 뜻이다.

또한 프레임 간의 시간은 Time.deltaTime 으로 나타낸다.

 

끝.

Wraven...