Cuộn để mục đã chọn ở đầu danh sách các mục thả xuống

Trang Cập Nhật :
Ngày tạo trang :

Môi trường xác minh

Windows
  • cửa sổ 11
Biên tập viên Unity
  • 2020.3.25f1

Điều kiện tiên quyết cho mẹo này

Các cài đặt sau đây đã được thực hiện trước như một điều kiện tiên quyết để giải thích các mẹo này.

Khi hiển thị danh sách mục thả xuống, mục trên cùng luôn được hiển thị.

Nếu số lượng mục thả xuống lớn hơn khu vực thả xuống, cuộn sẽ được hiển thị, Khi đó, mục đầu tiên được hiển thị sẽ luôn là mục ở trên cùng.

Điều này cũng đúng khi mục ở dưới cùng được chọn và mở rộng.

Tuy nhiên, một số người có thể muốn mục họ đang chọn ở đầu danh sách khi được mở rộng. Để đáp ứng điều này, bạn cần định cấu hình các cài đặt bổ sung sau:

Cuộn để mục đã chọn ở trên cùng khi mở rộng menu thả xuống

Điều này được thực hiện bởi một kịch bản. Thêm một tập lệnh vào dự án của bạn và đặt tên cho nó, DropdownScroll nhưng tên là tùy ý.

Khi bạn mở Trình soạn thảo Tập lệnh, hãy nhập thông tin sau:

using UnityEngine;
using UnityEngine.UI;    // 追加

public class DropdownScroll : MonoBehaviour
{
  public void Start()
  {
    // スクロールの計算に必要な各コンポーネントを取得
    var dropdown = GetComponentInParent<Dropdown>();
    var scrollRect = gameObject.GetComponent<ScrollRect>();
    var viewport = transform.Find("Viewport").GetComponent<RectTransform>();
    var contentArea = transform.Find("Viewport/Content").GetComponent<RectTransform>();
    var contentItem = transform.Find("Viewport/Content/Item").GetComponent<RectTransform>();

    // 選択しているアイテムの位置や表示領域をもとに選択アイテムまでスクロールすべき量を計算する
    var areaHeight = contentArea.rect.height - viewport.rect.height;
    var cellHeight = contentItem.rect.height;
    var scrollRatio = (cellHeight * dropdown.value) / areaHeight;
    scrollRect.verticalNormalizedPosition = 1.0f - Mathf.Clamp(scrollRatio, 0.0f, 1.0f);
  }
}

Nội dung của mã không quá phức tạp. Khi menu thả xuống được mở rộng, vị trí cuộn được tính toán và đặt sao cho mục đã chọn ở trên cùng.

Start Lý do để viết nó trong phương thức là vì nó giả định rằng quá trình khởi tạo sẽ hoạt động mỗi khi menu thả xuống được mở rộng.

Sau khi bạn lưu mã, hãy đính kèm tập lệnh này Dropdown Template vào .

Temolate Các đối tượng bên dưới nó được tạo ra khi menu thả xuống được mở rộng sau khi trò chơi được thực thi. Thành phần đính kèm cũng được khởi tạo tại thời điểm triển khai. Ngoài ra, khi đóng menu thả xuống, đối tượng mở rộng sẽ bị phá hủy, Nếu bạn triển khai lại, nó sẽ được tạo lại, vì vậy quá trình khởi tạo sẽ được thực thi sau mỗi lần triển khai.

Hãy thử nó.

Như đã đề cập ở trên, menu thả xuống chưa thực hiện bất kỳ hành động nào sẽ không hiển thị ngay cả khi bạn mở rộng nó với mục bên dưới được chọn. Mặt khác, nếu bạn mở rộng menu thả xuống mà chúng tôi đã giải quyết, bạn có thể thấy rằng nó được cuộn đến điểm bạn có thể thấy mục đã chọn.