Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: xcqoax en Abril 06, 2016, 01:26:49 AM

Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 06, 2016, 01:26:49 AM
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 ();
    }
}
Título: problemas plataforma movil (arriba/abajo)
Publicado por: francoe1 en Abril 06, 2016, 01:33:42 AM
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 (//%5Byoutube%5Dhttps://www.youtube.com/watch?v=gl8ijNQrhls%5B/youtube%5D) 
Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 06, 2016, 01:58:23 AM
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.
Título: problemas plataforma movil (arriba/abajo)
Publicado por: isai en Abril 06, 2016, 02:05:07 AM
[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) Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 06, 2016, 02:12:23 AM
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. 
Título: problemas plataforma movil (arriba/abajo)
Publicado por: ACarranza en Abril 06, 2016, 02:44:40 AM
http://unity3d.com/es/learn/tutorials/topics/scripting (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, 
Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 08, 2016, 12:50:46 AM
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());
    }
}
 
Título: problemas plataforma movil (arriba/abajo)
Publicado por: iRobb en Abril 08, 2016, 12:56:18 AM
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.
Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 08, 2016, 02:43:24 AM
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 
Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 09, 2016, 08:45:24 PM
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);
    }
}
Título: problemas plataforma movil (arriba/abajo)
Publicado por: juanma_teso en Abril 10, 2016, 02:25:02 AM
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.
Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 10, 2016, 02:49:21 AM
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 (http://docs.unity3d.com/ScriptReference/Vector3.html)(Mathf.PingPong (http://docs.unity3d.com/ScriptReference/Mathf.PingPong.html)(Time.time (http://docs.unity3d.com/ScriptReference/Time-time.html), 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 (http://docs.unity3d.com/ScriptReference/Mathf.PingPong.html)
Título: problemas plataforma movil (arriba/abajo)
Publicado por: iRobb en Abril 10, 2016, 03:07:10 AM
Por qué utilizas Time.time?
Título: problemas plataforma movil (arriba/abajo)
Publicado por: juanma_teso en Abril 10, 2016, 10:57:49 AM
Vale, solo recibe 2 parámetros, pero sigues teniendo que darle el valor posy, no todos los ejemplos de la api están perfectos :/
Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 10, 2016, 07:32:12 PM
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,,, 
Título: problemas plataforma movil (arriba/abajo)
Publicado por: xcqoax en Abril 11, 2016, 07:32:55 PM
por fin... no se si sea la mejor solución o la mas practica pero lo consegui.public float smooth = 0.1f;
    private Vector3 newPosition;

    void Awake ()
    {
        newPosition = transform.position;
    }

    void Update () 
    {
        cambioposicion();
    }

    void cambioposicion()
    {
        Vector3 posicionA = new Vector3 (113, 5, 0); 
        Vector3 posicionB = new Vector3 (113, -2, 0); 

        if (this.transform.position.y > 4)
            newPosition = posicionB;
        if (this.transform.position.y < -1)
            newPosition = posicionA;

        transform.position = Vector3.Lerp (transform.position, newPosition, Time.deltaTime *smooth);
    }
}
y para que comenzara a funcionar el objeto lo coloque en el V3(113,4.1,0) para que tomara bajara hasta el destino que seria posicionB y cuando transform.position.y sea menor que -1, tendria que subir hasta la posiciónA.  
Título: problemas plataforma movil (arriba/abajo)
Publicado por: GSG3D en Abril 11, 2016, 09:11:06 PM
Puede que esto te sirva xD
 http://unityspain.com/index.php?/topic/35616-[Aporte]-PlatformMove (//%7Boption%7D)
Título: problemas plataforma movil (arriba/abajo)
Publicado por: iRobb en Abril 12, 2016, 03:12:18 AM
[quote author=xcqoax" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35564" data-ipsquote-contentcommentid="129496">por fin... no se si sea la mejor solución o la mas practica pero lo consegui.public float smooth = 0.1f;
    private Vector3 newPosition;

    void Awake ()
    {
        newPosition = transform.position;
    }

    void Update () 
    {
        cambioposicion();
    }

    void cambioposicion()
    {
        Vector3 posicionA = new Vector3 (113, 5, 0); 
        Vector3 posicionB = new Vector3 (113, -2, 0); 

        if (this.transform.position.y > 4)
            newPosition = posicionB;
        if (this.transform.position.y < -1)
            newPosition = posicionA;

        transform.position = Vector3.Lerp (transform.position, newPosition, Time.deltaTime *smooth);
    }
}
Sólo texto | Texto con Imágenes