Estoy construyendo una transición suave de una escena de nivel a una escena de menú. La idea es hacer una captura de pantalla del nivel justo antes de que se cargue la siguiente escena (menú). luego tome esta captura de pantalla que se superpone a toda la pantalla y se desvanecerá para revelar el menú.
Al final de un nivel tomo una captura de pantalla.
ScreenCapture.CaptureScreenshot("Resources/DestroyedBoss.png");Cuando cargue la siguiente escena, esta captura de pantalla debería cargarse y superponerse a toda la escena.
public Texture2D myTexture; void Start() { // load texture from resource folder myTexture = Resources.Load("DestroyedBoss") as Texture2D; GameObject rawImage = GameObject.Find("RawImage"); rawImage.GetComponent<RawImage>().texture = myTexture; }La captura de pantalla se desvanecerá y el objeto que la contiene se destruirá.
public RawImage imageToFade; void Update() { imageToFade.color -= new Color(0, 0, 0, 0.2f * Time.deltaTime); if (imageToFade.color.a < 0.1) Destroy(this.gameObject); }Todo esto funciona bien, excepto por la carga de la captura de pantalla.
Parecería que Unity no actualiza la imagen mientras ejecuta el juego. Y siempre usa la captura de pantalla de la última vez que ejecuté el juego.
He estado buscando / googleando e intentando durante 2 días y estoy perdido.
¿Cómo puedo hacer que esto funcione? ¿Hay alguna forma de actualizar el archivo png mientras ejecuto mi juego? ¿Quizás crear un contenedor temporal para la captura de pantalla y establecerlo en RawImage?
Como comentó derHugo. puede usar Application.persistentDataPath para guardar su imagen.
ScreenCapture.CaptureScreenshot(Application.persistentDataPath+"DestroyedBoss.png");Para cargar la imagen, puede usar UnityWebRequestTexture.GetTexture.
IEnumerator SetImage() { yield return new WaitForSeconds(1); using (UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(Application.persistentDataPath + "DestroyedBoss.png")) { yield return uwr.SendWebRequest(); if (uwr.isNetworkError || uwr.isHttpError) { Debug.Log(uwr.error); } else { // Get downloaded asset bundle myTexture = DownloadHandlerTexture.GetContent(uwr); GameObject rawImage = GameObject.Find("RawImage"); rawImage.GetComponent<RawImage>().texture = myTexture; FadeOut.instance.StartFade(); } } }Funciona bien, pero la captura de pantalla tarda unos segundos en aparecer en la carpeta. Así que para mí... no funciona muy bien. Usaré otra técnica. En lugar de atenuar la captura de pantalla mientras se carga el menú. Detendré el juego (Time.timescale = 0) y mostraré una captura de pantalla del menú, luego cargaré la escena del menú real.
Gracias de nuevo derHugo.