Noticias

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

problemas plataforma movil (arriba/abajo)

Iniciado por xcqoax, Abril 06, 2016, 01:26:49 AM

Tema anterior - Siguiente tema
he estado intentando hacer un script para plataforma que suba y baje continuamente. logro hacer que la plataforma se mueva pero no continua haciendo los movimientos. he estado algunos dias  buscando referencia de ello por mas no logro encontrar el detalle. si alguien puede ayudar con alguna orientación   (no hacer el script) se lo agradecre. using UnityEngine;
using System.Collections;

public class pruebamovil : MonoBehaviour
{
    public Transform destino;
    public Transform inicio;
    public float velocidad=1f;
    float tiempo;
    float tamañovec;
    float tamañovecbaj;
    float movimiento;
     
    void Start ()
    {
        tiempo = Time.time;
        tamañovec = Vector3.Distance(inicio.position, destino.position); // calcula el tamaño del vector para subir plataforma.
        tamañovecbaj = Vector3.Distance (destino.position, inicio.position);// calcula el tamañaño del vector para hacerla bajar.
    }

    void Update ()
    {
        float distanciavel = (Time.time - tiempo) * velocidad;
        movimiento = distanciavel / tamañovec;
        subir ();
    }
    public void subir ()
    {
        transform.position = Vector3.Lerp ( inicio.position, destino.position,movimiento);
        bajar ();
    }
    public void bajar ()
    {
        transform.position = Vector3.Lerp ( destino.position, inicio.position,movimiento);
        subir ();
    }
}

Estas haciendo todo mal. Mejor lee la referencia y aprende a programar. Tienes errores lógicos muy muy graves. Te lo digo para que empieces a estudiar un poco.. Pasa por mi canal tengo unos tutos para iniciados que te serán de ayuda, y luego en Internet existen miles de tutorialeshttps://www.youtube.com/watch?v=gl8ijNQrhls 

use parte de la referencia de vector3, me dare una vuelta por tu canal...  agradeceria si pudieses decirme un poco mas de los errores que tengo ya que de ellos aprendere.  y muchas gracias por tus comentarios.

Abril 06, 2016, 02:05:07 AM #3 Ultima modificación: Abril 06, 2016, 02:14:00 AM por isai
[quote author=xcqoax" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35564" data-ipsquote-contentcommentid="129180">
        tamañovec = Vector3.Distance(inicio.position, destino.position); // calcula el tamaño del vector para subir plataforma.
        tamañovecbaj = Vector3.Distance (destino.position, inicio.position)

si es verdad, es que al momento de tratar de analizar un poco mas me puse a colocarle lineas y una de ellas fue latamañovecbaj = Vector3.Distance (destino.position, inicio.position);// calcula el tamañaño del vector para hacerla bajar.para tratar de hacer que baje pero si, tienes la razon. solo que no lo quite porq ya me tenia un poco mareado esto. gracias por tu observación. 

http://unity3d.com/es/learn/tutorials/topics/scripting  ocupas aprender, para que sirve los metodos como Start, Update, las funciones que creas tu, prioridades, el manejo de variables etc etc, 

he leido un poco y con ayuda de otro amigo que me comento de las corutinas, logre hacer otro script. en esta ocasion la plataforma ya sube y baja pero a una velocidad descontrolada. agradecere si alguien me pudiera hacer alguna observación de porque es tan rapido el movimiento de la plataforma.using UnityEngine;
using System.Collections;

public class islamovil : MonoBehaviour {
    public Transform inicio;
    public Transform destino;
    public float Velocity = 1f;
    float tiempo;
    float distance;
    float distanceVel;
    float movement;

    private void Start () 
    {
        tiempo = Time.time;
        distance = Vector3.Distance(inicio.position, destino.position);
        StartCoroutine(goUp());
    }

 private IEnumerator goUp()
    {
            distanceVel = (Time.time - tiempo) * Velocity;
            movement = distanceVel / distance;
            transform.position = Vector3.Lerp (inicio.position, destino.position, movement);
        yield return null; 
        StartCoroutine(goDown());
    }

    private IEnumerator goDown()
    {
        distanceVel = (Time.time - tiempo) * Velocity;
        movement = distanceVel / distance;
        transform.position = Vector3.Lerp (destino.position, inicio.position, movement);
        yield return null;
        StartCoroutine (goUp());
    }
}
 

Tu ya sabes que las coroutines se ejecutan en paralelo? Se estarán pegando de tortazos entre el Up y el Down múltiples funciones a la vez. Como sistema aleatorio es bueno. Primero averigua que son las coroutines y luego utilízalas.

Muchas gracias por decirme que se ejecutan en paralelo, la vdd no lo sabia. Por eso estoy acá porq quiero aprender y hay cosas q se me complican y me acerco a Uds para q orienten y me hagan ver en donde esta mi error. Muchas gracias 

checando en internet lei que dentro de Unity esta Mathf.PingPong, el cual serviria  para lo que requiero ya que moveria la plataforma del punto A al punto B y retornaria de nuevo al punto A. ya realice el script pero no funciona. si alguien de ustedes me pudiese orientar de mi error se lo agradecere   public float distancia = 6f;
    public float velocidad;
    float Posy;

    void update ()
    {
        Posy = Mathf.PingPong (Time.time * velocidad, distancia);
        transform.position = new Vector3 (transform.position.x,Posy, transform.position.z);
    }
}

La función creo que recibe 3 parámetros, revisa la api por si acaso, el valor actual, el mínimo y el máximo, en el valor actual no tienes que darle un valor cada vez mayor, tienes que darle el valor posy. Pero casi lo tienes.

la api lo unico q tiene es esto: PingPongs el valor t, de manera que nunca es mayor que la longitud y nunca menor que 0.
El valor devuelto se moverá hacia atrás y adelante entre 0 y longitud.
transform.position = new Vector3(Mathf.PingPong(Time.time, 3), transform.position.y, transform.position.z);
siendo en este caso mi distancia 6. por cierto hice publc velocidad pero en el inspector lo tengo como 1.link api. http://docs.unity3d.com/ScriptReference/Mathf.PingPong.html


Vale, solo recibe 2 parámetros, pero sigues teniendo que darle el valor posy, no todos los ejemplos de la api están perfectos :/

no pude dormir tratando de buscar una posible solución q incluso use un vector3 lerp. de este modotiempo = Mathf.PingPong (Time.deltaTime*velocidad, distancia)+altura;
        transform.position = Vector3.Lerp (inicio.position, destino.position, tiempo);
 tratare de dejarlo unos  minutos ya hasta me duele la cabeza...  incluso busque ejemplos y tutorial des Mathf.PingPong pero sin mucha ayuda,,, 

Etiquetas: