35. CLASE JOINT (y II)
breakForce:
var breakForce : float
La fuerza que es necesario aplicarle a este joint para romperlo. La fuerza podría venir por colisiones con otros objetos, fuerzas aplicadas con rigidbody.AddForce o por otros joints.
Vamos a realizar una serie de ejemplos que incluirán tanto las variables vistas en la lección anterior como en ésta. Para ello vamos a seguir los siguientes pasos:
1.- Eliminamos en el inspector el hingejoint de la esfera, y a ésta le añadimos un
sphere collider. La ubicamos en la posición (-1,0,-5). Le eliminamos el script que
tenía vinculado.
2.-Vamos al menú gameobject=>Create other=>Cube. Ubicamos este cube en (-1,0,0) y
le añadimos un hingejoint.
3.-Editamos el script MiPrimerScript como sigue:
var pegadoATi : Rigidbody;
hingeJoint.connectedBody = pegadoATi;
hingeJoint.breakForce = 20;
4.-Asignamos MiPrimerScript al recién creado gameobject Cube, y luego arrastramos
nuestro cubo a la variable pegadoATi.
5.-Editamos ahora MiSegundo script, tecleando:
function FixedUpdate() {
rigidbody.AddForce(0,0,9);
}
6.-Este script se lo asignamos a la esfera.
Bueno, pues vamos ahora a jugar a los bolos más rupestres de la historia. Tenemos por un lado dos cubos unidos por un joint (el cubo que tiene el hinge joint y el cubo unido a éste primero a través de la variable connectedBody), con una fuerza de ruptura de 20, y una esfera dispuesta a chocar contra el cubo situado a nuestra izquierda con una fuerza de 9. Démosle al play y probemos qué sucede.
Está claro que es mayor la resistencia del cubo que la fuerza de la esfera. Veamos si la variable breakForce ha tenido algo que ver en dicha resistencia cambiando su valor de 20 a 4. Play.
Observamos que -aunque con algo de esfuerzo- ahora sí la esfera rompe el joint y consigue arrastrar el cubo de la izquierda (el portador del hingejoint).
Hagamos ahora unas pequeñas modificaciones: Ubicamos la esfera en (0,0,-5) para que nos vaya a impactar al cubo que no tiene asignado el hingejoint.
Para hacer un acercamiento intuitivo al ejercicio, podemos pensar que el cubo situado a nuestra izquierda (cube) sería el marco y el de nuestra derecha (nuestro cubo) la puerta. Visto así, ahora vamos a intentar impactar nuestra esfera con la puerta.
Restablecemos la variable breakForce a 20. Le damos al play. Veremos que la esfera arrastra al cubo (abre la puerta), pero no rompe su unión con el otro cubo. Cambiemos de nuevo la variable breakForce de valor, pongámmosle un 1. De nuevo play. Observad cómo la esfera no tiene problemas en romper la juntura.
Pero vamos a seguir jugando con las variables que hemos ido viendo en estos dos capítulos. Antes que nada desplazaremos un poco nuestra esfera para que sólo golpee en el cubo que no tiene el hinge joint, así que ubicamos la esfera en (0.5,0,-5)
Vamos a añadir luego la variable axis a MiPrimerScript, de la siguiente manera:
var pegadoATi : Rigidbody;
hingeJoint.connectedBody = pegadoATi;
hingeJoint.axis = Vector3.up;
hingeJoint.breakForce = 20;
Recordemos que axis indica el eje alrededor del cual el movimiento de nuestro rigidbody portador del hingejoint permanecerá bloqueado. Por lo tanto, si bloqueamos el eje up/down a través de la variable axis, teóricamente el cubo de nuestra izquierda no debería girar sobre dicho eje. Como truco os recomendaría que antes de darle al play seleccionárais en el inspector el Cube, para que veáis la flecha naranja saliendo del gameobject. Al darle al play, la flecha señalará en la dirección del eje indicado por la variable axis.
Pulsamos el play, decimos, y tal como esperábamos, la esfera pasa a través del cubo de nuestra derecha, pero el que tiene el hinge joint no gira sobre su eje vertical. La diferencia resulta muy clara si cambiamos en lugar de Vector3.up colocamos Vector3.forward como valor de axis. probadlo sin miedo.
Probemos ahora la variable anchor, que tal como indicábamos indica la posición del ancla alrededor de la cual se restringe el movimiento de los joints. Probemos a dejar MiPrimerScript así:
var pegadoATi : Rigidbody;
hingeJoint.connectedBody = pegadoATi;
hingeJoint.axis = Vector3.right;
hingeJoint.anchor = Vector3(0,0,0);
hingeJoint.breakForce = 20;
Hemos cambiado, como vemos, el eje que restringirá la variable axis, pasando del eje arriba/abajo al derecha/izquierda. Ubicamos la variable anchor en las coordenadas locales de nuestro hingejoint (0,0,0). Démosle al play y observemos por un lado la ubicación de la flecha naranja (recordemos previo pulsar play dejar seleccionado Cube) y por otro el comportamiento de ambos cubos al ser impactados por la esfera.
Vale. Ahora vamos a modificar la ubicación del ancla. Dejémosla así:
hingeJoint.anchor = Vector3(0,-0.5,0.5);
Eso significa (recordemos que estamos en coordenadas locales del cube) que el ancla estará situada en el centro del cube respecto del eje X (0), en la parte inferior del cube respecto del eje Y (-0.5) y en la parte trasera del cube respecto al eje Z (0.5). Démosle al play y observemos la situación del ancla y la diferencia de comportamiento.
breakTorque:
var breakTorque : float
La torsión que es necesario aplicar a este joint para romperlo.
FUNCIONES:
OnJointBreak:
function OnJointBreak (breakForce : float) : void
Función de tipo "mensaje enviado" que es llamada cuando un joint vinculado al mismo game object se rompe. Cuando una fuerza que es mayor que el breakForce del joint es aplicada, el joint se romperá. En ese momento, esta función será llamada y el la fuerza de ruptura aplicada al joint le será pasada a la misma. Después de OnJointBreak el joint automáticamente será borrado del game object.
Adaptemos MiPrimerScript para explicar esta función:
var pegadoATi : Rigidbody;
hingeJoint.connectedBody = pegadoATi;
hingeJoint.breakForce = 1.0;
function OnJointBreak(resistencia : float) {
Debug.Log("Se nos rompió el joint con resistencia " + resistencia);
}
El script es bastante sencillo. Le aplicamos a nuestro hingejoint una fuerza de ruptura baja, para asegurarnos de que el impacto de la esfera lo romperá. Cuando esto suceda será llamada la función OnJointBreak, que en este caso imprimirá un mensaje en el que, además de un texto, mostrará el valor que tendrá tras la ruptura la variable que le pasamos como parámetro, y que coincidirá con la fuerza de ruptura previamente asignada.
Bueno, pues explicada la clase base, iremos a por las diferentes clases que heredan de joint.
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)