스크롤 뷰 길게 누르기(uGUI)

7112 단어 uGUIC#Unity

전제 조건

  • unity 2018.4.2f1、2018.4.22f1
  • uGUI의 ScrollRect, VerticalLayoutGroupContentSizeFitter와 함께 사용되는 스크립트 구성 요소입니다.
  • 할 수 있는 일

  • 구성 요소를 세로 스크롤 목록 보기에 추가하여 항목을 길게 + 드래그하여 정렬할 수 있습니다.

  • 모드 전환, 드래그 시작, 정렬 업데이트, 드래그 종료 및 콜백 항목 선택을 설정할 수 있습니다.
  • 리소스 가져오기


    ReOrderableList.unitypackage 다운로드
    소스 여기 있어요.
  • 스크립트 구성 요소로 주로 ReOrderableListListElement 을 사용합니다.
  • ListElement 명시되지 않은 경우에도 내부적으로 사용됩니다.
  • ElementIndex는 주로 내부에서 사용하는 조합이다.
  • Tetr4labUtility는 내부적으로 사용되는 유틸리티 클래스입니다.
  • Sample~의 자원은 필요하지 않습니다.
  • 일단 써보고 싶어요.

  • 동적 목록
  • 스크립트에서 목록을 생성하려면 SampleScene (dynamic) 을 참조하십시오.
  • 에 해당하는 주 스크립트는 SampleDynamic 입니다.
  • 정적 목록
  • 장면에서 미리 목록을 완성하려면 SampleScene (static) 을 참조하십시오.
  • 에 해당하는 주 스크립트는 SampleStatic 입니다.
  • 용법의 체계적 설명


    배치

  • Scroll View를 만든 후 다음 절차에 따라 태그를 배치합니다.
  • 크기(0, 0)의 빈 객체를 ViewPort의 왼쪽 아래와 오른쪽 위 모서리에 배치하여 비활성 상태로 만듭니다.
  • 컨텐츠에도 비활성 상태로 빈 객체를 배치합니다.
  • 사용하지 않으려면 LayoutElement, 검사ignoreLayout를 추가하십시오.
  • "Scroll View"의 "Content"에 VerticalLayoutGroupContentSizeFitter 를 추가하여 적절한 설정을 합니다.

  • 증가VerticalLayoutGroupPadding 드래그 시 편차가 발생합니다.
  • ScrollRect와 같거나 직계존속에 속하는 대상ReOrderableList을 더하여 적당한 설정을 한다.
  • SampleScene Scroll View에 첨부된 상위 객체입니다.
  • ReOrderableList의 설정 내용
    항목
    설명
    ViewportMinMark
    ScrollView/Viewport 왼쪽 아래에 있는 태그를 지정합니다.
    ViewportMaxMark
    ScrollView/Viewport의 오른쪽 위 모서리에 있는 태그를 지정합니다.
    ContentMinMark
    ScrollView/Cent 왼쪽 아래에 있는 태그를 지정합니다.
    ContentMaxMark
    ScrollView/Cent의 오른쪽 위 모서리에 있는 태그를 지정합니다.
    LongPress
    길게 판단하는 초수를 지정합니다.
    AutoScrollSpeed
    바깥쪽으로 드래그할 때의 스크롤 속도를 지정합니다.학점은 적당하다.
    OnChangeMode
    모드 전환 콜백을 설정할 수 있습니다.
    OnSelect
    항목 선택 콜백을 설정할 수 있습니다.
    OnBeginOrder
    정렬 콜백을 시작할 수 있습니다.
    OnUpdateOrder
    정렬 업데이트 콜백을 설정할 수 있습니다.
    OnEndOrder
    정렬 끝 콜백을 설정할 수 있습니다.
  • 관리자에서 콜백 함수를 할당할 때 동적 모드(동적 매개 변수 전달)를 사용해야 합니다.(관리자에서 매개변수를 지정할 수 없습니다.)
  • 동적 목록의 경우

  • 스크립트에 목록을 생성합니다.
  • 장면에서 미리 목록을 완성하려면 정적 목록의 경우 을 참조하십시오.
  • ReOrderableList 클래스의 실례에 대해 다음과 같은 설명을 할 수 있다.
  • 생성된 목록 항목을 AddElement (~) 에 배치하십시오.
  • GameObject는 하나 이상의 GameObject [] 또는 List<GameObject>를 전달할 수 있습니다.
  • 항목을 직접 배치하거나 Scroll View에서 삭제할 수 없습니다.
  • 항목을 지울 때 사용ClearElement ().
  • 다음 방법을 사용하여 콜백을 지정합니다.
  • 등록 모드 전환 리셋AddOnChangeModeListener ()
  • 등록 모드 전환 리셋RemoveOnChangeModeListener ()
  • 등록 항목 선택 리셋AddOnSelectListener ()
  • 항목 선택 리셋 삭제RemoveOnSelectListener ()
  • 등록 순서 리셋 시작AddOnBeginOrderListener ()
  • 정렬을 시작하는 리셋 삭제RemoveOnBeginOrderListener ()
  • 등록 정렬 업데이트 리셋AddOnUpdateOrderListener ()
  • 정렬 업데이트 리셋 삭제RemoveOnUpdateOrderListener ()
  • 등록 정렬 종료 콜백 AddOnEndOrderListener ()
  • 정렬 끝 콜백 삭제RemoveOnEndOrderListener ()
  • bool Interactable 목록의 응답을 전환합니다.
  • bool Orderable에서 현재 드래그 가능 모드인지 확인할 수 있습니다.
  • List<int> Indexes, 현재 배열 순서를 얻을 수 있습니다.
  • List<GameObject> GameObjects에서 현재 정렬된 순서의 모든 항목 객체를 읽어들일 수 있습니다.
  • GameObject [int](인덱스)에서 현재 배열에서 지정된 항목 객체를 읽어들일 수 있습니다.
  • 정적 목록의 경우

  • 장면에서 미리 목록을 완성합니다.
  • 스크립트에서 목록을 생성하려면 동적 목록의 경우 을 참조하십시오.
  • 항목의 객체에 ListElementElementIndex 을 추가하고 ElementIndex 고유 Index 을 지정하십시오.

  • 관리자에서 콜백 함수를 할당할 때 동적 모드(동적 매개 변수 전달)를 사용해야 합니다.(관리자에서 매개변수를 지정할 수 없습니다.)
  • 답조

  • 모드 전환 콜백의 API는 void Action (bool) 이며 매개변수를 드래그할 수 있는지 여부입니다.
  • 모든 나머지 리셋은 void Action (int), 파라미터는 목표 항목Index 또는 외관상의 SiblingIndex이다.
  • 하고 있는 일

  • 항목 측면에서 포인터 이벤트를 가져오고 사용하지 않으면 모 항목ScrollRect에 던집니다.
  • 드래그 중에 투명한 가상 객체를 생성하여 프로젝트와 교환합니다.
  • SiblingIndex를 사용하여 프로젝트(및 가상)를 정렬합니다.
  • CanvasScaler 동적 레이아웃의 결과를 얻기 위해 표시 대상을 삽입하여 위치와 거리를 얻습니다.
  • 드래그 중인 포인터가 스크롤의 위아래로 떨어지면 한 끝의 거리에 대응하는 속도로 스크롤합니다.
  • 편성하다

  • 가로줄HolizontalLayoutGroup을 사용하고 싶습니다.
  • 이 요구를 고려해 극력Vector2으로 계산하지만 일부ReOrderableList.UpdateDraggingPosition () 등은 세로와 의존적이다.
  • 업데이트 정보

  • 6/13
  • 다중 터치, 터치, 마우스 및 사용 관련 문제를 수정했다.
  • 6/14
  • 모드 전환의 리셋을 준비하여 UI 디자인과의 독립성을 높였습니다.
  • 처음에 목록 측면에서 완성 버튼과 드래그 핸들 등을 제어합니다.
  • 목록 정보를 임의로 얻을 수 있는 수단을 확장하고 리셋 API를 간소화했다.
  • 6/15
  • 두 번째 손가락은 받지 않는다.
  • 2020/05/18
  • 미확정 드래그가 끝났을 때의 대상 항목이 이중으로 보이는 문제를 수정했다는 지적을 받았다.

  • @modernscape선생님, 지적해 주셔서 감사합니다.
  • 목록의 위조 대상을 드래그 과정에서 완전히 제거하기 전에 배열 정보를 얻었기 때문에 위조 대상과 진짜 대상을 열거했다.
  • 목록을 가져오는 것을 피하기 위해 프레임을 간단하게 지연시킵니다.
  • 참조 정보

  • 'Unity-UI-Extensions'라는 이름도'Re-orderable List'라고 하는데 보기만 해도 귀찮아서 절대 자신의 목적에 맞지 않고 제대로 보지 못했다.바퀴의 재발명일 수도 있다는 얘기다.
  • 좋은 웹페이지 즐겨찾기