17. CLASE RIGIDBODY (I)
Nos disponemos a estudiar otra de las clases vitales para entender el funcionamiento de Unity. Es raro en juego en el que no interviene de alguna manera la física (un enemigo se cae, un personaje salta, y coche choca contra un muro...)
La clase Rigidbody controla la posición de un objeto a través de simulación de física. El componente Rigidbody, al ser añadido a un gameobject, toma el control sobre la posición de un objeto, haciendo que caiga bajo la influencia de la gravedad, y puede calcular cómo los objetos responderán a las colisiones.
Vamos a inspeccionar unas cosas en Unity: antes que nada, si estáis siguiendo por orden estas lecciones tendréis (como yo) emparentado el cubo dentro de la cápsula, así que lo arrastramos fuera para desemparentarlo. Luego, con el cubo seleccionado, echamos un vistazo al inspector. Vemos en él diferentes apartados (su transform, su malla, un collider y elementos de renderizado) pero no un rigidbody. Lo mismo nos pasaría si examinamos la cápsula. Ambos objetos, por lo tanto, no están sometidos a leyes físicas, y en consecuencia es como si carecieran de masa y por ende fueran ajenos a la gravedad.
Vamos a regalarles un rigidbody a nuestros objetos. Para hacer eso nos vamos -con uno de los obtetos seleccionado- al menú superior, y le damos a Component=>Physics=>Rigidbody. El gameobject que teníamos selecionado tiene ahora un componente nuevo:
Hacemos lo mismo con el otro gameobject. Acto seguido, en la ventana Escena pulsamos la X de nuestro gizmo,para tener una visión de los objetos desde el eje horizontal, y comprobar mejor lo que pasará ahora. Le damos al play...
y los objetos caen, porque ya no son inmunes a la gravedad.
Lo que procede ahora, para evitar que nuestros objetos abandonen la escena a la primera de cambio, es colocar un suelo. Vamos a ello.
Antes que nada, vamos a eliminar a nuestra vieja amiga la cápsula (conocida por los más veteranos por Origen). La razón es que por su forma específica no es demasiado estable para nuestros ejemplos una vez se ve afectada por la gravedad. Así que adiós, cápsula.
Y como a rey muerto, rey puesto, nos vamos al menú y le damos a GameObject=>Create other=>Sphere. La renombramos como "Esfera".
A continuación vamos a colocar a nuestros dos objetos a ras de suelo (antes no importaba que estuvieran flotando por ahí, pero ahora no querremos empezar el juego con un objeto pegándose un tortazo contra el suelo). Colocamos, como decimos, nuestros objetos en las siguientes coordenadas de posición (las rotaciones deben estar a 0):
Cubo: 0,0,0.
Esfera: 2,0,2.
Nos vamos ahora al menú=>Gameobject=>Create Other=>Plane. Lo renombramos antes que nada como "Suelo". Luego colocamos nuestra ventana de escena en vista superior (click en eje Y del gizmo), y para acabar, en la coordenada Y de su transform.position escribimos -0.5.
Esto último supongo que merece una explicación. Veamos, tanto el cubo como la esfera tienen una altura de una unidad y su origen (el 0,0,0) de dichos objetos se halla en su centro geométrico. Esto quiere decir que cuando un cubo está en el valor 0 de su eje Y, la mitad del cubo (0,5) se halla por debajo del nivel 0 (que es donde hemos colocado el suelo). En definitiva, si tanto el cubo como la esfera y el suelo los dejáramos con sus respectivos ejes Y a cero, los dos primeros aparecerían semienterrados en el tercero. Para evitarlo, o bien levantamos todos los objetos o bien bajamos el suelo, que es lo que hemos hecho.
Démosle al play. Observamos que los objetos ya no se caen, aunque a decir verdad y siendo todos los elementos de nuestra escena del mismo color, quizás nos interesaría ponerle a nuestro suelo un color que los hiciera resaltar.
Con el mouse situado sobre la carpeta Mis Scripts, pulsamos el botón derecho y creamos otro script (javascript, recordemos). Lo llamaremos ColorSuelo, y dice así:
function Start() { renderer.material.color=Color.red; }
La función Start es llamada por Unity, como su nombre indica, cuando se inicia el juego. Sólo es llamada una vez, a diferencia de Update, y en este caso nos interesa que sea así ya que vamos a dejar el color de nuestro suelo fijo durante todo el juego. Salvamos y arrastramos el script a Suelo. Le damos al play.
Y voilá, el suelo se nos vuelve de color rojo y los objetos contrastan algo más. Aún y todo, la escena continúa un poco oscura, así que mejor iluminarla un poco, ¿no?
Introducimos en la escena desde el menú gameobject una luz direccional, que renombraremos como "Luz" y ubicaremos/rotaremos en las siguientes coordenadas:
Posición: -5,15,-10
Rotación: 20,0,0
Si le damos al play, deberíamos ver algo parecido a esto:
Y más o menos con esto tendríamos ya la escena "preparada" para empezar a trabajar con la clase Rigidbody.
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)