Skip to content

DragDropSystem

ln32 edited this page Aug 6, 2024 · 6 revisions

Overview_DragDropSystem

DDO_0

DragDropSystem

DDO_1

  1. 배경

    상용 게임들 처럼 GUI → GUI 로 Drag & Drop 으로 반응해서 적당한 동작을 실행하는 시스템

  2. 기능

    1. 오브젝트의 OnOver, OnClick ,OnDrag 같은 입력 이벤트들은 제공되는 Unity.iEventHandler 활용

    2. Drag & Drop의 srcGUI는 DragDropObject(DDO)로, dstGUI는 ResponseByDrop(RBD)로 구현

    3. DDO → RBD의 일반적인 Drag & Drop 상호작용 발생 시, 각 반응 시나리오는 아래와 같다

      1. DDO.OnOver → DDO 위에 커서를 올릴 시
      2. DDO.OnClick → DDO를 클릭 시
      3. DDO.OnDragStart → DDO를 클릭 후 마우스를 이동 시
      4. DDO.OnDrag → OnDragStart 발생 후, 마우스 이동 시
      5. RBD.OnOver → OnDragStart 발생 후, RBD위에 커서를 올릴 시
      6. DDO.OnDragEnd → OnDragStart 발생 후, 마우스 클릭을 해제 시
      7. RBD.OnResponse_byDropEvent → RBD.OnOver 중에 DDO.OnDragEnd이 발생 시
    4. 위와 같은 구성으로 인해 여러 상황의 이벤트를 유동적으로 처리 가능하다.

iDragDropObject (= DDO)

DDO_2

  1. 배경

    Drag & Drop 시나리오의 시작점이 될 GUI들에게 해당 컴포넌트 부여

  2. 기능

    1. 이 컴포넌트들은 커서가 OnOver됬을 때 약한 focus효과를 추가한다
    2. 기본적으로 가방에 들어있는 각각의 Item들은 이 항목을 가진다.
    3. 클릭부터 시작하여 데이터를 메니저에게 보냄으로 드래그만 처리하는게 아닌 클릭같은 기타등등까지 처리한다.
    4. 만약 OnDragEnd가 발생 시 아무 RBD와도 반응하지 못했다면 드래그 시작할 때 저장해뒀던 posiition 데이터를 근거로 본인 자리로 돌아온다.
    5. 만약 드래그를 시작했을 경우 해당 GUI는 화면 가장 위로 띄워지며 커서의 위치랑 계속 동기화 하여 커서를 따라다니도록 구현한다.

iResponseByDrop (= RDB)

guiRBD

  1. 배경

    Drag & Drop 시나리오의 도착점이 될 GUI들에게 해당 컴포넌트 부여한다.

  2. 기능

    1. 이 컴포넌트들은 커서가 OnOver됬을 때, 만약 DDO.OnDragStart를 만족한다면 약한 focus효과를 추가한다.

    2. 기본적으로 Sell Item Zone, Purchase Item Zone, Enhance Item Zone 등등은 항목을 가진다.

    3. focus를 띄울 때 각각의 RBD는 본인의 조건과 비교하여 알맞은 이펙트를 띄운다.

      → ex) RBD_onlySkill에 Equipment Item 을 Drag & Drop한다면 불가능하다는 effect를 띄움

      → 해당 조건판단은 일단은 RDM에 실려있습니다, 씬마다 다른 조건이 나와야할수도 있다봐서 RDM에 했지만 결국 씬마다 다른 상황이 나오진 않아서 회의적.

iInvenSlot

DDO_3

  1. 배경

    Drag & Drop 시나리오의 시작점과 도착점이 둘다 가능한 GUI들에게 부여될 컴포넌트

  2. 기능

    1. InventorySlot같은 경우, 아이템을 할당, 작업 및 해제를 수행해야 하기에 조건1을 만족하기 때문에 DDO와 RBD의 기능을 둘 다 수행할 수 있는 iSlot을 구현했다.
    2. 물론 이곳의 RBD도 조건이 존재 할 수 있다. 예를들어 Equip Slot에 Skill Item을 Drag & Drop 한다면 불가능하지만 Equipment 장비들은 계속 갈아 끼울 수 있다.
    3. 또한 해당 슬롯들은 OnClick Event 시 ItemInfo를 리턴하면서 본인에게 할당 된 ItemUnit Data를 Info Data GUI에 게시를 구현했다.

iRDB_DDO_Manager (= RDM)

DDO_4

  1. 배경

    일관된 RBD DDO 상호관 이벤트 처리를 위해 구현

  2. 기능

    1. RDM은 모든 DDO & RBD 를 가지고있는 Canvas들을 자식으로 가지고있다.
    2. 또한 RDM은 대다수의 오브젝트들을 참조 하고 있다.
    3. 결국 TopParent을 참조하면 RDM이 나오므로 이벤트 발생 시 DDO, RBD는 RDM에게 알린다.
    4. 그 후, RDM은 본인이 참조하는 오브젝트들과 상호작용해서 원하는 작업을 수행한다.

Overall
  • MyInputManager

  • Drag Drop Sysytem

    [ List up ]
    • Interface iDragDropObject ( = DDO )

    • Interface iResponseByDrop ( = RDB )

    • Interface iInvenSlot ( = DDO && RDB )

    • Interface iRDB_DDO_Manager ( = RDM )

      • RDM : Event_Swap Item
      • RDM : Event_Enhance Item
      • RDM : Event_Equip Item
      • RDM : Event_Spend Item
      • RDM : Event_Consume Item
      • RDM : Event_Consume Item
  • SceneProcessor

    [ List up ]
    • Arrive Scene ( = on init )
    • Exit Scene ( = on destory )
    • Inven Set ( = on Arrive & Exit )

Scene_Map

Inventory
  • Inventory

    • Load GUI & Upload with Item Data
    • Blur Background Texture
    • RBD : Equip Slot
    • RBD : Consume Item

Scene_Camp

Scene_Shop

Clone this wiki locally