46. CLASE MONOBEHAVIOUR (VI)
Seguimos con las funciones sobreescribibles.
OnMouseUp:
function OnMouseUp () : void
Esta función es llamada cuando el usuario libera/suelta el botón del ratón. Es llamada incluso si el mouse no está al soltar el botón sobre el mismo GUIElement o Collider en que estaba cuando el botón fue presionado. (Para que tuviera ese comportamiento habría que usar OnMouseUpAsButton, que vamos a examinar a continuación)
OnMouseUpAsButton:
function OnMouseUpAsButton () : void
Como anticipábamos en la función anterior, ésta es llamada sólo cuando el mouse es liberado estando sobre el mismo GUIElement o Collider en el que fue presionado.
OnMouseDrag:
function OnMouseDrag () : void
Es llamada esta función cuando el usuario presiona el botón del mouse sobre un GUIElement o un Collider y todavía lo mantiene presionado. Es llamada cada frame mientras el botón siga presionado.
OnTriggerEnter, OnTriggerExit, OnTriggerStay, OnCollisionEnter, On CollisionExit, OnCollisionStay:
Todas estas funciones ya fueron explicadas en la clase Collider, así que a la misma me remito.
OnControllerColliderHit:
function OnControllerColliderHit (hit : ControllerColliderHit) : void
Es llamada cuando nuestro character controller golpea un collider mientras realiza un movimiento, de tal manera que muchas veces esta función sirve para empujar objetos cuando colisionan con el personaje.
Hagamos unas modificaciones previas al pertinente ejemplo en la interfaz de Unity.
1.- Eliminamos el script vinculado a PortaScripts, para que no nos lance errores.
2.- Añadimos un CharacterController al cubo, reemplazando cuando nos lo pida
Unity el antiguo boxCollider.
3.- Desconectamos provisionalmente el boxCollider del gameobject Suelo, dado que
en caso contrario será el suelo el primer collider con el que se tope nuestra
función.
4.- Escribimos este script, que le vincularemos al cubo:
var miCharCon : CharacterController;
miCharCon = GetComponent(CharacterController);
function Update() {
miCharCon.Move(Vector3(1 * Time.deltaTime ,0,0));
}
function OnControllerColliderHit(teToco) {
teToco.rigidbody.AddForce(Vector3(0,0,50));
}
Play. Nuestro character controller (también conocido como cubo) avanza hacia la izquierda a razón de un metro por segundo, y cuando se topa con un controller (la esfera), algunos datos de la colisión y sus intervinientes son pasador al único parámetro de la función, que es de la clase ControllerColliderHit.
La clase ControllerColliderHit, aunque la veremos más en profundidad en otra lección, cuenta con una serie de variables, entre las que destacan:
controller: El character controller que golpea el collider (nuestro cubo en el
ejemplo)
collider: El collider que es golpeado por el character controller (la esfera,
aquí)
rigidbody: El rigidbody que ha sido golpeado por el character controller, si es
que el collider que golpeamos tiene rigidbody (en el ejemplo lo usamos
porque la esfera tiene rigidbody).
gameObject: El game object que ha sido golpeado por el character controller.
transform: El transform que ha sido golpeado por el controller.
point: El punto de impacto en coordenadas globales.
normal: El normal de la superficie que ha sido colisionado en coordenadas
globales.
moveDirection: Aproximadamente la dirección desde el centro de la cápsula del
character controller al punto que tocamos.
moveLength: La distancia que el character controller ha recorrido hasta golpear
con el collider.
Entonces, volviendo al ejemplo, a través del parámetro de tipo ControllerColliderHit que hemos dado en llamar teToco, accedemos a la variable rigidbody, que obviamente se corresponde con el rigidbody de la esfera, y a partir de ahí le asignamos un comportamiento, que en este caso es meramente desplazarse en el eje Z.
OnJointBreak:
function OnJointBreak (breakForce : float) : void
Esta función ya la explicamos en la lección correspondiente a la clase Joint.
OnParticleCollision:
function OnParticleCollision (other : GameObject) : void
Esta función es llamada cuando una partícula choca con un collider. Puede por tanto usarse para computar el daño recibido por un gameobject cuando choca con partículas. Este mensaje es enviado a todos los scripts vinculados con el WorldParticleCollider y al collider que fue colisionado. El mensaje es sólo enviado si habilitamos SendCollisionMessage en el inspector del WroldParticleCollider.
Quedémonos de momento con esta sucinta información, que ya trabajaremos cuando nos toque lidiar con la clase ParticleEmitter.
Con la tecnología de Blogger.
BUSCADOR
PÁSATE POR EL FORO
API DE UNITY
TEMAS
- 00_INTRODUCCION (3)
- 01_CLASE OBJECT (3)
- 02_ESTRUCTURA VECTOR3 (4)
- 03_CLASE TRANSFORM (7)
- 04_CLASE RIGIDBODY (8)
- 05_CLASE COLLIDER (2)
- 06_CLASE MESHCOLLIDER (1)
- 07_CLASE CHARACTERCONTROLLER (3)
- 08_CLASE RENDERER (2)
- 09_CLASE MESHFILTER (1)
- 10_CLASE JOINT (2)
- 11_CLASE HINGEJOINT (2)
- 12_CLASE SPRINGJOINT (1)
- 13_CLASE CHARACTERJOINT (1)
- 14_CLASE BEHAVIOUR (1)
- 15_CLASE MONOBEHAVIOUR (9)
- 16_CLASE CAMERA (6)
- 17_CLASE LIGHT (3)
- 18_CLASE MATERIAL (3)
- 19_CLASE CUBEMAP (1)
- 20_CLASE RENDERTEXTURE (3)
- 21_CLASE PARTICLEEMITTER (3)
- 22_CLASE MESH (2)
- 23_CLASE GAMEOBJECT (6)
- 24_CLASE SHADER (1)
- 25_CLASE PHYSICMATERIAL (1)
- 26_CLASE COMPONENT (1)
- 27_CLASE GUIELEMENT (1)
- 28_CLASE GUITEXT (2)
- 29_CLASE GUITEXTURE (1)
- 30_CLASE GUI (8)
- 31_CLASE GUILAYOUT (4)
- 32_CLASE TEXTURE (1)
- 33_CLASE TEXTURE2D (2)
- 34_CLASE INPUT (4)
- 35_ESTRUCTURA BOUNDS (1)
- 36_CLASE COLLISION (1)
- 37_CLASE CONTROLLERCOLLIDERHIT (1)
- 38_CLASE DEBUG (1)
- 39_CLASE EVENT (3)
- 40_CLASE GIZMOS (1)
- 41_CLASE LIGHTMAPSETTINGS (1)
- 42_ESTRUCTURA MATHF (3)
- 43_CLASE PHYSICS (2)
- 44_ESTRUCTURA QUATERNION (1)
- 45_CLASE RANDOM (1)
- 46_ESTRUCTURA RAY (1)
- 47_ESTRUCTURA RAYCASTHIT (1)
- 48_ESTRUCTURA RECT (1)
- 49_CLASE RENDERSETTINGS (1)
- 50_CLASE SCREEN (1)
- 51_CLASE TIME (1)
- 52. CLASE YIELDINSTRUCTION (1)
- MONOGRAFICOS (2)
ENTRADAS
-
▼
2011
(127)
-
▼
octubre
(121)
- 116. ESTRUCTURA RAYCASTHIT
- 115. ESTRUCTURA RAY
- 114. CLASE RANDOM
- 113. ESTRUCTURA QUATERNION
- 112. CLASE PHYSICS (y II)
- 111. CLASE PHYSICS (I)
- 110. ESTRUCTURA MATHF (y III)
- 109. ESTRUCTURA MATHF (II)
- 108. ESTRUCTURA MATHF (I)
- 107. CLASE LIGHTMAPSETTINGS
- 106. CLASE GIZMOS
- 105. CLASE EVENT (y III)
- 104. CLASE EVENT (II)
- 107. CLASE EVENT (I)
- 106. CLASE DEBUG
- 105. CLASE CONTROLLERCOLLIDERHIT
- 104. CLASE COLLISION
- 103. ESTRUCTURA BOUNDS
- 102. CLASE INPUT (y IV)
- 101. CLASE INPUT (III)
- 100. CLASE INPUT (II)
- 99. CLASE INPUT (I)
- 98. CLASE TEXTURE2D (y II)
- 97. CLASE TEXTURE2D (I)
- 96. CLASE TEXTURE
- 95. CLASE GUILAYOUT (y IV)
- 94. CLASE GUILAYOUT (III)
- 93. CLASE GUILAYOUT (II)
- 92. CLASE GUILAYOUT (I)
- 91. CLASE GUI (y VIII)
- 90. CLASE GUI ( VII)
- 89. CLASE GUI (VI)
- 88. CLASE GUI (V)
- 87. CLASE GUI (IV)
- 86. CLASE GUI (III)
- 85. CLASE GUI ( II)
- 84. CLASE GUI (I)
- 83. CLASE GUITEXTURE
- 82. CLASE GUITEXT (y II)
- 81. CLASE GUITEXT (I)
- 80. CLASE GUIELEMENT
- 79. CLASE COMPONENT
- 78. CLASE PHYSICMATERIAL
- 77. CLASE SHADER
- 76. CLASE GAMEOBJECT (y VI)
- 75. CLASE GAMEOBJECT (V)
- 74. CLASE GAMEOBJECT (IV)
- 73. CLASE GAMEOBJECT (III)
- 72. CLASE GAMEOBJECT (II)
- 71. CLASE GAMEOBJECT (I)
- 70. CLASE MESH (y II)
- 69. CLASE MESH (I)
- 68. CLASE PARTICLEEMITTER (y III)
- 67. CLASE PARTICLEEMITTER (II)
- 66. CLASE PARTICLEEMITTER (I)
- 65. CLASE RENDERTEXTURE (y III)
- 64. CLASE RENDERTEXTURE (II)
- 63. CLASE RENDERTEXTURE (I)
- 62. CLASE CUBEMAP
- 61. CLASE MATERIAL (y III)
- 60. CLASE MATERIAL (II)
- 59. CLASE MATERIAL (I)
- 58. CLASE LIGHT (y III)
- 57. CLASE LIGHT (II)
- 56. CLASE LIGHT (I)
- 55. CLASE CAMERA (VI)
- 54. CLASE CAMERA (V)
- 53. CLASE CAMERA (IV)
- 52. CLASE CAMERA (III)
- 51. CLASE CAMERA (II)
- 50. CLASE CAMERA (I)
- 49. CLASE MONOBEHAVIOUR (y IX)
- 48. CLASE MONOBEHAVIOUR (VIII)
- 47. CLASE MONOBEHAVIOUR (VII)
- 46. CLASE MONOBEHAVIOUR (VI)
- 45. CLASE MONOBEHAVIOUR (V)
- 44. CLASE MONOBEHAVIOUR (IV)
- 43. CLASE MONOBEHAVIOUR (III)
- 42. CLASE MONOBEHAVIOUR (II)
- 41. CLASE MONOBEHAVIOUR (I)
- 40. CLASE BEHAVIOUR
- 39. CLASE CHARACTERJOINT
- 38. CLASE SPRINGJOINT
- 37. CLASE HINGEJOINT (y II)
- 36. CLASE HINGEJOINT (I)
- 35. CLASE JOINT (y II)
- 34. CLASE JOINT (I)
- 33. CLASE MESHFILTER
- 32. CLASE RENDERER (y II)
- 31. CLASE RENDERER (I)
- 30. CLASE CHARACTERCONTROLLER (y III)
- 29. CLASE CHARACTERCONTROLLER (II)
- 28. CLASE CHARACTERCONTROLLER (I)
- 27. CLASE MESHCOLLIDER
- 26. CLASE COLLIDER (II)
- 25. CLASE COLLIDER (I)
- 24. CLASE RIGIDBODY (y VIII)
- 23. CLASE RIGIDBODY (VII)
- 22. CLASE RIGIDBODY (VI)
- 21. CLASE RIGIDBODY (V)
-
▼
octubre
(121)
Hola, estoy siguiendo tu tutorial y me esta ayudando muchisimo, estoy empezando ahora con esto del unity y la verdad que me viene de maravilla. Solo queria puntualizarte que cuando realizas los siguientes pasos para probar el OnControllerColliderHit:
1.- Eliminamos el script vinculado a PortaScripts, para que no nos lance errores.
2.- Añadimos un CharacterController al cubo, reemplazando cuando nos lo pida
Unity el antiguo boxCollider.
3.- Desconectamos provisionalmente el boxCollider del gameobject Suelo, dado que
en caso contrario será el suelo el primer collider con el que se tope nuestra
función.
4.- Escribimos este script, que le vincularemos al cubo:
Decirte que si no bloqueas en constraints, el eje Y de la esfera, al haber quitado el collider del suelo, esta caera al infinito. Nada mas decirte eso para que si lo quieres revisar, evitar posibles confusiones.
Por lo demas, muchas gracias por tomarte la molestia de escribir un tutorial. Saludos!