Contenidos: Rigidbody, Materiales físicos, Fuerzas.
Clase de Física 3D en Unity, realizada para el curso "Física para Videojuegos" de la carrera Ingeniería en Desarrollo de Videojuegos de la Universidad de Talca.
3. Proyecto
• Al finalizar las 4 semanas deberán haber
creado un videojuego en donde se observen
todos los contenidos vistos en clase.
• El proyecto debe ser un shooter o un juego
de aventura en primera o en tercera persona.
• Para su desarrollo son libres de usar todos
los assets necesarios del Asset Store de
Unity.
4. 1. Rigidbody
• El motor de física utiliza el estudio de la mecánica de
cuerpos rígidos para su funcionamiento.
• Un cuerpo rígido (rigidbody) es un “cuerpo ideal” que
no sufre deformaciones por efecto de fuerzas
externas.
• La mecánica de cuerpos rígidos utiliza la segunda Ley
de Newton (conocida como ley fundamental de la
dinámica) y otras fórmulas como las ecuaciones de
movimiento de Euler.
5. Componente Rigidbody
• Un cuerpo rígido es afectado por fuerzas
externas (interacción con otros cuerpos
rígidos y la gravedad), y su movimiento
depende de factores como su forma
(colisionador), la masa, el centro de masa,
entre otras variables, haciendo que se
mueva de manera realista.
8. Masa
• mass (float): La masa del objeto (en
kilogramos), su valor por defecto es 1.
• Los objetos más pesados (con más masa)
empujan a los objetos más ligeros (con
menos masas) cuando éstos colisionan.
• Un error común es asumir que los objetos
pesados caen más rápido que los ligeros. En
realidad la velocidad de caída depende de
la gravedad (para todos los objetos por
igual) y de la resistencia que es propia de
cada objeto.
9. Densidad
• En muchas ocasiones es necesario utilizar el
valor de la densidad de un objeto en vez de
la masa. La densidad es una magnitud
referida a la cantidad de masa en un
determinado volumen de una sustancia, y
se relaciona con la siguiente ecuación
ρ=m/V, donde ρes la densidad, m la masa y
Vel volumen.
10. Densidad
• En un fluido, las sustancias más densas se
irán al fondo del recipiente. En una laguna
por ejemplo se podría simular que objetos
con poca densidad queden flotando sobre
el agua, en cambio objetos más densos se
hunden.
• Unity no provee un método directo para
calcular la densidad, pero sí se puede editar,
utilizando el método SetDensity(float
density), que cambia la masa del objeto
según las dimensiones de los
colisionadores.
11. Resistencia del aire
• drag (float): Indica cuánta resistencia del
aire afecta al objeto cuando se mueve con
fuerzas. El valor por defecto es 0, y significa
que no tiene resistencia al aire. Mientras
mayor es el valor el objeto cae más lento.
• angularDrag (float): Similar al anterior, pero
corresponde al valor cuando es afectado
por torque. El valor 0 significa que el objeto
no tiene resistencia al aire, y el valor por
defecto es 0.05.
13. Uso de la gravedad
• Controla si la gravedad afecta o no al
rigidbody. Por defecto está activada.
• Si se deja como falso, el rigidbody se
comportará como en el espacio exterior.
14. Gravedad global
• En el panel de PhysicsManager se puede modificar la física global del juego.
15. Is Kinematic
• El término “cinemático” (IsKinematic) en
física clásica se refiere al movimiento de los
objetos sin considerar las causas que los
producen; es decir, el cambio de posición en
el tiempo sin considerar las fuerzas.
• Un objeto de tipo Kinematic Rigidbody
Collider puede moverse y ser
desactivado/activado pero que no responde
a colisiones y fuerzas como un objeto
Rigidbody normal, por lo tanto tampoco son
afectados por la gravedad.
• Además, al contrario de un Static Collider,
un Kinematic Rigidbody en movimiento
puede aplicar fuerzas a otros objetos
Rigidbody cuando entra en contacto.
18. Interpolación
• La interpolación le permite suavizar el efecto de correr la física a un frame rate fijo.
• Por defecto, la interpolación está desactivada. Comúnmente se usa la interpolación en personajes
con rigidbody. La física se ejecuta a intervalos de tiempo discretos, mientras que los gráficos se
visualizan a velocidades de cuadro variables. Esto puede llevar a objetos de aspecto “nervioso”, ya
que la física y los gráficos no están completamente sincronizados. El efecto es sutil pero a menudo
visible en el personaje del jugador, especialmente si una cámara sigue al personaje principal.
19. Modo de detección de colisión
• Por defecto el modo es “Discrete”, modificar el modo puede generar un gran impacto en el
rendimiento físico.
• En caso de necesitar mejores resultados físicos usar:
• “ContinuousDynamic” para objetos que se mueven rápidamente,
• “Continuous” para otros objetos con los que se puede colisionar.
20. Restricciones de movimiento
• Permite que se restrinja el movimiento o
rotación usando física.
• Por ejemplo si un objeto está en el piso y se
restringe la posición en Y, significa al ser
afectado por la física sólo se moverá en los
ejes X y Z, pero no en Y.
21. FixedUpdate
• Esta función es llamada en un frame rate
fijo.
• Se debe usar FixedUpdate en lugar de
Update cuando se trata con Rigidbody. Por
ejemplo, al agregar una fuerza a un
rigidBody, debe aplicar la fuerza en un
frame fijo dentro de FixedUpdate en lugar
de cada frame dentro de Update.
22. FixedUpdate
• Se debe usar FixedUpdate en lugar de Update cuando se trata con Rigidbody.
25. 2. Materiales físicos
• Physic Material es utilizado para ajustar la fricción y
efectos de rebote de objetos que chocan.
26. Material físico
• El material físico debe ser añadido al Collider.
• Puede contenerlo la superficie como los mismos
objetos que se mueves usando un rigidbody.
27. Friction
• La fricción es la cantidad que previene que
superficie se deslicen de sí mismas.
• Usualmente un valor desde 0 a 1. Un valor de
cero se siente como hielo, un valor de 1 hará que
descanse rápidamente al menos de que mucha
fuerza o gravedad empuje al objeto.
• Static friction es utilizada cuando el objeto está
quieto. Esta va a frenar al objeto que se
comience a mover. Si una fuerza muy grande es
aplicada al objeto este va a comenzar a moverse.
En este punto Dynamic Friction va a comenzar a
funcionar y va a intentar des-acelerar al objeto
mientras este en contacto con otro.
28. Bounciness
• Indica qué tanto rebote tiene la superficie.
• Un valor de 0 no hará que rebote. Un valor
de 1 hará que rebote sin perder energía.
• Bounciness se refiere al coeficiente de
elasticidad que corresponde a la capacidad
de un cuerpo de presentar deformaciones,
cuando se lo somete a fuerzas exteriores.
30. 3. Fuerzas
• La fuerza es una magnitud física de carácter vectorial
que puede definirse como toda acción o influencia
capaz de modificar el estado de movimiento o de
reposo de un cuerpo (imprimiéndole una aceleración
que modifica el módulo o la dirección de su
velocidad).
31. Transform vs Rigidbody
• La diferencia más grande entre manipular el
Transform vs el Rigidbody es el uso de fuerzas.
Los Rigidbodies pueden recibir fuerzas y torque,
pero el Transforms no puede. Los Transform
pueden ser trasladados y girados, pero esto no
es lo mismo que utilizar física.
• Agregando fuerzas/torque al Rigidbody puede
cambiar la posición y la rotación del componente
Transform del objeto. Esta es la razón por la cual
usted debería solamente utilizar una o la otra.
• Cambiar el Transform mientras utilice física
puede causar problemas con colisiones y otros
cálculos.
32. Fuerza constante
• Constant Force es una utilidad para agregar
fuerzas constantes a un Rigidbody.
• El vector de fuerza o torque puede ser aplicado
en el espacio del mundo o en el espacio local del
objeto.
• Esto funciona muy bien para objetos (en el
juego) que requieran una fuerza constante como
por ejemplo un cohete.
33. Consejos de Unity
• Para hacer que un objeto vuele para arriba,
agregue una Constant Force (Fuerza constante)
con la propiedad Force teniendo un valor
positivo en Y.
• Para hacer un objeto volar hacia adelante,
agregue una Constant Force (Fuerza constante)
con la propiedad Relative Force teniendo un
valor positivo en Z.
34. Modos de fuerzas
• Unity provee 4 modos para aplicar su fuerza: fuerza, aceleración, impulso, cambio de
velocidad.
• Esto lo hace por medio de un enumerador “ForceMode”
35. Fuerza vs Impulso
• La fuerza es aplicada sobre el tiempo (frame a
frame).
• El impulso es un cambio repentino, debe ser
aplicado en un evento o frame específico.
36. Aceleración vs cambio de velocidad
• Sigue la misma lógica que la diferencia entre
fuerza e implulso.
• La aceleración es aplicada sobre el tiempo
(frame a frame).
• El cambio de velocidad es un cambio repentino,
debe ser aplicado en un evento o frame
específico.
37. AddForce
• Adhiere una fuerza al rigidbody.
• La fuerza puede ser continua usando los modos
force y acceleration y puede ser instantánea
usando los modos impulse o velocitychange.
39. AddForceAtPosition
• Aplica una fuerza en una posición. Como
resultado aplicará un torque y fuerza al objeto.
• Para conseguir un efecto realista, position
debería adecuarse aproximadamente a un punto
de la superficie del rigidbody. Hay que tener en
cuenta que cuando la posición position está muy
lejos del centro del Rigidbody, el esfuerzo de
torsión aplicado será demasiado grande e irreal.
40. AddTorque
• Aplica un esfuerzo de torsión al Rigidbody. La
torsión afecta la velocidad angular del objeto.
42. AddExplosionForce
• Aplica una fuerza al rigidbody simulando el efecto de una explosión. La fuerza de la explosión
disminuirá linealmente según aumente la distancia al rigidbody.
• AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float
upwardsModifier = 0.0F, ForceMode mode = ForceMode.Force);