물에 살고싶은 개발자

같은 부모클래스를 갖는 클래스를 일반화해서 호출하는법 본문

Unity3D

같은 부모클래스를 갖는 클래스를 일반화해서 호출하는법

돼지사랑 2015. 10. 26. 17:03

일반화라는 타이틀을 달기엔 좀 꼼수에 해당하는 방법이긴 하지만..


예를들어 


TargetObject.GetComponent<CsPlayer>().Be_Attacked(123);


이런 코드가 있을때 CsPlayer 부분이 상황에따라 자주 변경되어야만 할때,

일반화가 필요하다면, CsPlayer의 최상위 부모클래스(CsCharacter)를 호출하면

자연스럽게 CsPlayer가 호출된다.


좀더 구체적으로 설명하자면,

클래스의 계보는 이러하다

이런식의 상속관계에서


그라나도 스크립트를 달고있는 오브젝트가 보스 스크립트를 달고있는 오브젝트에게 공격을 가하는것을 구현하려 할 경우

타겟오브젝트에 보스 오브젝트를 넣고

TargetObject.GetComponent<CsCharacter>().Be_Attacked(123);

요렇게 호출해주면 


자연스럽게 보스 스크립트에 있는 Be_Attacked() 메서드가 호출된다

오버라이드를 안한 경우에는 상위클래스에 오버라이드 되있는녀석을 호출한다.


예를들어 그라나도 오브젝트의 그라나도 스크립트엔 Be_Attacked()가 오버라이드 되어있지 않고

플레이어엔 Be_Attacked()가 오버라이드 되어있을 경우 플레이어에 있는 Be_Attacked()를 호출하며 해당 객체는 그라나도가 된다. 같은개념으로 플레이어에도 오버라이드가 안되어 있을 경우엔 캐릭터에 있는 Be_Attacked()가 호출되며, 역시 해당 객체는 그라나도가 된다.


정확하게 얘기하면 캐릭터나 플레이어에 있는 Be_Attacked()가 아니지만

물리적으로 코드의 위치를 표현하자면 그렇다 하는 얘기다.


알고나서 생각해보면 너무나도 당연하고 간단한 것이였지만,

그 간단하고 당연한게 생각이 나지않아 세시간가까이를 허비하게 되었다...


Comments