Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Comunicar dos Scripts

Iniciado por Sylar, Marzo 31, 2016, 06:34:10 PM

Tema anterior - Siguiente tema
Buenas a todos chicos, os comento mi problema.Tengo un script con un temporizador que cuenta 3 segundos utilizando el Time.deltaTime en el método Update().
void Update () {
   Debug.Log ("llego");
   temp -= Time.deltaTime;
   if (temp <= 0)
   {
      Application.LoadLevel ("P2");
   }
El problema es que quiero utilizarlo cada vez que cargo un nivel y reutilizarlo y quería saber como puedo hacer para llamarlo desde otro script y que, al vencer el temporizador, devuelva la ejecución al script inicial. Podríais ayudarme??


Lo función más básica y fundamental para la comunicación entre scripts es GetComponenthttps://unity3d.com/es/learn/tutorials/modules/beginner/scripting/getcomponent" rel="external nofollow">https://unity3d.com/es/learn/tutorials/modules/beginner/scripting/getcomponent Dicho lo cual, puedes hacer una comunicación entre dos scripts sin tanto jaleo, aunque te recomiendo que intentes aprenderlo bien.Al principio es un poco lío, pero luego ya te apañas, y puedes simplificarlo, si te conviene. . Ejemplo simplificado: en dos GameObject diferentesScript 1using UnityEngine;
using System.Collections;public class Prueba1 : MonoBehaviour {    public int variableDePrueba = 67;    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    
    }
Script 2using UnityEngine;
using System.Collections;public class Prueba2 : MonoBehaviour {    int variableReceptora;
    // Use this for initialization
    void Start () {
        variableReceptora = GameObject.Find ("PruebaAEliminar2").GetComponent<Prueba1> ().variableDePrueba;
    }
    
    // Update is called once per frame
    void Update () {
        Debug.Log ("cOMUnicación establecida " + variableReceptora);
    }
} Tienes otras opciones de comunicación como Advanced C# Messenger, pero eso mejor déjalo para cuando domines esto otro, que es el método básico y principal. También te animaría a que le dieras caña a los otros vídeos de Unity3d e hicieras los proyectos.  

si quieres llamar una escena despues de pasar 3 segundo, tambien puedes usar los metodos invoke ,  http://unity3d.com/es/learn/tutorials/modules/beginner/scripting/invoke" rel="external nofollow">http://unity3d.com/es/learn/tutorials/modules/beginner/scripting/invoke si lo que quieres que tu gameobject que tiene el script no se destruya cada vez que quieras cargar un nivel nuevo, ocupas agregar esta linea en start  http://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html para acceder a una funcion o variable que esta dentro de otro script del mismo gameobjet, ocupas como ya te dijeron el getcomponent y poner en publica las funciones/varaibleshttp://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html saludos.  

Creo que getComponent no me sirve porque realmente no quiero obtener el valor de ninguna variable, realmente lo que quiero hacer el llamar a ese método Timer desde cualquier script y que, pasado el tiempo establecido, haga una especie de return sin ningún parámetro al mismo objeto que lo llamó para continuar la ejecución.

En ese caso, yo usaría (creo) Advanced C# Messenger. Lo que haces es enviar una señal (Broadcast) que recibirán las "líneas oyentes" en otros script.Necesitas copiar el contenido a un script y tenerlo dentro de tu proyecto. A partir de ahí, es muy fácil de manejar, funciona muy bien y, según leí en su momento, resulta muy eficiente en términos de cálculo. Échale un ojo. http://wiki.unity3d.com/index.php?title=Advanced_CSharp_Messenger" rel="external nofollow">http://wiki.unity3d.com/index.php?title=Advanced_CSharp_Messenger 

GetComponent no sirve para obtener el valor de ninguna variable en otro script ... GetComponent sirve para obtener la instancia de una clase. Lo que hagas despues (obtener el valor de una variable, ejecutar una funcion, eliminar el componente ...) con ese objeto es indiferente y no tiene que ver con GetComponent.En resumen, estoy de acuerdo que la solucion mas sencilla (sobretodo si tienes que preguntar como hacerlo) es utilizar la funcion GetComponent.

como te han dicho lo que quieres lograr se puede hacer facilmente con GetComponent

Etiquetas: