13. CLASE TRANSFORM (IV)
FUNCIONES:
Translate:
function Translate (translation : Vector3, relativeTo : Space = Space.Self) : void
Esta función nos permite mover el transform en la dirección y distancia indicados en el parámetro de tipo Vector3 traslation. El segundo parámetro nos permite decidir si el transform se moverá según sus propias coordenadas (locales) o lo hará en base al espacio global. Por defecto, si no indicamos el segundo parámetro, Unity entiende que el transform se moverá según sus propias coordenadas (Space.Self).
Desarrollemos esto con un ejemplo:
Para empezar, desemparentamos nuestro cubo respecto de la cápsula, arrastrándolo a un espacio vacío de la jerarquía. Acto seguido, con el cubo seleccionado, en el inspector le asignamos a la coordenada Y de rotación un valor de 35. Abrimos el script que tenemos asignado al cubo y tecleamos:
transform.Translate(Vector3.forward * 5);
Salvamos y presionamos play. El cubo avanza cinco unidades en su eje Y, y recalcamos lo de "su" eje, ya que al no añadirle un segundo parámetro que diga lo contrario, se mueve según sus coordenadas locales.
Para ver la diferencia, añadamos como segundo parámetro a la función la variable World de la enumeración Space, para que sustituya al parámetro por defecto Space.Self:
transform.Translate(Vector3.forward * 5, Space.World);
function Translate (x : float, y : float, z : float, relativeTo : Space = Space.Self) : void
Existe un segundo prototipo para la función Translate. Como se puede comprobar, se diferencia del primero en que en lugar de pasar como parámetro para establecer la dirección y longitud del movimiento un Vector3, se pasa cada eje como un float independiente.
function Translate (translation : Vector3, relativeTo : Transform) : void
function Translate (x : float, y : float, z : float, relativeTo : Transform) : void
Estos dos prototipos varían de los anteriores en el segundo parámetro, que ya no versa sobre si el movimiento se hará tomando en cuenta las coordenadas locales del objeto que se mueve o las globales de la escena. En cambio, aquí el movimiento de nuestro transform vendrá fijado por otro transform. De esta manera, nos moveremos de acuerdo con las coordenadas locales de ese segundo objeto al que hacemos referencia. Si por ejemplo el parámetro relativeTo es una cámara, la derecha del traslation no es la derecha local de nuestro transform, o la derecha global, sino la derecha de la cámara. Por ejemplo:
Tecleamos lo siguiente en nuestro script
transform.Translate(Vector3.right * 5);
Esto hará que nuestro cubo se mueva cinco unidades a su derecha.
Y ahora modificamos el script para que quede así:
var miCamara : Transform;
transform.Translate(Vector3.right * 5, miCamara);
Arrastramos la cámara principal hasta la variable miCamara. De nuevo al play.
Ahora el cubo se mueve cinco unidades a la derecha de la cámara.
Como último apundo hemos de añadir que si relativeTo es nulo, las coordenadas del movimiento pasarán a ser las globales.
Rotate:
function Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void
Esta función permite rotar un transform. Acepta como parámetro un Vector3 con los grados de rotación en ángulos Euler. Por defecto, al igual que sucediera con la función translate, el transform rota sobre sus coordenadas locales, pudiendo hacerlo según las coordenadas globales si se lo indicamos con Space.World como segundo parámetro.
Veamos un ejemplo. Rehagamos nuestro script con el siguiente contenido:
function Update() {
transform.Rotate(Vector3.right * 25 * Time.deltaTime);
transform.Rotate(Vector3.up * 20 * Time.deltaTime, Space.World);
}
Al darle al play, observaremos que nuestro cubo rota sobre su eje X a razón de 25 grados por segundo mientras a la vez gira sobre el eje Y global a razón de 20 grados por minuto.
Es de señalar que ambas instrucciones se encuentran contenidas dentro de la función Update. Esta función, que en su momento estudiaremos con la debida profundidad, es llamada cada frame por nuestro ordenador (el framerate de cada ordenador varía), de tal manera que el movimiento es contínuo, pues los valores de rotación de nuestro cubo son actualizados constantemente.
Precisamente porque el framerate de cada ordenador es distinto, y para evitar que en función de cada PC los objetos se movieran más o menos deprisa (lo que tendría indeseables consecuencias, sobre todo en juegos en línea multijugador), se suele utilizar la variable de la clase Time Time.deltaTime. Time.deltaTime lo que consigue es transformar la unidad de frecuencia de cualquier tipo de movimiento de frames a segundos. Si por ejemplo en el último script no hubiéramos usado estas variables de tiempo, el cubo giraría 25 y 20 grados cada frame, quedando al albur de cada ordenador la frecuencia real que eso supondría. Al multiplicarlo por Time.deltaTime las rotaciones dependerán del tiempo y en consecuencia se producirán con la misma cadencia en cualquier ordenador.
function Rotate (xAngle : float, yAngle : float, zAngle : float, relativeTo : Space = Space.Self) : void
En esta versión de la función, la única diferencia es que se sustituye el Vector3 por tres floats, en los cuales se consignarán igualmente los grados de rotación.
function Rotate (axis : Vector3, angle : float, relativeTo : Space = Space.Self) : void
La variante que nos ofrece este tercer prototipo es que por un lado se indica en el primer parámetro sobre qué eje queremos que rote el transform, y en un segundo parámetro de tipo float le hemos de indicar el número de grados ha de rotar.
Mañana más.
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)