Ad Block 한번만 꺼주시면 안될까요..?
게임 개발/C#

유니티 C# override, virtual

UniCoti(유니코티) 2022. 11. 21.

유니티 공부를 조금 해본 사람이라면,

서적이나 다른 사람이 만든 코드에서 

이러한 새로운 개념을 보았을 것이다.

 

이 개념들은 생각보다 쉽다.

간단히 말하자면,

override는 이 함수를 고치겠다.이고,

virtual은 이 함수를 고쳐도 된다는 허락이다.

표기\의미
Override 함수를 고치는 걸 통보
Virtual 함수를 고치는걸 허락

 


유니티는 클래스 개념이 존재하는 만큼,

상속 등 함수를 공유할 수 있는 경우가 많은데,

 

그럴 때 쓰는 함수들이다.

 

예제를 보여주자면

public virtual void OnPointerUp(PointerEventData eventData)
    {
        input = Vector2.zero;
        handle.anchoredPosition = Vector2.zero;
    }
    
    //이 클래스 이름은 Joystick 이다.

가장 상위 클래스(조이스틱)의 손을 떼었을 때 코드이다.

 

virtual이 이 함수를 고쳐도 된다고 허락하고 있다.


public override void OnPointerUp(PointerEventData eventData)
    {
        background.gameObject.SetActive(false);
        base.OnPointerUp(eventData);
    }
    
    //이 클래스의 이름은 FloatingJoystick이다. Joystick 클래스를 상속받음.

이건 위의 Joystick클래스를 상속한 FloatingJoystick 스크립트이다.

 

위의 함수를 보면 virtual에서 override로 바뀐 것을 알 수 있다.

 

위에서 설명했듯이, 상위 클래스에서 이 함수를 고쳐도 된다고 허용했기에,

하위 클래스에서 override로 고치겠다고 말한 거와 같다.


여기서 주의해야 할 것이 있는데,

override를 써서 함수를 새로 만들었다면,

원래의 기능은 모두 사라진다.

 

그래서 override를 사용한 함수에 한하여

base라는 키워드를 제공한다.

 

base. 상위 클래스 함수명  이렇게 입력하면 상위 클래스에서

만들어놓았던 함수가 복사된다. 

위 코드를 보면 base를 이용해서 원래의 기능도 포함시킨 걸 볼 수 있다.

 


이 정도만 알아두면 될 거라고 생각하며,

이만 글을 마치겠다.

 

도움이 되었길 바라며,

 

끝.

'게임 개발 > C#' 카테고리의 다른 글

C# override  (0) 2022.08.19
C# enum  (0) 2022.08.17
유니티) C# 기초 자료형 정리  (0) 2022.08.16
유니티 C# rigidbody를 이용한 캐릭터 이동  (0) 2022.08.16
유니티 C# get, set(프로퍼티)  (0) 2022.08.15

댓글

💲 추천 글