본문 바로가기
스파르타 내배캠

스파르타 내배캠 Unity 3기 - 45

by LemongO 2024. 3. 5.

진짜가 왔다...!

 

 

드디어 내일부터 최종 팀 프로젝트를 진행한다... 무섭구만;;;

 

 


Virtual / Override

 

뜬금없이 버츄얼과 오버라이드 이긴한데 뭔가 너무 쉬운걸 놓치고 있던 느낌이라 생각난김에 써야겠다.

 

평소에는

 

A 라는 클래스와

 

A 클래스를 상속받은 Ab 클래스가 있고

 

Ab 클래스가 씬에 컴포넌트로 나와있는 상태에서

 

A 클래스를 가져와 virtual 메서드를 호출하면

 

Ab 클래스가 override 하더라도

 

A 클래스의 virtual 메서드만 호출이 되는 줄 알았다.

 

 

그림처럼 Manager 에서 Ab 클래스를 컴포넌트를 가지고있는 ab 오브젝트에게서 A 클래스를 가져와

A.Clear() 를 하면 당연히 Ab 클래스의 override 된 Clear는 실행을 안 할거라 생각했다.

 

실제 예시를 들면

 

@Scene 오브젝트는 TestScene 클래스를 컴포넌트로 가지고있고

 

TestScene 클래스는 BaseScene 클래스를 상속받으며 override 된 Clear 메서드를 가지고 있다.

 

 

그리고 매니저에서 LoadScene 메서드 호출 시, 현재 씬의 BaseScene 클래스를 가져와 Clear 메서드를 호출하는데

그 부분은 TestScene 에서 Update로 처리가 가능하니 실행해보았다.

 

 

참고로 BaseScene은 Clear 메서드가 비어있다.

 

 

일단 내가 생각한 것으론 BaseScene을 가져와 Clear를 실행했으니 아무것도 출력이 안 될 것이라 생각했다.

 

하지만...

 

 

TestScene 클래스에서 Clear가 실행된 것으로 디버그 되었다... 이게 되리라 생각을 전혀 안 하고 있었는데

 

아마 다음과 같은 부분에서 헷갈렸던 것 같다.

Some 메서드에 접근 하려고하는데
A 클래스엔 없지만
Ab 클래스엔 있는 경우

이 경우와 헷갈려서 그랬던 것 같다.