Noticias

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

Funcionamiento de bucle

Iniciado por real3dvision, Septiembre 25, 2015, 07:58:49 AM

Tema anterior - Siguiente tema
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26410" data-ipsquote-contentcommentid="114879 date=1443617288]Me alegro que vayas aprendiendo. Entiendo que lo del cubo es para aprender, porqué con una animación vas que chutas y mucho menos código (ya que puedes replicar el movimiento inverso siempre).[/quote]Gracias!!!. Sí, es para aprender. Ahora para ver como va lo de la comunicación entre scripts haré varios cubos que se vayan dando las salidas entre ellos.En lo de la animación ... ¿te refieres a qué Unity te permite,como por ejemplo Max, poner el objeto en posición inicial desplazarlo a la posición final y él ya te hace la animación o algo similar?Un saludo.

Eso mismo, por extrapolación y el movimiento inverso.

[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26410" data-ipsquote-contentcommentid="114887 date=1443618360]Eso mismo, por extrapolación y el movimiento inverso.[/quote]Ok, gracias de nuevo.Un saludo.

Hola,Finalmente he terminado. Es una escena con tres cubos y un Gameobject vacío que dirige el cotarro... El script hace que cada cubo se haga visible/visible y haga un recorrido cuadrado en función a un bucle de tiempo que hay en el Gameobject vacío. Dejo el código del gameobject vacío(Organizador_trayectoria) y de uno de los cubos  por si a alguien le pudiera servir de algo(trayectoria_C1)...aunque sea para saber como no se hacen las cosas..using UnityEngine;
using System.Collections;

public class Organizador_trayectoria : MonoBehaviour {

private float contador=0;
public GameObject Cubo_1;
public trayectoria_C1 Cubo_1_Script;
public GameObject Cubo_2;
public trayectoria_C2 Cubo_2_Script;
public GameObject Cubo_3;
public trayectoria_C3 Cubo_3_Script;

// Use this for initialization
void Start () {
   
}

// Update is called once per frame
void FixedUpdate () {
   Cubo_1= GameObject.Find("Cubo_1");
   Cubo_1.SetActive(true);
   if (contador < 1 && contador >= 0) {
      contador += Time.deltaTime;
      int segundos = Mathf.FloorToInt (contador);
      int minutes = Mathf.FloorToInt (contador / 60F);
      Debug.Log ("contador" + contador);
      Debug.Log ("minutos" + minutes);
      Debug.Log ("segundos" + segundos);
      Cubo_1_Script = GameObject.FindGameObjectWithTag ("Cubo_1").GetComponent<trayectoria_C1> ();
      Cubo_1_Script.Subir_C1 ();
      Cubo_3_Script = GameObject.FindGameObjectWithTag ("Cubo_3").GetComponent<trayectoria_C3> ();
      Cubo_3_Script.Invisible_C3 ();
   } else if (contador >= 1 && contador < 2) {
      contador += Time.deltaTime;
      int segundos = Mathf.FloorToInt (contador);
      int minutes = Mathf.FloorToInt (contador / 60F);
      Debug.Log ("contador" + contador);
      Debug.Log ("minutos" + minutes);
      Debug.Log ("segundos" + segundos);
      Cubo_1_Script = GameObject.FindGameObjectWithTag ("Cubo_1").GetComponent<trayectoria_C1> ();
      Cubo_1_Script.Dcha_C1 ();
      Cubo_2_Script = GameObject.FindGameObjectWithTag ("Cubo_2").GetComponent<trayectoria_C2> ();
      Cubo_2_Script.Subir_C2 ();
      Cubo_3_Script = GameObject.FindGameObjectWithTag ("Cubo_3").GetComponent<trayectoria_C3> ();
      Cubo_3_Script.Visible_C3 ();
   } else if (contador >= 2 && contador < 3) {
      contador += Time.deltaTime;
      int segundos = Mathf.FloorToInt (contador);
      int minutes = Mathf.FloorToInt (contador / 60F);
      Debug.Log ("contador" + contador);
      Debug.Log ("minutos" + minutes);
      Debug.Log ("segundos" + segundos);
      Cubo_1_Script = GameObject.FindGameObjectWithTag ("Cubo_1").GetComponent<trayectoria_C1> ();
      Cubo_1_Script.Bajar_C1 ();
      Cubo_2_Script = GameObject.FindGameObjectWithTag ("Cubo_2").GetComponent<trayectoria_C2> ();
      Cubo_2_Script.Dcha_C2 ();
      Cubo_3_Script = GameObject.FindGameObjectWithTag ("Cubo_3").GetComponent<trayectoria_C3> ();
      Cubo_3_Script.Subir_C3 ();
   } else if (contador >= 3 && contador < 4) {
      contador += Time.deltaTime;
      int segundos = Mathf.FloorToInt (contador);
      int minutes = Mathf.FloorToInt (contador / 60F);
      Debug.Log ("contador" + contador);
      Debug.Log ("minutos" + minutes);
      Debug.Log ("segundos" + segundos);
      Cubo_1_Script = GameObject.FindGameObjectWithTag ("Cubo_1").GetComponent<trayectoria_C1> ();
      Cubo_1_Script.Izqda_C1 ();
      Cubo_2_Script = GameObject.FindGameObjectWithTag ("Cubo_2").GetComponent<trayectoria_C2> ();
      Cubo_2_Script.Bajar_C2 ();
      Cubo_3_Script = GameObject.FindGameObjectWithTag ("Cubo_3").GetComponent<trayectoria_C3> ();
      Cubo_3_Script.Dcha_C3 ();
   } else if (contador >= 4 && contador < 5) {
      contador += Time.deltaTime;
      int segundos = Mathf.FloorToInt (contador);
      int minutes = Mathf.FloorToInt (contador / 60F);
      Debug.Log ("contador" + contador);
      Debug.Log ("minutos" + minutes);
      Debug.Log ("segundos" + segundos);
      //Cubo_1= GameObject.Find("Cubo_1");
      //Cubo_1.SetActive(false);
      Cubo_1_Script = GameObject.FindGameObjectWithTag ("Cubo_1").GetComponent<trayectoria_C1> ();
      Cubo_1_Script.Invisible_C1 ();
      Cubo_2_Script = GameObject.FindGameObjectWithTag ("Cubo_2").GetComponent<trayectoria_C2> ();
      Cubo_2_Script.Izqda_C2 ();
      Cubo_3_Script = GameObject.FindGameObjectWithTag ("Cubo_3").GetComponent<trayectoria_C3> ();
      Cubo_3_Script.Bajar_C3 ();
   } else if (contador >= 5 && contador < 6) {
      contador += Time.deltaTime;
      int segundos = Mathf.FloorToInt (contador);
      int minutes = Mathf.FloorToInt (contador / 60F);
      Debug.Log ("contador" + contador);
      Debug.Log ("minutos" + minutes);
      Debug.Log ("segundos" + segundos);
      Cubo_1_Script = GameObject.FindGameObjectWithTag ("Cubo_1").GetComponent<trayectoria_C1> ();
      Cubo_1_Script.Invisible_C1 ();
      Cubo_2_Script = GameObject.FindGameObjectWithTag ("Cubo_2").GetComponent<trayectoria_C2> ();
      Cubo_2_Script.Invisible_C2 ();
      Cubo_3_Script = GameObject.FindGameObjectWithTag ("Cubo_3").GetComponent<trayectoria_C3> ();
      Cubo_3_Script.Izqda_C3 ();
   }
   else {
      contador = 0;
      Cubo_1_Script = GameObject.FindGameObjectWithTag ("Cubo_1").GetComponent<trayectoria_C1> ();
      Cubo_1_Script.Visible_C1 ();
      Cubo_2_Script = GameObject.FindGameObjectWithTag ("Cubo_2").GetComponent<trayectoria_C2> ();
      Cubo_2_Script.Visible_C2 ();
   }
}
}
using UnityEngine;
using System.Collections;

public class trayectoria_C1 : MonoBehaviour {

private float velocidad=5f;
private Transform thisTransform;
public Renderer ver;

// Use this for initialization
void Start () {
   thisTransform = transform;

}


public void Subir_C1(){

   thisTransform.Translate (Vector3.up * velocidad * Time.deltaTime );

}
public void Dcha_C1(){
   
   thisTransform.Translate (Vector3.right * velocidad * Time.deltaTime );
   
}
public void Bajar_C1(){
   
   thisTransform.Translate (Vector3.down * velocidad * Time.deltaTime );
   
}
public void Izqda_C1(){
   
   thisTransform.Translate (Vector3.left * velocidad * Time.deltaTime );
   
}
public void Invisible_C1(){
   
   ver=this.gameObject.GetComponent<Renderer>();
   ver.enabled = false;
}
public void Visible_C1(){
   
   ver=this.gameObject.GetComponent<Renderer>();
   ver.enabled = true;
}

}
 

Para empezar y entender está bien. Las llamadas a GetComponent/FindObject consumen más de lo habitual. Es mejor hacerlas previamente y luego utilizar las referencias. Los cálculos igual. Piensa en lo que ganarías de rendimiento. Ahora parece ridículo, pero luego la gente se pregunta, cuando ya ha escrito 1000 líneas de código de porqué le va lento.Esos 10 if's hacen daño a la vista. Deberías crear una función donde llames con parámetros y ya te devuelva esos cálculos, y la mayoría casi precalculados. Si empiezas a pensar y programar en el rendimiento desde el principio, luego no te encontrarás con un montón de código que cambiar o peor, tirar.Por último el FixedUpdate utiliza otro valor delta y solamente es recomendable utilizarlo cuando un ridigbody intervenga. Mírate este tutorial sobre el tema. Es importante porqué es básico para entender la diferencia entre ellos y cuando usar uno y otro:https://unity3d.com/es/learn/tutorials/modules/beginner/scripting/update-and-fixedupdate" rel="external nofollow">https://unity3d.com/es/learn/tutorials/modules/beginner/scripting/update-and-fixedupdate 

Te agradezco los comentarios! Los voy desmenuzando y te cuento.Un saludo.

Haz coquletas!!
 
Enviado desde mi iPhone utilizando Tapatalk

[quote author=mrpacogp" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26410" data-ipsquote-contentcommentid="116982 date=1444296882]Haz coquletas!! Enviado desde mi iPhone utilizando Tapatalk[/quote]Eh? Lo dices por lo de desmenuzar?



Etiquetas: