36. CLASE HINGEJOINT (I)




Esta clase agrupa juntos 2 rigidbodies, constreñiéndolos a moverse como si estuvieran conectados por una bisagra.

Este tipo de joints es perfecto para puertas, pero también puede usarse para modelar cadenas, por ejemplo.


VARIABLES:

motor:

var motor : JointMotor


La variable motor aplicará una fuerza en aumento hasta conseguir la velocidad deseada en grados por segundo. Esta variable es de tipo JointMotor, que es una estructura que a su vez tiene las siguientes variables:

targetVelocity: Es la velocidad de desplazamiento o rotación que se pretende
conseguir.
force: Es la fuerza que aplicará el motor para conseguir la velocidad fijada en
targetVelocity.
freeSpin: Es un booleano. Si está habilitado, el motor sólo acelerará y nunca
reducirá.

Si unimos intuitivamente los conceptos junturas y motor, posiblemente se nos vengan a la cabeza engranajes, vehículos o maquinarias. Esa intuición no va muy desencaminada. Hagamos las siguientes modificaciones para prepararnos el terreno.

Eliminamos el script vinculado a la esfera. Luego vamos a colocar a nuestros cubos siameses (cubo y cube) dos unidades sobre tierra, lo que obviamente conseguiremos colocando su posición (la de los dos) en el eje X en 2. En ambos casos, además y para evitar que se nos caigan al suelo por la gravedad, en sus respectivos constrainst marcaremos Freeze Position Y.

Ahora editamos el script MiPrimerScript (que si hemos seguido las lecciones al pie de la letra debemos tener vinculado a Cube), para que luzca así:


var pegadoATi : Rigidbody;
hingeJoint.connectedBody = pegadoATi;

hingeJoint.anchor = Vector3(0,0,0);
hingeJoint.motor.force =100;
hingeJoint.motor.targetVelocity = 90;
hingeJoint.motor.freeSpin = true;



Resumamos lo que hemos hecho: El rigidbody del segundo cubo (el que no tiene asignado un hingeJoint) es asignado a la variable pegadoATi, que posteriormente es conectada al hingeJoint. El ancla entre ambos cubos (que por defecto se ubica en el eje X) la colocamos en el centro geométrico del cubo, para que el giro que pretendemos sea más natural. Luego aplicamos un motor al hingejoint con una fuerza de 100 hasta conseguir alcanzar una velocidad de 90 grados por segundo, y sin que el motor pueda reducir.

Démosle al play para comprobar que funciona.

El motor trata de alcanzar la velocidad angular de motor.targetVelocity en grados por segundo. El motor sólo será capaz de alcanzar motor.targetVelocity si motor.force es suficientemente grande. Si el joint está girando más rápido que el motor.targetVelocity el motor se romperá. Un velor negativo para motor.targetVelocity hará que el motor gire en dirección contraria.

El motor.force es la torsión máxima que el motor puede ejercer. Si es cero el motor se deshabilita. El motor frenará cuando gire más rápido que motor.targetVelocity sólo si motor.freeSpin es false. Si motor.freeSpin es true el motor no frenará.

POSTED BY UnityScripts
DISCUSSION 0 Comments

Leave a Reply

Con la tecnología de Blogger.