public class CharacterChild_Idle
{
    Player player = null;
    public void Init()
    {
        player = GameObject.Find("Player").GetComponent<Player>();
    }
}

public class CharacterChild_Walk
{
    Player player = null;
    public void Init()
    {
        player = GameObject.Find("Player").GetComponent<Player>();
    }
}

위의 코드처럼 각각 다른 상태클래스에 같은 내용이 중복되어 들어간다고 가정해보자.

새로운 상태 클래스를 정의할때마다 같은 내용을 일일이 다 넣어줘야 하고, 수정을 할때 하나씩 다 고쳐야 하므로 번거롭고 비효율적이다.

따라서 같은 내용을 가진 부분을 묶어 다른 클래스에서 정의하고, 해당 클래스를 상속받아 사용하면 사용과 수정이 용이해진다.

 

중복되는 부분을 빼서 따로 클래스에 넣어두었다.

public class CharacterBase
{
    protected Player player = null;
    public void Init()
    {
        player = GameObject.Find("Player").GetComponent<Player>();
    }

    public virtual void Sample()
    {
        // 자식에서 재정의 가능한 함수 (virtual)
    }
}

접근한정자 protected를 사용해 상속받은 하위 클래스에서도 접근 할 수 있게 해준다.

만약 재정의가 필요한 함수가 있다면 virtual키워드를 사용해 자식에서 재정의 할 수 있게끔 해준다.

 

public class CharacterChild_Idle : CharacterBase
{
    public override void Sample()
    {
        base.Sample(); // 부모의 Sample을 먼저 호출
    }
}

중복되었던 코드를 부모클래스로 두고 상속받아 사용한 코드이다.

부모클래스에서 virtual키워드를 사용해 정의되었던 함수는 자식클래스에서 override키워드를 사용해 재정의할 수 있다.

'Unity' 카테고리의 다른 글

Mesh  (0) 2021.06.02
애니메이션 - StateMachineBehaviour  (0) 2021.05.28
애니메이션 - Legacy, Generic, Humanoid  (0) 2021.05.26
애니메이션  (0) 2021.05.26
싱글톤  (0) 2021.05.26

+ Recent posts