2016-04-27 7 views
6

यूनिटी फ़ोरम और क्यू & साइट में कुछ उत्तरों को देखते हुए, एक अदृश्य बटन बनाने के तरीके के जवाब नहीं हैं क्योंकि बटन से संबद्ध छवि को दूर करने से यह काम नहीं करता है।अदृश्य पारदर्शी बटन कैसे काम करें?

बटन को वास्तव में काम करने की अनुमति देते हुए आप इसके आसपास कैसे जाते हैं और अदृश्य संपत्ति रखते हैं?

+0

बस बच्चे के पाठ को हटाएं और छवि अल्फा को 0 पर बदलें –

+0

क्यों नहीं? क्या कोई समस्या होगी? –

+1

संक्षेप में, ** एकता भूल गई, या ** नहीं चुना, ओओ श्रृंखला में "टच करने योग्य" अवधारणा है, जो छवियों जैसी अच्छी तरह से "स्पर्श करने योग्य" है। अनिवार्य रूप से, इसका मतलब है कि डेवलपर्स को (एक तरफ या दूसरा) एकता के लिए अपनी 'टच करने योग्य' कक्षा बनाना है - जो एक क्लासिक "बैकफिलिंग" ओओ स्थिति है। जब समग्र समस्या "बैकफिलिंग" यह है कि यह पूरी तरह से ऑटो-रखरखाव होना चाहिए और सौभाग्य से एक अच्छा समाधान प्रतीत होता है। – Fattie

उत्तर

12

इस एकता के बारे में उन अजीब चीजों में से एक है ... वास्तविक दुनिया परियोजनाओं के

100% इस की जरूरत है, लेकिन एकता यह करने के लिए भूल गया था।

लघु संस्करण:

आप Touchable.cs जरूरत हर एकता परियोजना में:

// file Touchable.cs 
// Correctly backfills the missing Touchable concept in Unity.UI's OO chain. 

using UnityEngine; 
using UnityEngine.UI; 
#if UNITY_EDITOR 
using UnityEditor; 
[CustomEditor(typeof(Touchable))] 
public class Touchable_Editor : Editor 
    { public override void OnInspectorGUI(){} } 
#endif 
public class Touchable:Text 
    { protected override void Awake() { base.Awake();} } 
  1. उपयोग एकता के साधारण 'बटन बनाएँ' संपादक समारोह

  2. के रूप में आप जानते हैं, संपादक फ़ंक्शन दो कंप जोड़ता है आपके लिए ऑनेंट स्वचालित रूप से। एक एक Text और एक एक Image है

  3. बस उन्हें दोनों

  4. हटाना बटन

आप से किया जाता है पर ऊपर स्क्रिप्ट Touchable.csड्रॉप है ...। यही सब है इसके लिए।

यह एकता उन्नयन के साथ "क्षय" नहीं कर सकता है।

आप वास्तव में यह की चोटी पर Touchable छोड़ने के द्वारा "buttonize" कर सकते हैं कुछ भी .UI में

बटन बनाने के लिए कभी भी "पारदर्शी छवि जोड़ें" कभी नहीं।


यूनिटी ओओ श्रृंखला में एक "स्पर्श करने योग्य" अवधारणा को अमूर्त करने के लिए भूल गई।

तो, हमें डेवलपर्स को यूनिटी के वर्गों से "अपनी" स्पर्श करने योग्य कक्षा बनाना है।

यह OO में क्लासिक "बैकफिलिंग" समस्या है।

जब "बैकफिलिंग" एकमात्र मुद्दा यह है कि: यह पूरी तरह से ऑटो-रखरखाव होना चाहिए। केवल एक अच्छा समाधान है, Touchable.cs, जो हर कोई उपयोग करता है।


एकता एक बटन परियोजनाओं तो सब वास्तविक दुनिया में इस तरह दिखता है:

enter image description here

एक आपके पास एकता के Button.cs

दो आप Touchable.cs

जोड़ने के लिए

कुछ टीमें एक संपादक फ़ंक्शन "बेहतर बटन बनाएं" बनाती हैं जो कि बटन.cs + Touchable.cs के साथ गेम ऑब्जेक्ट बनाता है।

महत्वपूर्ण टिप ...

कहो आप एक बहुत जटिल यूआई पैनल हो सकता है। शायद यह आकार बदलता है। या शायद आपके पास एक एनीमेशन है।

आश्चर्यजनक बात यह है कि आप पर कुछ भी "बटन + टच करने योग्य" छोड़ सकते हैं, और यह काम करेगा।

बस बटन + टच करने योग्य सेट करें ताकि माता-पिता को भरने के लिए विस्तार किया जा सके। यही सब है इसके लिए।

enter image description here

इस उदाहरण छवि, "फिर से शुरू" और "छोड़" में कुछ भी हो सकता है। (एक एनीमेशन, कई भागों, पाठ, स्प्राइट, somethign अदृश्य, एक ढेर के साथ एक जटिल पैनल -। कुछ भी)

सभी मामलों में, सिर्फ एक बटन + स्पर्श नीचे ड्रॉप और आप एक निर्दोष बटन होता है।

वास्तव में: यह दृष्टिकोण इतना आसान है कि आप इस दृष्टिकोण का उपयोग करके सबसे सरल बटन भी बनाएंगे।

कहें कि आपका बटन एक छोटी छवि है। सिर्फ एक छवि है, और फिर उस पर एक बटन + टच करने योग्य है।) (के बजाय संपादक में वास्तव में भ्रामक और समस्याग्रस्त "बटन" समारोह का उपयोग करें।)

स्थिति को समझना ...

1 एकता के Button.cs वर्ग बढ़िया है।

2) लेकिन संपादक समारोह "एक बटन बनाने के" कचरा है ...

3) यह एक "उल्टा" बटन बनाता है,

4) यानी, यह एक पाठ डालता है/छवि Button.cs

5) "बटन सत्ता" के तहत कुछ आप बिल्कुल कुछ भी करने के लिए जोड़ चाहिए। यह ठीक है कि यह बटन + टच करने योग्य के साथ कैसे काम करता है।

6) तो - काफी बस -

1. कुछ भी आप चाहते हैं लो। पाठ, छवि, पैनल, अदृश्य, एनीमेशन - जो भी हो।

2. ड्रॉप बटन + उस पर टच करने योग्य - आप कर चुके हैं।

इस प्रकार सभी एकता में सभी बटन कैसे करते हैं!


ऐतिहासिक क्रेडिट: मेरा मानना ​​है कि एकता मंच उपयोगकर्ता "signalZak" पहली बार इस बाहर कई, कई साल पहले सोचने के लिए था!

0

मेरा पहला समाधान घटकों नीचे की तरह enable और disable था:

void showButton(Button buttonToShow, bool show) 
{ 
    Image bImage = buttonToShow.GetComponent<Image>(); 
    Text bText = buttonToShow.GetComponentInChildren<Text>(); //Text is a child of the Button 

    if (bImage != null) 
    { 
     bImage.enabled = show; 
    } 

    if (bText != null) 
    { 
     bText.enabled = show; 
    } 
} 

लेकिन यह काम नहीं किया। यदि बटन का image और text घटक दोनोंdisabled हैं, तो बटन क्लिक ईवेंट आग नहीं होगा। उनमें से एक enabled पर क्लिक करने के लिए क्लिक करने के लिए सक्षम होना चाहिए।

समाधान image और text घटकों को 0 से छुपाएं और फिर से दिखाने के लिए 1 को अल्फा सेट करना है। वे छिपाए जाएंगे लेकिन अक्षम और events पर क्लिक करेंगे।

public Button button; 

void Start() 
{ 
    //Show Button 
    showButton(button, true); 

    //Hide Button 
    //showButton(button, false); 
} 

void showButton(Button buttonToShow, bool show) 
{ 
    Image bImage = buttonToShow.GetComponent<Image>(); 
    Text bText = buttonToShow.GetComponentInChildren<Text>(); //Text is a child of the Button 

    if (bImage != null) 
    { 
     Color tempColor = bImage.color; 

     if (show) 
     { 
      tempColor.a = 1f; //Show 
      bImage.color = tempColor; 
     } 
     else 
     { 
      tempColor.a = 0f; //Hide 
      bImage.color = tempColor; 

     } 
    } 

    if (bText != null) 
    { 
     Color tempColor = bText.color; 

     if (show) 
     { 
      tempColor.a = 1f; //Show 
      bText.color = tempColor; 
     } 
     else 
     { 
      tempColor.a = 0f; //Hide 
      bText.color = tempColor; 

     } 
    } 
} 
संबंधित मुद्दे