
금요일에 진도를 꽤 뺀 상태였기 때문에 '시간을 좀 더 투자해서 숙제까지 끝낸 다음에 TIL을 써야겠다~' 라고 생각했지만, 그렇게 1주차 과제도 TIL도 끝내지 못한 사람이 되었다. 앞으로는 그 어떤 이유에서라도 TIL을 미루지 말자...
1주차 강의를 들으면서 나를 소소하게 당황시킨 부분은 강사님과 내 유니티 버전이 달라 메뉴가 다를 때였다.
제일 기억에 남는 실수는 C# 스크립트 파일을 만들 때였는데, 당시 강사님의 화면과 내 화면은 이 정도로 달랐다.
여기서 강사님과 똑같은 파일을 만들려면 MonoBehaviour Script를 눌러 C# 스크립트를 생성하면 된다.
Q. 나는
C# Script를 생성하고 싶은건데 왜 듣도보도 못한MonoBehaviour Script라는 걸 생성해야 하는 거지?A.
MonoBehaviour Script는MonoBehaviour클래스를 상속 받은 C# 스크립트 파일을 말한다. 우리는 이MonoBehaviour를 상속받아야만 앞으로 줄기차게 쓸Start나Update,OnCollisionEnter,OnDestroy같은 것들을 사용할 수 있다. 👉[C# Unity] MonoBehaviour란?즉, 이름만 다를 뿐 강사님이 생성하는
C# Script는MonoBehaviour Script와 같은 것이다.
그런데 당시의 나는 MonoBehaviour라는 것이 뭔지도 몰랐으므로 당연히 MonoBehaviour Script가 아닌 제일 비슷해보이는 Empty C# Script를 클릭해서 스크립트를 생성했다.
자... 이제 여기서 문제.
Q. Empty가 무엇이냐?
A. 비었다는 뜻이다.Q. 비었다는 건 결국 무슨 뜻이냐?
A.MonoBehaviour를 상속받지 못했다는 뜻이다….
백문이 불여일견이니 내가 생성한 Empty C# Script의 코드를 먼저 살펴보겠다.
using UnityEngine; public class Rtan { }
다음은 MonoBehaviour Script로 생성한 코드를 살펴보겠다.
using UnityEngine; public class Rtan : 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() { } }
차이가 느껴지는가?
보다시피 MonoBehaviour Script로 생성한 파일은 MonoBehaviour를 상속받고, Start와 Update 함수를 자동으로 생성해 주기 때문에, 딱 보기에도 Empty C# Script보다 긴 것을 알 수가 있다.
때문에 Empty C# Script로 스크립트 파일을 생성한 나는 다음과 같은 오류를 맞닥뜨릴 수밖에 없었다.
Can't add script behaviour 'Rtan'. The script needs to derive from MonoBehaviour!
... 당연하게도 나는 이해하지 못했다.
검색을 해보니 스크립트 파일명과 스크립트 안의 클래스명이 다르면 이런 오류가 생긴다고 하더라.
Q. 잠깐! 파일명은 또 뭐고 클래스명은 또 뭐야?
A. 위 코드를 보면
public class Rtan란 부분이 있는데, 여기서 바로Rtan이 클래스 이름이다. 파일명은 말 그대로 유니티에서 보여지는 스크립트의 파일명을 의미한다. (EX-Rtan.cs)참고로 나의 문제는
MonoBehaviour를 상속받지 못한 것 밖에 없었으므로 클래스명과 파일명은 당연히 같았다...
결국 구글링으로 방법을 찾지 못한 나는 오류 메세지의 뜻을 해석하려고 노력했다. 그래서 대체 MonoBehaviour가 뭔데?!
다행히 그건 맞는 방향의 노력이라, 나는 곧 앞서 설명했던 것과 같이 강사님과 같은 C# 스크립트를 생성하려면 MonoBehaviour Script를 눌러야 한다는 것을 알아차릴 수 있었다...
사실 Empty C# Script로 파일을 생성했더라도 public class Rtan 부분을 public class Rtan : MonoBehaviour 처럼 수정해주는 것만으로도 오류는 해결할 수 있겠지만! 매번 빈 파일을 생성해서 손수 상속시켜줄 수는 없는 노릇이니 애초에 MonoBehaviour Script로 잘 생성하도록 하자👍