#7 Método AddForce de la clase RigidBody. [Serie Fundamental de Unity]

Introducción

En este artícu­lo vamos a estu­di­ar cómo uti­lizar el méto­do AddForce de la clase Rigid­Body de Uni­ty, el cual nos per­mite aplicar fuerzas a los GameOb­jects que tienen asig­na­do un com­po­nente Rigid­Body. El obje­ti­vo es lograr que la pelota que se encuen­tra en el GameDe­vLab rebote indefinida­mente mien­tras dure la partida.

Página principal del proyecto

Antes de empezar te invi­to a ver el video que hice para resumir este artículo. 

Método AddForce de la clase RigidBody
👉

POR FAVOR CONSIDERA SUSCRIBIRTE AL CANAL

MIRA ESTE DESCABELLADO EXPERIMENTO

Procedimiento

Vamos a uti­lizar la estación "AddForce", la cual con­siste en un con­tene­dor en for­ma de dia­mante que tiene en su inte­ri­or una pelota. El obje­ti­vo es lograr que la pelota rebote indefinida­mente en el inte­ri­or de la estación. Para ello debe­mos aplicar una fuerza cuan­do la pelota toca el fondo. 

Escena de un proyecto en Unity3D, estación AddForce para estudiar cómo aplicar fuerzas a GameObjects con componente RigidBody.
Fig. 1: Estación AddForce del GameDevLab.

En la jer­ar­quía ten­emos el GameOb­ject "#7 AddForce" que con­tiene todos los ele­men­tos de la estación (figu­ra 2). Este GameOb­ject además tiene asig­na­do el Script "AddForce­ToOb­ject".

Jerarquía de un proyecto en Unity3D, resaltada se observa el GameObject "AddForce" que se utiliza para estudiar cómo aplicar fuerzas a GameObjects con componente RigidBody.
Fig. 2: Jer­ar­quía del GameDe­vLab. Vamos a tra­ba­jar con el GameOb­ject "#7 AddForce".

Inspector de un proyecto en Unity3D, se observa la componente "AddForceToObject" que se encargará de aplicar una fuerza sobre el GameObject.
Fig. 3: Com­po­nente "AddForce­ToOb­ject" asig­na­da al GameOb­ject "#7 AddForce".

En la figu­ra 3 obser­va­mos la componente"AddForceToObject" en el inspec­tor. Podemos asig­nar un obje­to al cual apli­car­le la fuerza, en este caso es "Sphere" la pelota que se encuen­tra en el inte­ri­or de la estación. Podemos asig­nar un val­or de fuerza mín­i­ma y máx­i­ma para aplicar a la pelota y la direc­ción de la fuerza.

Con el propósi­to de infor­marse un poco sobre qué es una fuerza y cómo se define hice este video:

A la izquierda, la esfera de la estación "AddForce". A la derecha se visualizan sus componentes en el inspector. Entre ellas hay una componente RigidBody que le dará comportamiento físico.
Fig. 4: A la izquier­da, la esfera de la estación "AddForce". A la derecha se visu­al­izan sus com­po­nentes en el inspec­tor. Entre ellas hay una com­po­nente Rigid­Body que le dará com­por­tamien­to físico.

El GameOb­ject de la pelota es sim­ple­mente una esfera prim­i­ti­va hecha en Uni­ty, tiene asig­na­do un com­po­nente Rigid­Body que le otor­ga el com­por­tamien­to físi­co. La pelota estará afec­ta­da por la gravedad, podrá col­i­sion­ar con obje­tos que tienen asig­na­dos Col­lid­ers y podremos apli­car­le fuerzas.

A la izquierda el GameObject encargado de detectar si la pelota toca el suelo. A la derecha sus componentes en el inspector.
Fig. 5: A la izquier­da el GameOb­ject encar­ga­do de detec­tar si la pelota toca el sue­lo. A la derecha sus com­po­nentes en el inspector.

En la base de la estruc­tura ten­emos un GameOb­ject con for­ma de cilin­dro que tiene asig­na­do un Box Col­lid­er en modo Trig­ger (figu­ra 4). Además tiene un Script lla­ma­do "AddForceCol­li­sion­De­tec­tion" que se encar­gará de detec­tar la pelota.

Resolución

Cuan­do abri­mos el Script "AddForce­ToOb­ject" por primera vez nos encon­tramos con lo que se ve en la figu­ra 6. Están definidos todos los parámet­ros que se ven en el inspec­tor y con­tiene un sólo méto­do lla­ma­do "addForce". Este méto­do está definido como públi­co porque es el que se va a lla­mar cuan­do se detecte que la pelota ha toca­do el sue­lo de la estructura.

Se observa un Script en lenguaje C# con el nombre "AddForceToObject". El Script corresponde a un proyecto en Unity3d, en el que se estudia cómo aplicar fuerzas a los GameObjects.
Fig. 6: Script "AddForce­ToOb­ject" incompleto.

A con­tin­uación se mues­tra la res­olu­ción de este ejer­ci­cio y se expli­ca cuál es el propósi­to de cada instrucción.

Se observa un método en lenguaje C# con el nombre "addForce". El método corresponde a un proyecto en Unity3d, en el que se estudia cómo aplicar fuerzas a los GameObjects.
Fig. 7: Res­olu­ción del ejercicio.

Para la res­olu­ción vamos a requerir tres instruc­ciones. La primera se encar­gará definir la mag­ni­tud de la fuerza a aplicar, que será un val­or aleato­rio entre la fuerza mín­i­ma y la máxima.

La segun­da instruc­ción definirá la fuerza total a aplicar, si viste el video sobre físi­ca, para definir una fuerza nece­si­ta­mos una mag­ni­tud y una direc­ción. Para la direc­ción uti­lizamos el vec­tor de tres dimen­siones (clase Vector3) que se ve en el inspec­tor, se lla­ma "forceDi­rec­tion­Vec­tor". Pero no lo vamos a uti­lizar tal y como está escrito en el inspec­tor. Para pre­venir que ese Vector3 afecte la mag­ni­tud de la fuerza debe­mos nor­malizar­lo. Es decir hac­er que su nor­ma val­ga 1. Esto lo hace­mos con el méto­do "Nor­mal­ize" de la clase Vector3. La fuerza total a aplicar será un Vector3 lla­ma­do "force" que es el resul­ta­do de mul­ti­plicar la direc­ción por la magnitud.

Por últi­mo la ter­cera instruc­ción con­siste en aplicar la fuerza sobre el obje­to. Las fuerzas son aplic­a­bles a GameOb­jects que tienen un com­po­nente Rigid­Body asig­na­do, en nue­stro caso vamos a aplicar la fuerza sobre la com­po­nente Rigid­Body de la pelota. Uti­lizamos el méto­do "Get­Com­po­nent" para obten­er la com­po­nente Rigid­Body y final­mente eje­cu­ta­mos el méto­do AddForce, pasan­do como parámetro la fuerza a aplicar.

Escena de un proyecto en Unity3D, estación AddForce para estudiar cómo aplicar fuerzas a GameObjects con componente RigidBody.
Fig. 8: Estación fun­cio­nan­do. La pelota reb­o­ta con fuerza variable.

Conclusión

Al pro­bar el juego, la pelota reb­o­ta indefinida­mente con una fuerza aleatoria.

Para definir una fuerza nece­si­ta­mos un val­or real para la mag­ni­tud y un vec­tor para la direc­ción en la que se debe aplicar.

Las fuerzas actúan sobre la com­ponete Rigid­Body de los GameObjects.

YouTube
Scroll al inicio
Secured By miniOrange