- Home /
Apply force and torque on different collider enter
I'm trying to make my game objects (a concrete pillar for instance) to receive a relative force and torque when hit by my bullet collider but NOT coming from the bullet rigidbody force itself.
what i'm trying to achieve is:
my pillar starts in a idle position (all translations and rotation blocked).
when hit by the projectile BulletPIN+ (rigidbody) it should receive a force forward and a torque (ignoring the bullet force).
when hit by BulletPIN- it should receive the same force and torque but in the opposite direction.
for now i'm playing around with joints (fixed or configurable etc...) and i createad a script to add forces on the pillar but i have unexpected behaviors and i have no possibility to revert the force by using a second bullet type.
i created a empty game object as a Controller and attached my gameobject as child
on the controller i added a configurable joint freezing the Y, Z motions and X, Y angular motions
i added a script to add force and torque on the controller
but:
the Controller (and the gameobject) seem to not receive the force and the torque i added (maybe i made some mistakes in the code)
the Controller receives the impact force of my bullet colliders/rigidbody (BulletPIN+, BulletPIN- etc..) so they're moving accordingly to the impact they receive, eventually ignoring the forces i want to add with the script.
sometimes, when the object is hit at the bottom by the bullet is jumping up (ignoring the configurable joint constraints).
here's the script:
using UnityEngine;
using System.Collections;
public class AddForce : MonoBehaviour
{
public float ForceForward;
public float ForceBackward;
public float forceNegative;
public float TorquePositive;
public float TorqueNegative;
void OnCollisionEnter(Collision col)
{
Debug.Log("Collision!");
if (col.gameObject.name == "BulletROLLER+")
{
col.gameObject.GetComponent<Rigidbody>().AddForce(ForceForward, 0, 0);
float turn = Input.GetAxis("Horizontal");
col.gameObject.GetComponent<Rigidbody>().AddRelativeTorque(Vector3.up * TorquePositive * turn);
}
if (col.gameObject.name == "BulletROLLER-")
{
col.gameObject.GetComponent<Rigidbody>().AddForce(ForceBackward, 0, 0);
float turn = Input.GetAxis("Horizontal");
col.gameObject.GetComponent<Rigidbody>().AddRelativeTorque(Vector3.up * TorqueNegative * turn);
}
}
}
i'm sorry for the long question, i hope you can help me.