2010-04-23 12 views
4

이 질문에 Unity3D를 사용하고 있지만 일반적인 소프트웨어 엔지니어링 질문입니다.전역 상태에 따라 다르게 동작하는 객체의 디자인 패턴

Unity3D의 개체 (대화 형 개체)는 구성 요소 또는 동작으로 작성됩니다. 비헤이비어를 함께 사용하면 객체의 정확한 동작을 정의 할 수 있습니다.

다른 개체를 글로벌 상태에 따라 다르게 반응시키는 방법을 고민 중입니다. 예를 들어 대상을 타겟팅하는 도구는 장면의 원에만 적용됩니다. 그 도구를 선택하고 객체를 클릭하면 원이라면 사각형으로 바꿀 것입니다. 원이 아니라면 무시할 것입니다.

구성 요소 기반 엔터티 디자인을 사용하여 IsCircle이라는 동작을 정의하고이를 클릭하면 어떤 일이 일어나는지 확인합니다. 그러나 전체 응용 프로그램의 전역 상태에 액세스하는 가장 좋은 방법은 무엇입니까? if-else를 전환하지 않으려 고 솔루션을 분리하려는 경우

(문제는 OnMouseDown() 이벤트 핸들러가 매개 변수를 전달하지 않는다는 것입니다).

복합 패턴을 사용하는 환경에서 답을 기억해 주시면 감사하겠습니다.

답변

-1

Observer과 비슷한 점이 도움이 될 수 있습니까? 전역 상태를 기반으로 동작을 변경해야하는 모든 구성 요소는 ScreenManager과 같은 개체에 등록하고 전역 상태가 변경 될 때마다 변경된 순간에 등록 된 모든 구성 요소에 알리고 그에 따라 상태를 변경합니다.

+1

아니요, 사실 그는 아래에 언급 된 가브리엘처럼 상태 패턴이 필요합니다. 실제로 Wikipedia의 상태 패턴 페이지에는 펜과 그림이 포함 된 예제가 포함되어 있습니다. http://en.wikipedia.org/wiki/State_pattern –

+0

이 상황은 위키 피 디아 예제와 약간 다릅니다. 여기서 동작은 클릭 한 개체에 따라 다릅니다. 도구에 상태를 삽입하면 해당 주에서 반복되는 if 문으로 끝나며 어떤 유형의 모양을 볼 수 있습니다. 모양에 디자인과 같은 관찰자를 통해 상태를 주입하면 이러한 모든 if 문을 한 곳으로 모으고 반복되는 if를 많이 제거 할 수 있습니다. 도구를 변경할 때마다 활성 도구에 따라 모든 모양에 통보하고 한 지점에서 동작을 조정합니다. – derdo

0

아마도 조회 테이블 Dictionary<int, Func<int, TAction>>을 만들 수 있으며 개체를 만들 때 해당 개체에 적합한 작업을 추가 할 수 있습니다. 이렇게하면 스위치 사용을 피할 수 있으므로 개체를 수정할 필요가 없습니다.

상태를 관리 할 항목이 필요하다면 AutoFac을 만든 Nicholas Blumhardt가 작성한 이라는 멋진 상태 시스템 구현이 있습니다. 내 answer to this SO question 여기에 세부 정보가 나와 있습니다.

2

이 솔루션을 사용할 수 있는지 확실하지 않지만 상태 디자인 패턴을 보면 상태에 따라 객체의 동작을 변경하는 데 사용됩니다. 따라서 예제에서 상태를 사용자 위치로 이동해야합니다. 사물. 방문자 디자인 패턴과 어쩌면 어떤 종류의 멀티 메소드도 고려할 수 있습니다.

관련 문제