78. CLASE PHYSICMATERIAL
Esta clase describe cómo manejar los objetos que chocan (fricción, capacidad de rebotar, etc). Es posible que recordemos cuando estudiábamos la clase Collider, que ésta tenía dos variables/atributos -material y sharedMaterial- de tipo PhysicMaterial. Por norma general para crear/modificar las capacidades de fricción y rebote de un gameobject, pues, lo haremos a través de la propiedad collider.material de dicho gameobject.
VARIABLES:
dynamicFriction:
var dynamicFriction : float
La fricción usada cuando ya hay movimiento. Este valor ha de estar entre 0 y 1, siendo 0 la fricción del hielo y 1 la del caucho.
Probemos un ejemplo. Para ello empecemos por eliminar el script vinculado a PortaScripts. Luego editamos miPrimerScript, de esta guisa:
collider.material.dynamicFriction = 0;
function FixedUpdate() {
rigidbody.AddForce(0,0,-9);
}
Salvamos y le asignamos el script al cubo. Como vemos, le hemos dado al material la mínima fricción. Le damos al play y observamos que la fuerza arrastra el cubo sin problemas. Pero ahora probad a darle a dynamicFriction un valor de 0.4.
staticFriction:
var staticFriction : float
La fricción usada cuando un objeto está reposando en una superficie. Usualmente un valor de 0 a 1.
Siguiendo con nuestro ejemplo, podemos teclear:
collider.material.staticFriction = 0;
collider.material.dynamicFriction = 0.2;
function FixedUpdate() {
rigidbody.AddForce(0,0,-9);
}
Aquí nuestro cubo tendría una fricción en reposo nula y una en movimiento baja. Podemos tratar de invertir las tornas entre ambos valores e ir experimentando.
bounciness:
var bounciness : float
Qué capacidad de rebote tiene la superficie. 0 es no rebote. Un valor de 1 implica rebote sin pérdida de energía.
Para verlo con un ejemplo, eliminamos el script vinculado a nuestro cubo, primero, y luego colocamos la esfera en la posición (2,5,0). Editamos entonces miPrimerScript:
collider.material.bounciness = 0.7;
Lo vinculamos a la esfera. Observamos que ésta rebota un poco, sobre todo si comparamos el comportamiento de la esfera si establecemos esta propiedad en cero. No obstante, nos puede sorprender que a un valor tan alto como 0.7 la capacidad de rebote de nuestra esfera no sea superior. Dicha sorpresa se acrecienta si le asignamos el valor máximo (1) a bounciness. Lo que sucede es que Unity establece una media entre los valores de rebote de las dos superficies en contacto. Probad a arrastrar miPrimerScript también al Suelo y veréis la diferencia.
frictionDirection2:
var frictionDirection2 : Vector3
Se refiere a la dirección de anisotropía. La fricción anisotrópica está habilitada salvo que su vector esté a cero.
La anisotropía es aquella cualidad (forma, tamaño, temperatura, etc) que cambia en un objeto cuando se mueve.
DynamicFriction2 y staticFriction2, que estudiaremos a continuación, serán aplicadas a lo lardo de frictionDirection2. La dirección de anisotropía es relativa al sistema de coordenadas local del collider.
Utilizaremos un pequeño ejemplo para entender cómo funciona esto. Previamente devolvemos a la esfera al suelo (position.y=0) y luego eliminamos el script miPrimerScript que tenemos vinculado al suelo y la esfera. Editamos después de nuevo miPrimerScript:
collider.material.dynamicFriction = 1;
collider.material.frictionDirection2 = Vector3.forward;
collider.material.dynamicFriction2 = 0;
function FixedUpdate() {
rigidbody.AddForce(5,0,0);
}
Arrastramos tras salvar el script al cubo.
Bien. Vamos a tratar de explicar qué tenemos aquí. En primer lugar establecemos la fricción dinámica del cubo al máximo, esto es, 1. De esta manera debería resultar difícil poderlo arrastrar. Pero, a continuación, le damos a frictionDirection2 un valor distinto a 0,0,0, esto es, lo activamos. Lo que le estamos diciendo aqui a Unity es que a lo largo del eje Z (forward) la fricción del cubo será distinta que cuando se mueva a lo largo de los otros dos ejes (esto es la anisotropía). Concretamente, en la tercera declaración le indicamos a Unity que la fricción dinámica en ese eje Z dynamicFriction2 será nula (0).
En consecuencia, el resultado de este script debería hacer que el cubo se resistiera a moverse en los ejes X e Y pero en cambio no tuviera problemas en hacerlo en el eje Z. Para abrir boca, le aplicamos al script acto seguido una fuerza en el eje X. Pulsemos el play y comprobemos que el cubo si se mueve.
Pero ahora cambiemos los parámetros de AddForce a (5,0-5), esto es, aplicándole la misma fuerza en el eje Z (que no debería tener resistencia) que al X. Si funciona como debiera, el cubo empezará a moverse hacia delante, pero seguirá negándose a hacerlo hacia la derecha, aunque la presión en un eje y otro es la misma. Probad.
dynamicFriction2:
var dynamicFriction2 : float
Si la fricción anisotrópica está habilitada (frictionDirection2 no vale cero), dynamicFriction2 será aplicada a lo largo del eje/s de frictionDirection2 que no valga cero.
staticFriction2:
var staticFriction2 : float
Si la fricción anisotrópica está habilitada, staticFriction2 será aplicada a lo largo de frictionDirection2.
frictionCombine:
var frictionCombine : PhysicMaterialCombine
Determina cómo se combina la fricción. Tal como explicaba hace unas líneas en relación con el rebote, asimismo las propiedades de fricción son dependientes de la combinación de los dos materiales en contacto.
PhysicMaterialCombine (el tipo de este atributo) es una enumeración con las diferentes posibilidades de combinación de fricciones y capacidades de rebote.
Average: La media de la fricción o rebote de los materiales de los dos colliders.
Multiply: Multiplica la fricción o rebote de los materiales de los dos colliders.
Minimum: Usa el valor más bajo de fricción o rebote de los dos colliders.
Maximum: El valor más alto de los dos.
Así, la sintaxis para establecer la fricción entre dos colliders en el valor más alto de los dos sería así (a modo indicativo, nada más):
collider.material.frictionCombine = PhysicMaterialCombine.Maximum;
bounceCombine:
var bounceCombine : PhysicMaterialCombine
Determina cómo la capacidad de rebote es combinada. Al igual que la anterior, recurriremos al enum PysicMaterialCombine.
FUNCIONES:
PhysicMaterial:
static function PhysicMaterial () : PhysicMaterial
La función constructora crea un nuevo material. Es normalmente más fácil, sin embargo, usar meramente un collider.material y modificar el material vinculado directamente.
static function PhysicMaterial (name : String) : PhysicMaterial
Crea un nuevo material con un nombre dado.
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)