ControllerColliderHit es usado por CharacterController.OnControllerColliderHit para dar información detallada sobre la colisión y como trabajar con ella.
VARIABLES:
controller:
var controller : CharacterController
El controller que golpea el collider.
un simple ejemplo, para el cual con la esfera seleccionada vamos a menú=>Component=>Physics=>Character Controller, y reemplazamos la Sphere Collider. Luego escribimos el siguiente script:
function OnControllerColliderHit(colision : ControllerColliderHit) {
Debug.Log(colision.controller.name);
}
function FixedUpdate(){
collider.Move(Vector3(-8,0,0));
}
Poco que explicar. Movemos la esfera hacia el cubo (notad que sustituimos la función AddForce por Move, ya que ahora nuestra esfera tiene un character controller. Una vez impacta con el cubo, se imprime el nombre del controller (la esfera)
collider:
var collider : Collider
El collider que fue golpeado por el controller. Para verlo en un ejemplo sustituyamos "colision.controller.name" por "colision.collider.name".
rigidbody:
var rigidbody : Rigidbody
El rigidbody que fue golpeado por el controller. Es null si no se toca un rigidbody sino un collider estático.
gameObject:
var gameObject : GameObject
El game object que fue golpeado por el controller.
transform:
var transform : Transform
El transform que fue golpeado por el controller.
point:
var point : Vector3
El punto de impacto en coordenadas globales.
normal:
var normal : Vector3
El normal de la superficie con la que colisionamos en coordenadas globales.
moveDirection:
var moveDirection : Vector3
Aproximadamente la dirección desde el centro de la cápsula al punto que tocamos. Esto puede ser útil para encontrar una dirección razonable para aplicar fuerzas a rigidbodies golpeados.
Por poner un ejemplo muy básico:
function OnControllerColliderHit(colision : ControllerColliderHit) {
colision.rigidbody.AddForce(colision.moveDirection * 15);
Debug.Log(colision.moveDirection);
}
function FixedUpdate(){
collider.Move(Vector3(-2,0,0));
}
Cuando el cubo recibe el impacto de la esfera, a su vez al rigidbody vinculado al cubo le aplicamos una fuerza en la misma dirección del impacto, multiplicada por quince. Paralelamente imprimimos la dirección desde el centro de la cápsula de nuestro controller al punto de contacto.
moveLenght:
var moveLength : float
Indica lo lejos que el character controller ha viajado hasta golpear al collider. Note que esto puede ser diferente de lo que pasas a CharacterController.Move, porque todos los movimientos están constreñidos por colisiones.
No hay comentarios:
Publicar un comentario