물체랑 유저 간의 상호작용을 구현하고 싶은데요. 유저 쪽에는 상태 기계를 만들어 둬서 상호작용을 담당하는 상태 스크립트가 있습니다.
물체에 OnTriggerEnter했을 경우 상호작용 쪽으로 해당 물체 Gameobject 자신의 레퍼런스를 넘기고, 유저 쪽 상태 기계에서 본인 애니메이션이 끝날 시점에 물체가 가진 상호작용 결과 함수를 호출하고 싶어요.
그래서 든 생각이, 우선 부모 클래스 abstract class Interactable_Object를 만들고 그 클래스에 상호작용 결과 함수 virtual void Interact(); 를 만듭니다.
그리고 세부 처리는 Object_Switch : Interactable_Object / Object_Obstacle : Interactable_Object 등으로 상속해서 가상함수를 구현하고요.
끝으로 유저 상태 기계 쪽에서 상호작용 결과 처리를 Gameobject.getcomponent<Interactable_Object>().Interact(); 로 각자 오브젝트가 가진 interact를 호출할 수 있을까요?
한줄요약: 부모 오브젝트 컴포넌트가 가진 부모 함수로 자식 오브젝트의 상속받은 함수를 콜할 수 있는가?
유니티 허브로
유니티를 안해서 모르겠는데
딱보니 객체를 다른 객체의 메서드로 넘기고 그 메서드에서 인자로 받은 객체갖고 자신의 상태를 바꾸는? 그런거하고싶은거같은데
그리짜도 되는데 만들다보면 객체사이 캡슐화를 깨야할게 보일거임
근데 애초에 상호작용이니까 그정도 노출은 있는게 맞는듯
한줄요약이 먼말인지 모르겠는데 비지터패턴 아님?
한줄요약이 있었네.. 다운캐스팅하면 되지 않을까 생각해범
타입을 내려서 호출하는게 아니라 인자로 하위타입을 받아서 호출한다는거 아님?
오면다시 덧글좀 달아주셈 님이 멀원하는지 정확히 모르게씀
자식 클래스로 상속받아서 오버라이딩한걸 다시 부모가 불러낸다는건가
무슨말인지 잘 모르겟슴
Object 클래스를 상속받은 Object_1 Object_2를 만들고 가상함수 Interaction을 각각 재정의했을 때, 외부에서 getcomponent<Object>().Interaction(); 으로 부모 컴포넌트를 통해 자식 컴포넌트의 가상함수를 따로 호출할 수 있나요?
getcomponent<Object>()의 동적타입이 부모임 자식임
자식인게 정상적인거고 그런상황에선 그냥 호출해주면됨 가상함수니까
그렇군요. 한번 시도해 보겠습니다.
다른 오브젝트에서 부모에서 추상화된 함수를 가지고 자식에 함수에 접근은 당연히 가능 - dc App
애초에 그렇게 쓸려고 있는거 아닌가 - dc App