앞 글에서 게임오브젝트에 기능을 부여하려면 Component(컴퍼넌트)를 연결한다고 했다.
C# 으로 작성한 스크립트 파일도 컴퍼넌트로 붙일 수 있다.
게임 오브젝트에 컴퍼넌트로 붙이기 위해 스크립트 파일을 만든 후 더블클릭 등으로 파일을 열면 아래와 같이 등록된 편집기로 편집할 수 있는 상태가 되고 유니티에서 제공하는 기본 코드가 나타난다.
5번 줄에 클래스명(PlayerController)이 있고 그 뒤에 : MonoBehaviour 이 붙어있다.
콜론 ( : ) 기호는 상속받는다는 뜻이고 상속하는 주체는 MonoBehaviour이라는 유니티의 Base Class(기본 클래스)이다 라는 뜻이다.
즉, MonoBehaviour은 유니티에서 스크립트 사용을 위해 C#으로 만들어 놓은 클래스 이름이며 PlayerController 클래스의 부모 클래스이다.
당연한 말이겠지만 스크립트가 유니티의 기능을 사용하기 위해서는 유니티의 MonoBehaviour 클래스를 상속해야 한다.
위 코드에 있는 Start( )메서드나 Update( )메서드 기능도 마찬가지이다.
스크립트 작성시 주의할 점은 스크립트명과 클래스명은 같아야 한다.
스크립트 파일명을 바꾸면 클래스명도 같은 이름으로 바꿔야 한다.
기본 스크립트 내용에 포함된 메서드에 대해 살펴보자.
이 메서드들은 MonoBehaviour 클래스 설정에 따라 특정 상황이 되면 자동으로 실행되는 메서드들이다.
이렇게 특정 상황에 호출되어 실행되는 것을 CallBack(콜백)이라고 부른다.
call back은 어떤 상황이 되면 계속 '다시 호출한다'는 뜻이다.
기본 스크립트에 Start, Update 메서드 2개만 표시되어 있지만 이외에도 CallBack으로 사용하는 메서드가 많이 있다.
그 중에서 중요한 기본 콜백 메서드 몇 개만 알아본다.
Awake ( )
이 메서드는 스크립트가 시작되면 호출해서 실행하며 Start메서드가 시작되기 전에 완료한다.
주로 스크립트에서 참조할 내용을 미리 준비하거나 초기화(initialization)할 때 사용한다.
예를 들어 7번 줄에서 물리에 사용할 Rigidbody 타입의 변수 myRb를 선언했다면 Awake메서드 안에서 그 변수에 해당 컴퍼넌트를 가져와서 저장해서 미리 준비해 두는 용도로 사용한다.
또한 게임에서 무기를 준비하는 코드 등도 여기에 넣을 수 있다.
Start ( )
Start메서드는 스크립트가 활성화되어 시작할 때 첫번째 프레임 전에 한번만 호출해서 실행하는 메서드이다.
다른 스크립트가 있을 경우 다른 스크립트의 Awake메서드가 모두 완료되기 전에는 실행되지 않는다.
여기에는 예를 들면 게임오브젝트의 처음 위치를 지정하거나 준비한 무기를 발사할 수 있는 상태로 만드는 것 등의 코드를 여기에 넣을 수 있다.
Update ( )
Update메서드는 프레임 당 한번씩 호출되어 실행하는 메서드이다.
만약 프레임 수가 60 이라면 Update메서드 안에 있는 코드가 1초에 60번 반복된다.
주로 캐릭터를 움직이게 하는 것과 같이 계속 작동해야 하는 작업 코드를 넣는다.
LateUpdate ( )
LateUpdate(늦은 update)메서드는 Update메서드가 실행된 후에 실행된다.
이 메서드의 용도는 예를 들어 캐릭터의 움직임을 따라가는 카메라 또는 방향을 캐릭터 쪽으로 돌리는 무기 등을 구현할 때 사용할 수 있다. 이런 경우 캐릭터 움직임은 Update메서드에 넣고 캐릭터 움직임에 따라 움직이는 게임오브젝트는 LateUpdate메서드에 넣으면 된다.
참고로 코드에서 사용하지 않는 콜백 메서드는 삭제하는 것이 성능 향상에 도움이 된다.
끝.
Wraven...
'취미로 하는 게임코딩_gameCodingAsHobby > 유니티와 C# 개념 정리_Concept Summary' 카테고리의 다른 글
유니티와 C# 개념 정리_006_함수(메서드) (1) | 2021.08.22 |
---|---|
유니티와 C# 개념 정리_005_타입과 초기화 (0) | 2021.08.22 |
유니티와 C# 개념 정리_004_변수 선언과 할당 (0) | 2021.08.22 |
유니티와 C# 개념 정리_003_C# 언어의 특징과 기본 구조 (0) | 2021.08.22 |
유니티와 C# 개념 정리_001_유니티의 특징과 장점 (0) | 2021.05.24 |