Menggulir sehingga item yang dipilih berada di bagian atas daftar item turun bawah

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan verifikasi

Windows
  • jendela 11
Editor Kesatuan
  • 25f1/3/2020

Prasyarat untuk tip ini

Pengaturan berikut telah dibuat sebelumnya sebagai prasyarat untuk penjelasan tips ini.

Saat menampilkan daftar item drop-down, item teratas selalu ditampilkan.

Jika jumlah item drop-down lebih besar dari area drop-down, scrolling akan ditampilkan, Pada saat itu, item pertama yang ditampilkan akan selalu menjadi item di atas.

Ini juga berlaku ketika item di bagian bawah dipilih dan diperluas.

Namun, beberapa orang mungkin menginginkan item yang mereka pilih di bagian atas daftar saat diperluas. Untuk mengakomodasi ini, Anda perlu mengkonfigurasi pengaturan tambahan berikut:

Menggulir sehingga item yang dipilih berada di bagian atas saat memperluas drop-down

Ini dilakukan oleh skrip. Tambahkan skrip ke proyek Anda dan beri nama , DropdownScroll tetapi namanya sewenang-wenang.

Saat Anda membuka Editor Skrip, masukkan yang berikut ini:

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);
  }
}

Isi kodenya tidak terlalu rumit. Saat drop-down diperluas, posisi gulir dihitung dan diatur sehingga item yang dipilih berada di atas.

Start Alasan untuk menuliskannya dalam metode ini adalah karena mengasumsikan bahwa proses inisialisasi akan bekerja setiap kali dropdown diperluas.

Setelah Anda menyimpan kode, lampirkan skrip ini Dropdown Template ke .

Temolate Objek di bawahnya dihasilkan ketika drop-down diperluas setelah game dijalankan. Komponen terlampir juga diinisialisasi pada saat penyebaran. Juga, ketika drop-down ditutup, objek yang diperluas dihancurkan, Jika Anda menyebarkannya lagi, itu akan dihasilkan lagi, sehingga proses inisialisasi akan dijalankan setelah setiap penyebaran.

Mari kita coba.

Seperti disebutkan di atas, drop-down yang belum mengambil tindakan apa pun tidak akan terlihat meskipun Anda memperluasnya dengan item di bawah ini dipilih. Di sisi lain, jika Anda memperluas drop-down yang kami tangani, Anda dapat melihat bahwa itu digulir ke titik di mana Anda dapat melihat item yang dipilih.