유니티 공부를 조금 해본 사람이라면,
서적이나 다른 사람이 만든 코드에서
이러한 새로운 개념을 보았을 것이다.
이 개념들은 생각보다 쉽다.
간단히 말하자면,
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# - Possible null reference argument for parameter 's' in 'int int.Parse(string s)'. 오류 해결법 (CS8600, CS8604 (0) | 2024.07.29 |
---|---|
dynamic programming(dp)와 메모이제이션(memoization) - C# (0) | 2024.07.10 |
C# override (0) | 2022.08.19 |
C# enum (0) | 2022.08.17 |
유니티) C# 기초 자료형 정리 (0) | 2022.08.16 |
댓글