Jump to content

Jumarras

Registrados
  • Content Count

    3
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Jumarras

  • Rank
    Recién Llegado

Profile Information

  • Especialidad
    Coder
  1. Ya he dado con una solucion. Para quien le interese: El script en vez de a los puntos de cambio de escena, se los he puesto al objeto "Empty" (el que controla la transicion). Por tanto, al haber una colision con algun punto de cambio de escena, hago que desactive o active a mi gusto, solamente llamando al objeto padre con "GetComponentInParent". Despues, como hay mas de 1 punto de cambio de escena, hago que el objeto colisionado, cambie su estado de la lista de hijos al primer nivel con "transform.SetAsFirstSibling();" Dejo el script modificado, un video y foto de como funciona. Codigo del objeto de colision (collider): using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Warp : MonoBehaviour { private GameObject targetRespawn; private GameObject player; public string nextMap; public string nextMapRespawnTag; public AsyncOperation sceneChange; private void Awake() { GetComponent<SpriteRenderer>().enabled = false; transform.GetChild(0).GetComponent<SpriteRenderer>().enabled = false; player = GameObject.FindGameObjectWithTag("Player"); targetRespawn = GameObject.FindWithTag(PlayerPrefs.GetString("CurrentMapRespawnTag", "Respawn_1")); if (targetRespawn != null) { player.transform.position = targetRespawn.transform.position; } GetComponentInParent<FadeOnOffListenner>().fadeStatus = "Activated"; } private void OnTriggerEnter2D(Collider2D collision) { if (collision.tag == "Player") { PlayerPrefs.SetString("CurrentMapRespawnTag", nextMapRespawnTag); PlayerPrefs.Save(); transform.SetAsFirstSibling(); GetComponentInParent<FadeOnOffListenner>().fadeStatus = "Desactivated"; sceneChange = SceneManager.LoadSceneAsync(nextMap); sceneChange.allowSceneActivation = false; } } } Codigo de trancicion de imagen de escena. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class FadeOnOffListenner : MonoBehaviour { public GameObject fadeInOutCanvasImage; float duration = 1.5f; private float t = 0; private float t2 = 1f; public string fadeStatus; private void Awake() { fadeStatus = "Activated"; } void Start() { int screenX = Screen.width; int screenY = Screen.height; fadeInOutCanvasImage.GetComponent<RectTransform>().sizeDelta = new Vector2(screenX, screenY); fadeInOutCanvasImage.SetActive(true); fadeInOutCanvasImage.GetComponent<Image>().color = new Color(0, 0, 0, 1f); } private void Update() { if (fadeStatus == "Activated") { FadeOut(); } else if (fadeStatus == "Desactivated") { FadeIn(); } } public void FadeIn() { fadeInOutCanvasImage.GetComponent<Image>().color = new Color(0, 0, 0, t); if (t < duration) { t += Time.deltaTime / duration; } if (t >= duration) { GetComponentInChildren<Warp>().sceneChange.allowSceneActivation = true; } } public void FadeOut() { fadeInOutCanvasImage.GetComponent<Image>().color = new Color(0, 0, 0, t2); if (t2 > 0) { t2 -= Time.deltaTime / duration; } } }
  2. Buenas, Estoy aprendiendo unity, asi que tened paciencia. He estado siguiendo unos tutoriales de como hacer un juego de RPG en 2D, pero, hay cosas que he querido cambiar. En el tutorial (se ve en la imagen) hay unos puntos de teletransporte de un punto de la misma escena a otro, pero, yo he querido que el punto de transporte sea a otra escena. Al cargar la escena estoy intentando que la pantalla (una imagen negra de canvas) se vuelva en transparente, difuminandolo. Cuando realiza el personaje el cambio de escena, que, con la difuminacion se ponga la pantalla en negro. El problema que tengo es que cuando tengo 2 puntos de cambio de escena, a veces, el difuminado no funciona, pero si cuando hay solo 1 punto de cambio de escena. Como tengo que colocar el mismo codigo a 2 puntos de cambio de escena, uno de ellos se queda "enganchado" con el mismo string. No encuentro la solucion para que el GameObject de los 2 scripts se cambien juntos. ¿alguna recomendacion? Enlace al video de como funciona y el fallo Este seria el codigo que realiza el difuminado de pantalla. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class FadeOnOffListenner : MonoBehaviour { public GameObject fadeInOutCanvasImage; float duration = 1.5f; private float t = 0; private float t2 = 1f; public string fadeStatus; void Start() { int screenX = Screen.width; int screenY = Screen.height; fadeInOutCanvasImage.GetComponent<RectTransform>().sizeDelta = new Vector2(screenX, screenY); fadeInOutCanvasImage.SetActive(true); fadeInOutCanvasImage.GetComponent<Image>().color = new Color(0, 0, 0, 1f); } private void Update() { if (fadeStatus == "Activated") { FadeOut(); } else if (fadeStatus == "Desactivated") { FadeIn(); } } public void FadeIn() { fadeInOutCanvasImage.GetComponent<Image>().color = new Color(0, 0, 0, t); if (t < duration) { t += Time.deltaTime / duration; } if (t >= duration) { //GetComponent<Warp>().sceneChange.allowSceneActivation = true; AQUI ESPERO PARA QUE TERMINE EL DIFUMINADO Y DEJE CAMBIAR DE ESCENA } } public void FadeOut() { fadeInOutCanvasImage.GetComponent<Image>().color = new Color(0, 0, 0, t2); if (t2 > 0) { t2 -= Time.deltaTime / duration; } } } Este seria el codigo encargado de cambiar de escena al haber una colision. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Warp : MonoBehaviour { private GameObject targetRespawn; private GameObject player; public string nextMap; public string nextMapRespawnTag; public AsyncOperation sceneChange; private void Awake() { GetComponent<SpriteRenderer>().enabled = false; transform.GetChild(0).GetComponent<SpriteRenderer>().enabled = false; player = GameObject.FindGameObjectWithTag("Player"); targetRespawn = GameObject.FindWithTag(PlayerPrefs.GetString("CurrentMapRespawnTag", "Respawn_1")); if (targetRespawn != null) { player.transform.position = targetRespawn.transform.position; } GetComponent<FadeOnOffListenner>().fadeStatus = "Activated"; } private void OnTriggerEnter2D(Collider2D collision) { if (collision.tag == "Player") { PlayerPrefs.SetString("CurrentMapRespawnTag", nextMapRespawnTag); PlayerPrefs.Save(); GetComponent<FadeOnOffListenner>().fadeStatus = "Desactivated"; //sceneChange = SceneManager.LoadSceneAsync(nextMap); //sceneChange.allowSceneActivation = false; } } } Un saludo
×
×
  • Create New...