Skrip memudar:

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

public class FadeToBlackInOut : MonoBehaviour
{
    public Image blackScreen;
    public float fadeToBlackDuration;

    public void FadeToBlack()
    {
        blackScreen.color = Color.black;
        blackScreen.canvasRenderer.SetAlpha(0.0f);
        blackScreen.CrossFadeAlpha(1.0f, fadeToBlackDuration, false);
    }

    public void FadeFromBlack()
    {
        blackScreen.color = Color.black;
        blackScreen.canvasRenderer.SetAlpha(1.0f);
        blackScreen.CrossFadeAlpha(0.0f, fadeToBlackDuration, false);
    }
}

Script yang menggunakannya:

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

public class AnimationPlay : MonoBehaviour
{
    public GameObject head;
    public GameObject[] cameras;
    public FadeToBlackInOut fadetoblackinout;

    private Animator anim;
    private bool started = true;
    private float animationLenth;
    private bool rotateHead = false;
    private bool isFinishedTurning = false;

    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
    }

    private void Update()
    {
        if (started == true)
        {
            anim.enabled = true;
            anim.Play("Stand Up", 0, 0);
            animationLenth = anim.GetCurrentAnimatorStateInfo(0).length;
            StartCoroutine(AnimationEnded());
            started = false;
        }

        if (rotateHead == true)
        {
            Quaternion targetRotation = Quaternion.Euler(head.transform.localRotation.x, head.transform.localRotation.y, 0f);
            head.transform.localRotation = Quaternion.Lerp(head.transform.localRotation, targetRotation, 1.0f * Time.deltaTime);

            // Check whether the current localRotation is the same as the target rotation
            if (head.transform.localRotation == targetRotation)
            {
                isFinishedTurning = true;
            }
        }

        // If the rotation is complete, swap cameras and disable animation
        if (isFinishedTurning == true)
        {
            fadetoblackinout.FadeToBlack();

            /*cameras[0].SetActive(false);
            cameras[1].SetActive(true);*/
            anim.enabled = false;
            isFinishedTurning = false;
        }
    }

    IEnumerator AnimationEnded()
    {
        yield return new WaitForSeconds(animationLenth);
        anim.enabled = false;
        rotateHead = true;
    }
}

Saya ingin di bagian ini memudar perlahan menjadi hitam dan kemudian mengganti kamera dan kemudian memudarkannya kembali perlahan dari hitam:

if (isFinishedTurning == true)
            {
                fadetoblackinout.FadeToBlack();
    
                /*cameras[0].SetActive(false);
                cameras[1].SetActive(true);*/
                anim.enabled = false;
                isFinishedTurning = false;
            }

Tapi ketika memudar menjadi hitam itu tidak apa-apa. Ini mengubah warna alfa gambar tetapi tidak mengubah apa pun di layar.

Ini adalah tangkapan layar objek fade to black dengan pengaturan skrip:

Pengaturan skrip fade to black

Tangkapan layar ini adalah pengaturan kanvas:

Pengaturan kanvas

Tangkapan layar dari pengaturan Gambar permainan dimulai ketika warna alfa adalah 0 :

Warna alfa gambar adalah 0 secara default

Dan screenshot ini adalah ketika warna alpha gambar diatur ke 255 ketika game tidak berjalan, tetapi ketika saya menjalankan game saya melihat di inspektur bahwa warna alpha adalah 255 tetapi jendela tampilan game tetap tidak hitam.

masukkan deskripsi gambar di sini

0
Jhon Afefin 4 Juli 2020, 13:14

1 menjawab

Jawaban Terbaik

Saya lebih suka meninggalkan ini sebagai komentar, karena tidak langsung menjawab pertanyaan Anda; Namun, saya tidak memiliki reputasi yang cukup untuk berkomentar.

Anda mungkin akan lebih baik menggunakan efek pemrosesan pasca menggunakan salah satu dari tiga tumpukan pemrosesan pasca Unity, tergantung pada pipa render yang Anda gunakan.

Anda mungkin dapat mengubah nilai vignette untuk mencakup seluruh layar, meskipun jika tidak, tidak sulit untuk tulis efek posting Anda sendiri jika cukup sederhana.

Perlu diperhatikan bahwa Screen Space - UI tipe overlay akan merender setelah tahap pemrosesan pasca, jadi Anda harus menggunakan ini dengan kanvas ruang dunia atau ruang kamera.

0
Calvin Soueid 4 Juli 2020, 11:45