using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class Fader : MonoBehaviour
{
    #region FIELDS
    public GameObject fadeOutUIGameobjectImage;
    public float fadeSpeed = 0.8f;
    public bool fadeOnStart = false;

    private Image fadeOutUIImage;

    private void Start()
    {
        if(fadeOnStart == true)
        {
           StartCoroutine(Fade(FadeDirection.Out));
        }
    }

    public enum FadeDirection
    {
        In, //Alpha = 1
        Out // Alpha = 0
    }
    #endregion

    #region FADE
    public IEnumerator Fade(FadeDirection fadeDirection)
    {
        fadeOutUIGameobjectImage.SetActive(true);

        float alpha = (fadeDirection == FadeDirection.Out) ? 1 : 0;
        float fadeEndValue = (fadeDirection == FadeDirection.Out) ? 0 : 1;
        if (fadeDirection == FadeDirection.Out)
        {
            while (alpha >= fadeEndValue)
            {
                SetColorImage(ref alpha, fadeDirection);
                yield return null;
            }
            fadeOutUIGameobjectImage.SetActive(false);
        }
        else
        {
            fadeOutUIGameobjectImage.SetActive(true);
            while (alpha <= fadeEndValue)
            {
                SetColorImage(ref alpha, fadeDirection);
                yield return null;
            }
        }
    }
    #endregion

    #region HELPERS
    public IEnumerator FadeAndLoadScene(FadeDirection fadeDirection, string sceneToLoad)
    {
        yield return Fade(fadeDirection);
        SceneManager.LoadScene(sceneToLoad);
    }

    private void SetColorImage(ref float alpha, FadeDirection fadeDirection)
    {
        if (fadeOutUIImage == null)
        {
            fadeOutUIImage = fadeOutUIGameobjectImage.GetComponent<Image>();
        }

        fadeOutUIImage.color = new Color(fadeOutUIImage.color.r, fadeOutUIImage.color.g, fadeOutUIImage.color.b, alpha);
        alpha += Time.deltaTime * (1.0f / fadeSpeed) * ((fadeDirection == FadeDirection.Out) ? -1 : 1);
    }
    #endregion
}

इस मामले में यह छवि है, लेकिन उदाहरण के लिए चर fadeOutUIGameobjectImage एक टेक्स्ट या कैनवास रेंडरर या केवल कैनवास या क्यूब या सिलेंडर या कोई ui तत्व है तो दो पंक्तियों में:

private Image fadeOutUIImage;

और

fadeOutUIImage = fadeOutUIGameobjectImage.GetComponent<Image>();

यह छवि प्रकार से संबंधित है, क्या स्वचालित प्रकार खोजने का कोई तरीका है? कभी-कभी मैं एक क्यूब या कैनवास या कैनवास रेंडरर या टेक्स्ट या टेक्स्टमेश या टेक्स्टमेशप्रो या इमेज या मेशरेंडरर को फीका करना चाहता हूं या शायद अब की तरह एक ही एक के बजाय fadeOutUIGameobjectImage की एक सरणी बना सकता हूं।

विचार स्वचालित प्रकार का पता लगाना है।

-1
Daniel Lip 11 सितंबर 2020, 23:59

2 जवाब

सबसे बढ़िया उत्तर

उपयोग संचालक है?

if(obj is Image)
     //... Do something for Image
else if(obj is TextMeshProUGUI)
     //... Do something for text mesh pro UGui
3
Kale_Surfer_Dude 12 सितंबर 2020, 00:15

इमेज, रॉइमेज, टेक्स्ट आदि सभी एक बेस टाइप ग्राफिक से इनहेरिट करते हैं (जो कलर जैसी चीजों के लिए बेसिक एक्सेस प्रदान करता है)।

दूसरी ओर, MeshRenderer, LineRenderer आदि रेंडरर से विरासत में मिलते हैं, जो सामग्री आदि तक पहुँच प्रदान करता है।

जब तक आपको बच्चे की विशिष्ट विशेषताओं की आवश्यकता नहीं है, तब तक आप मूल प्रकार का उपयोग कर सकते हैं और वास्तविक प्रकार के प्रति अज्ञेय रह सकते हैं

0
zambari 14 सितंबर 2020, 17:02