105. CLASE CONTROLLERCOLLIDERHIT




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.

POSTED BY UnityScripts
DISCUSSION 0 Comments

Leave a Reply

Con la tecnología de Blogger.