Jump to content
UnitySpain
Sign in to follow this  
casin

No atravesar Collider

Recommended Posts

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.

Edited by casin

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...