Jump to content
xcqoax

problemas plataforma movil (arriba/abajo)

Recommended Posts

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 ();
    }
}

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites


        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.

 

lo que haces aqui te da el mismo resultado según tengo entendido, porque te esta dando la distancia entre los 2 vectores que le estas dando, y estos son los mismos en ambas lineas solo en orden diferente.

Edited by isai

Share this post


Link to post
Share on other sites

si es verdad, es que al momento de tratar de analizar un poco mas me puse a colocarle lineas y una de ellas fue la

tamañ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.

 

Share this post


Link to post
Share on other sites

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());
    }
}

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 

Share this post


Link to post
Share on other sites

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);
    }
}

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

no pude dormir tratando de buscar una posible solución q incluso use un vector3 lerp. de este modo

tiempo = 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,,,

 

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...