Noticias

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

No atravesar Collider

Iniciado por casin, Julio 13, 2015, 11:58:46 AM

Tema anterior - Siguiente tema
Julio 13, 2015, 11:58:46 AM Ultima modificación: Julio 13, 2015, 12:10:45 PM por casin
Buenas noches! Tengo un código para mover un personaje dando saltitos, estilo crossy road, pero el problema que tengo es que choca pero finalmente atraviesa los collader que se les ponga delante.
 
¿Cómo puedo hacer para que no lo atraviese?
 
O, ¿se puede poner desde el código algo parecido a si hay un collider delante del personaje, que no se pueda saltar hacia delante pero sí hacia los lados? Porque tengo puesto para que el personaje se mueva de 2 en 2 en la posición que lo quieras mover, ejemplo, pasa de la posición y = 0 a la y = 2 y así sucesivamente, y no quiero que al chocar se quede en la posición y = 1.
 
No se si me he explicado bien...
 
El código es este: 

float lerpTime;
float currentLerpTime;
float perc = 1;
Vector3 startPos;
Vector3 endPos;
 

// Update is called once per frame
void Update () {
   if (Input.GetButtonDown ("up") || Input.GetButtonDown ("down") || Input.GetButtonDown ("left") || Input.GetButtonDown ("right")) {
      if(perc == 1){
         lerpTime = 1;
         currentLerpTime = 0;
      }
   }
   startPos = gameObject.transform.position;
   if(Input.GetButtonDown("right") && gameObject.transform.position == endPos){
      endPos = new Vector3(transform.position.x + 2, transform.position.y,transform.position.z);
   }
   if(Input.GetButtonDown("left") && gameObject.transform.position == endPos){
      endPos = new Vector3(transform.position.x - 2, transform.position.y,transform.position.z);
   }
   if(Input.GetButtonDown("up") && gameObject.transform.position == endPos){
      endPos = new Vector3(transform.position.x, transform.position.y,transform.position.z + 2);
   }
   if(Input.GetButtonDown("down") && gameObject.transform.position == endPos){
      endPos = new Vector3(transform.position.x, transform.position.y,transform.position.z - 2);
   }
   currentLerpTime += Time.deltaTime * 5.5f;
   perc = currentLerpTime / lerpTime;
   gameObject.transform.position = Vector3.Lerp (startPos,endPos,perc);
}

Solo se le pone a un cubo y se configuran los cuatro botones en la configuracion de los Input de Unity.
 
Gracias y saludos.

Mira, primero tenes un errores de concepto, si tu estas trasladando el personaje editando su posición desde el componente "Transforms " este jamas va a colisionar las colisiones las gestiona el RigidBody y para que estas funciones deber Modificar su velocidad o Utilizar el método MovePosition o MoveRotation. 
 
Otra cosas, 

endPos = new Vector3(transform.position.x + 2, transform.position.y,transform.position.z);

No crees nuevos objetos innecesarios, imagínate que cada vez que llamas un frame se crean 4 nuevos vectores, debes reasignar el vector existente.

endPos += Transform.forward * 2; //Movimiento siempre en la dirección delantera del objeto.
endPos += Vector3.right * 2; //Movimiento a la Derecha
endPos -= Vector3.right *2; // Movimiento a la Izquierda

Por ultimo siempre que utilices físicas, gestiona todo desde FixedUpdate.
 
Suerte, y espero sea de ayuda.

Muchas gracias! Me va a ser de mucha ayuda, y ya he conseguido resolver el problema.

Etiquetas: