Κάντε κύλιση έτσι ώστε το επιλεγμένο στοιχείο να βρίσκεται στην κορυφή της λίστας αναπτυσσόμενων στοιχείων

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον επαλήθευσης

παράθυρα
  • Παράθυρα 11
Επεξεργαστής ενότητας
  • 2020.3.25στ1

Προϋποθέσεις για αυτήν τη συμβουλή

Οι ακόλουθες ρυθμίσεις έχουν γίνει εκ των προτέρων ως προϋπόθεση για την εξήγηση αυτών των συμβουλών.

Κατά την εμφάνιση της αναπτυσσόμενης λίστας στοιχείων, εμφανίζεται πάντα το επάνω στοιχείο.

Εάν ο αριθμός των αναπτυσσόμενων στοιχείων είναι μεγαλύτερος από την αναπτυσσόμενη περιοχή, θα εμφανιστεί η κύλιση, Εκείνη τη στιγμή, το πρώτο στοιχείο που εμφανίζεται θα είναι πάντα το στοιχείο στην κορυφή.

Αυτό ισχύει επίσης όταν το στοιχείο στο κάτω μέρος επιλέγεται και επεκτείνεται.

Ωστόσο, ορισμένα άτομα μπορεί να θέλουν το στοιχείο που επιλέγουν στην κορυφή της λίστας όταν αναπτυχθεί. Για να εξυπηρετήσετε αυτό, πρέπει να διαμορφώσετε τις ακόλουθες πρόσθετες ρυθμίσεις:

Κάντε κύλιση έτσι ώστε το επιλεγμένο στοιχείο να βρίσκεται στο επάνω μέρος κατά την ανάπτυξη του αναπτυσσόμενου μενού

Αυτό γίνεται με ένα σενάριο. Προσθέστε μια δέσμη ενεργειών στο έργο σας και ονομάστε την , DropdownScroll αλλά το όνομα είναι αυθαίρετο.

Όταν ανοίγετε το πρόγραμμα επεξεργασίας δέσμης ενεργειών, πληκτρολογήστε τα εξής:

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

Το περιεχόμενο του κώδικα δεν είναι τόσο περίπλοκο. Όταν αναπτυχθεί το αναπτυσσόμενο μενού, η θέση κύλισης υπολογίζεται και ρυθμίζεται έτσι ώστε το επιλεγμένο στοιχείο να βρίσκεται στην κορυφή.

Start Ο λόγος για τη συγγραφή του στη μέθοδο είναι επειδή υποθέτει ότι η διαδικασία αρχικοποίησης θα λειτουργεί κάθε φορά που επεκτείνεται το αναπτυσσόμενο μενού.

Αφού αποθηκεύσετε τον κώδικα, επισυνάψτε αυτήν τη Dropdown Template δέσμη ενεργειών στο .

Temolate Τα αντικείμενα κάτω από αυτό δημιουργούνται όταν το αναπτυσσόμενο μενού επεκτείνεται μετά την εκτέλεση του παιχνιδιού. Το συνημμένο στοιχείο προετοιμάζεται επίσης κατά τη στιγμή της ανάπτυξης. Επίσης, όταν το αναπτυσσόμενο μενού είναι κλειστό, το αναπτυγμένο αντικείμενο καταστρέφεται, Εάν το αναπτύξετε ξανά, θα δημιουργηθεί ξανά, επομένως η διαδικασία προετοιμασίας θα εκτελείται μετά από κάθε ανάπτυξη.

Ας το δοκιμάσουμε.

Όπως αναφέρθηκε παραπάνω, το αναπτυσσόμενο μενού που δεν έχει προβεί σε καμία ενέργεια δεν θα είναι ορατό ακόμα κι αν το αναπτύξετε με επιλεγμένο το παρακάτω στοιχείο. Από την άλλη, εάν αναπτύξετε το αναπτυσσόμενο μενού στο οποίο απευθυνθήκαμε, μπορείτε να δείτε ότι έχει μετακινηθεί στο σημείο όπου μπορείτε να δείτε το επιλεγμένο στοιχείο.