Buscar..


Cuerpos rígidos

Visión general

El componente Rigidbody le da a GameObject una presencia física en la escena en el sentido de que es capaz de responder a las fuerzas. Puedes aplicar fuerzas directamente a GameObject o permitir que reaccione a fuerzas externas como la gravedad u otro Rigidbody que lo golpee.


Añadiendo un componente de Rigidbody

Puede agregar un Rigidbody haciendo clic en Componente> Física> Rigidbody


Moviendo un objeto Rigidbody

Se recomienda que si aplica un Rigidbody a un GameObject, use fuerzas o torque para moverlo en lugar de manipular su Transform. Use los AddForce() o AddTorque() para esto:

// Add a force to the order of myForce in the forward direction of the Transform.
GetComponent<Rigidbody>().AddForce(transform.forward * myForce);

// Add torque about the Y axis to the order of myTurn.
GetComponent<Rigidbody>().AddTorque(transform.up * torque * myTurn);

Masa

Puedes alterar la masa de un objeto de juego de Rigidbody para afectar cómo reacciona con otros cuerpos y fuerzas de Rigidbody. Una masa más alta significa que GameObject tendrá más influencia sobre otros GameObjects basados ​​en la física, y requerirá una mayor fuerza para moverse. Los objetos de diferente masa caerán a la misma velocidad si tienen los mismos valores de arrastre. Para alterar la masa en el código:

GetComponent<Rigidbody>().mass = 1000;

Arrastrar

Cuanto mayor sea el valor de arrastre, más se ralentizará un objeto mientras se mueve. Piénsalo como una fuerza opuesta. Para alterar el arrastre en el código:

GetComponent<Rigidbody>().drag = 10;

es cinemático

Si marca un Rigidbody como Cinemático, entonces no puede ser afectado por otras fuerzas, pero puede afectar a otros GameObjects. Para alterar en el código:

GetComponent<Rigidbody>().isKinematic = true;

Restricciones

También es posible agregar restricciones a cada eje para congelar la posición o rotación del Rigidbody en el espacio local. El valor predeterminado es RigidbodyConstraints.None como se muestra aquí:

introduzca la descripción de la imagen aquí

Un ejemplo de restricciones en el código:

// Freeze rotation on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation 

// Freeze position on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition 

// Freeze rotation and motion an all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeAll 

Puede utilizar el operador bit a bit o | para combinar múltiples restricciones como tal:

// Allow rotation on X and Y axes and motion on Y and Z axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePositionZ | 
    RigidbodyConstraints.FreezeRotationX;

Colisiones

Si quieres un GameObject con un Rigidbody en él para responder a las colisiones, también necesitarás agregarle un colisionador. Los tipos de colisionador son:

  • Box Collider
  • Colisionador de esfera
  • Colisionador de cápsulas
  • Colisionador de ruedas
  • Colisionador de malla

Si aplica más de un colisionador a un GameObject, lo llamamos un colisionador compuesto.

Puede convertir a Collider en un Trigger para utilizar los OnTriggerEnter() , OnTriggerStay() y OnTriggerExit() . Un colisionador desencadenante no reaccionará físicamente a las colisiones, otros GameObjects simplemente lo atravesarán. Son útiles para detectar cuándo otro GameObject está en un área determinada o no, por ejemplo, cuando recopilamos un elemento, es posible que deseamos poder ejecutarlo pero detectar cuándo sucede esto.

Gravedad en Cuerpo Rigido

La propiedad useGravity de un RigidBody controla si la gravedad la afecta o no. Si se establece en false RigidBody se comportará como si estuviera en el espacio exterior (sin que se le aplique una fuerza constante en alguna dirección).

GetComponent<RigidBody>().useGravity = false;

Es muy útil en las situaciones en las que necesita todas las demás propiedades de RigidBody excepto el movimiento controlado por la gravedad.

Cuando está habilitado, RigidBody se verá afectado por una fuerza gravitacional, configurada en Physics Settings :

introduzca la descripción de la imagen aquí

La gravedad se define en unidades de mundo por segundo al cuadrado, y se ingresa aquí como un vector tridimensional: lo que significa que con los ajustes en la imagen de ejemplo, todos los RigidBodies con la propiedad useGravity establecida en True experimentarán una fuerza de 9.81 unidades mundiales por segundo por segundo en la dirección hacia abajo (como valores Y negativos en el sistema de coordenadas de Unity apuntan hacia abajo).



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow