أزرار شكل مخصص في الوحدة UI

في الآونة الأخيرة ، كنت بحاجة إلى استخدام أزرار نموذج غير قياسي في مشروعي. ومع ذلك ، تسببت هذه المهمة التي تبدو تافهة لي بعض الصعوبات.

المشكلة هي أن زر واجهة المستخدم القياسي يعالج النقرات حتى في المناطق الشفافة ، وهو أمر غير مرغوب فيه في هذه الحالة. في الوقت نفسه ، لا يحتوي مكون الزر نفسه على أي معلمات (مرئية في المفتش) يمكن أن تكون مسؤولة عن أي مناطق من الزر يمكنها التعامل مع التحويم / النقرة.


بعد قضاء بعض الوقت في البحث على الإنترنت والتوثيق الخاص بالتدخين ، جاء لي ما يلي ، باستخدام هذا الحل البسيط:

(سأقول على الفور أن هناك مثالًا مشابهًا موجود في وثائق الوحدة ، ولكن في الوقت الحالي تم وضع علامة على الكود الخاص به بالفعل قديمًا ، لذلك قررت تحديثه وتعديله قليلاً)

using UnityEngine; using UnityEngine.UI; public class ButtonClickMask : MonoBehaviour { [Range(0f, 1f)] //1 public float AlphaLevel = 1f; //2 private Image bt; //3 void Start() { bt = gameObject.GetComponent<Image>(); bt.alphaHitTestMinimumThreshold = AlphaLevel; //4 } } 

  1. خاصية تعرض منزلق مناسب في المفتش مع قيم من 0 إلى 1.
  2. يجب أن تحتوي قيمة الحد الأدنى لقناة ألفا على جزء من النسيج الذي انتهى المؤشر من أجل معالجة النقرات.
  3. مكون الصورة لزر (تحتاج للعمل معه ، وليس مع زر).
  4. المعلمة alphaHitTestMinimumThreshold هي بالضبط ما يحدد الحد الأدنى لمستوى الشفافية لجزء من النسيج حتى يتمكن من التعامل مع الضغط.

لذلك البرنامج النصي جاهز. الآن دعنا ننتقل إلى ضبط نسيج الزر. لكي تعمل الشفرة ولا تنتج عنها أخطاء ، يجب تمكين قدرة القراءة / الكتابة في نسيج إعدادات الاستيراد. تذكر قبول التغييرات بالنقر فوق "تطبيق".



الآن نقوم بتعليق البرنامج النصي على الزر المطلوب ، وقم بتعيين مستوى ألفا على القيمة المطلوبة (في حالتي - 1) ...



... نطلق ونفرح أن الزر لم يعد يعالج النقرات على المساحات الشفافة!

Source: https://habr.com/ru/post/ar478734/


All Articles