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 (//%5Byoutube%5Dhttps://www.youtube.com/watch?v=gl8ijNQrhls%5B/youtube%5D)
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.
[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.
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,
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 (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)
Por qué utilizas Time.time?
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,,,
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.
Puede que esto te sirva xD
http://unityspain.com/index.php?/topic/35616-[Aporte]-PlatformMove (//%7Boption%7D)
[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