מעבר בלולאה לבחירת אובייקטי ממשק המשתמש

עודכן דף :
תאריך יצירת דף :

סביבת אימות

חלונות
  • חלונות 11
עורך Unity
  • 2020.3.25F1

תנאים מוקדמים לטיפ זה

ההגדרות הבאות נעשו מראש כתנאי מוקדם להסבר על טיפים אלה.

הפניה

פריסת אובייקטי ממשק משתמש לדוגמה

מקם את הלחצן על בד הציור באופן הבא: האובייקט שנבחר מוצג בירוק לבהירות.

ניתן לבחור רק עצמים בכיוון שנבחר.

בעת מיקום אובייקט ממשק משתמש, באפשרותך תחילה להקיש על מקשי החצים בלוח מקשים או ב- gamepad כדי לבחור את אובייקט ממשק המשתמש בכיוון שצוין. זה מאוד אינטואיטיבי וקל להבנה, אז אני לא חושב שאתה צריך לטרוח לשנות את ההגדרות.

עם זאת, בפריסה דמוית תפריט, לא ניתן לבצע פעולת לולאת בחירה כגון "חזור למעלה בעת לחיצה למטה כאשר החלק התחתון נבחר" כברירת מחדל.

באיור לעיל, לא ניתן לבחור Button1 על-ידי לחיצה למטה בזמן ש-Button3 נבחר. כמובן, אם תלחץ למעלה בזמן שנבחר Button1, לא תוכל לבחור Button3.

מעבר בלולאה בין בחירות

כאן, ניצור מנגנון המאפשר לך לעבור בלולאה בין הבחירות בלי סוף. בפריסה לדוגמה, באפשרותך לבחור Button1 על-ידי לחיצה כלפי מטה כאשר Button3 נבחר, ובאפשרותך לבחור Button3 על-ידי לחיצה למעלה כאשר Button1 נבחר.

פקד זה נעשה בקובץ Script. זהו תסריט כללי שניתן להשתמש בו עם מספר קטן של תיאורים וניתן להשתמש בו כמו בסצנות אחרות. במקום זאת, חלות ההגבלות הבאות:

  • אתה יכול לנוע רק למעלה ולמטה בכיוון אחד.
  • חל על כל Selectable הקיים תחת האובייקט שצוין

לכן, יעד השימוש מוגבל לתפריטים שנבחרו על ידי גלילה למעלה ולמטה, אך הוא שימושי מאוד אם אתה מגביל את עצמך לפריסה זו. אגב, הוא מוגבל העליון והתחתון, אבל אם אתה משנה את הסקריפט קצת, אתה יכול לעשות את זה מוגבל שמאל וימין.

צור קובץ Script בפרוייקט שלך. אתה יכול לקרוא לזה כל דבר, אבל אני אשאיר SelectLoop את זה כמו .

הסקריפט נראה כך:

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

public class SelectLoop : MonoBehaviour
{
  // 最初のフレーム更新の前に開始が呼び出されます
  void Start()
  {
    // ボタンなど選択可能なコンポーネントを取得する
    var selects = GetComponentsInChildren<Selectable>();
    for (var i = 0; i < selects.Length; i++)
    {
      var nav = selects[i].navigation;
      nav.mode = Navigation.Mode.Explicit;
      nav.selectOnUp = selects[i == 0 ? selects.Length - 1 : i - 1];
      nav.selectOnDown = selects[(i + 1) % selects.Length];
      selects[i].navigation = nav;
    }
  }

  // 更新はフレームごとに1回呼び出されます
  void Update() { }
}

מה שאנחנו עושים הוא ביצוע ההגדרות הבאות עבור התנהגות navigation בחירת המפתח .

  • הקש על המקש למעלה כדי לבחור את האובייקט הקודם, ובחר את האובייקט האחרון כדי לבחור את האובייקט הראשון.
  • הקש על המקש למטה כדי לבחור את האובייקט הבא, או בחר את האובייקט הראשון אם הוא האובייקט האחרון.

אגב, הסדר של אובייקט זה (ניתן לבחירה) תלוי בסדר ההיררכיה. סדר אותם בסדר שבו ברצונך שייבחרו בהירארכיה.

לאחר שמירת הסקריפט, צרף אותו כרכיב. סקריפט זה יוחל על האובייקט Selectable המצורף , ולכן הפעם Canvas נצרף ל- .

נסה להזיז אותו ולראות אם באפשרותך להעביר אותו בין לחצן1 וללחצן3 בהקשה.