본문 바로가기
~ 2024.03/Unity 개발

[Unity 2D 개발] 상속과 오버라이딩을 이용한 Sprite 변경

by Monett 2020. 4. 20.
반응형

Project_Bulb 는 Unity와 C#을 사용해 개발한다.

 

특정 행동으로 Sprite가 변경되는 Bulb 클래스와 그를 상속하는 DoorBulb 클래스가 있다.

두 클래스는 다른 Sprite를 사용하기 때문에 Sprite를 변경하는 함수를 구분해야 할 필요가 있다.

 

Bulb의 Sprite 변경 함수는 다음과 같다.

public void ChangeBulbImage()
{
    gameObject.GetComponentInChildren<SpriteRenderer>().sprite = gameManager.bulbSprites[(int)colorState];
}

Bulb의 Sprite 들을 GameManager 스크립트에 Sprite 배열로 저장했다.

GameManager의 인스턴스인 gameManager의 배열에서 Sprite를 가져오는 구조이다.


상속받는 서브클래스가 다른 Sprite를 사용하기 위해 메소드 오버라이딩을 사용했다.

슈퍼클래스인 Bulb의 ChangeBulbImage는 virtual 키워드를 사용했다.

public virtual void ChangeBulbImage()
{
    gameObject.GetComponentInChildren<SpriteRenderer>().sprite = gameManager.bulbSprites[(int)colorState];
}

서브클래스인 DoorBulb의 ChangeBulbImage는 override 키워드를 사용했다.

public override void ChangeBulbImage()
{
    gameObject.GetComponentInChildren<SpriteRenderer>().sprite = GameManager.instance.doorBulbSprites[(int)colorState];
}

이것으로 슈퍼클래스의 메소드는 숨기고(하이딩), DoorBulb의 Sprite를 정상적으로 가져왔다.

반응형