- Home /
Question by
jordanblythe104 · Feb 25, 2013 at 12:27 PM ·
forcebulletragdolladd
Bullet add force to ragdoll help
I have the enemy set up so that if its health is set to 0, it will instantiate a ragdoll. I want the ragdoll to be effected by the bullets force. I have the bullet set up to add force to rigidbodies but obviously the bullet is destroying the enemys gameobject and itself when it kills the enemy. How would I go about getting this to work?
Here is the enemy script :
var target : Transform;
private var navComponent : NavMeshAgent;
var life : float = 100;
var ragdoll : GameObject;
function Damage(damage:float)
{
life-=damage;
if (life <= 0)
PlayerDead ();
}
function Update ()
{
navComponent = this.transform.GetComponent(NavMeshAgent);
navComponent.SetDestination(target.position);
}
function PlayerDead ()
{
Destroy(gameObject);
gameObject.SetActiveRecursively(false);
if (ragdoll)
{
Instantiate(ragdoll, transform.position, transform.rotation);
}
}
and here is the bullet script :
var speed : float = 500;
var randomAngle : float = 0;
var lifeTime : float = 3;
var bulletGravity : float = 9.8;
var floatInFrontOfWall : float = 0.001;
var decalHitWall : GameObject;
@HideInInspector
var moveDirection : Vector3;
@HideInInspector
var shortestSoFar : float;
@HideInInspector
var instantiatePoint : Vector3;
@HideInInspector
var instantiateRotation : Quaternion;
@HideInInspector
var foundHit : boolean = false;
@HideInInspector
var parentToAdd : Transform;
var force = 500;
var damage = 50;
function Awake ()
{
transform.Rotate((Random.value * 2 * randomAngle) - randomAngle, 0, Random.value * 360);
moveDirection = transform.forward * speed;
shortestSoFar = Mathf.Infinity;
foundHit = false;
}
function Update ()
{
transform.rotation = Quaternion.LookRotation (moveDirection);
var hits : RaycastHit [];
hits = Physics.RaycastAll(transform.position, transform.forward, speed * Time.deltaTime);
for (var hit in hits)
{
if (hit.transform)
{
if (Vector3.Distance(transform.position, hit.point) < shortestSoFar) {
instantiatePoint = hit.point + (hit.normal * (floatInFrontOfWall + Random.Range(0, 0.01)));
instantiateRotation = Quaternion.LookRotation(hit.normal);
parentToAdd = hit.transform;
shortestSoFar = Vector3.Distance(transform.position, hit.point);
foundHit = (true); }
}
if (hit.rigidbody){ // apply impact if the target is a rigidbody:
hit.rigidbody.AddForce(transform.forward * force);
}
if (hit.transform.tag =="Enemy")
{
hit.transform.SendMessage("Damage", damage, SendMessageOptions.DontRequireReceiver);
}
// apply damage (ApplyDamage is an enemy function):
}
if (foundHit)
{
var spawnedBulletHole : GameObject = Instantiate(decalHitWall, instantiatePoint, instantiateRotation);
if (parentToAdd)
spawnedBulletHole.transform.parent = parentToAdd;
Destroy(gameObject);
}
transform.position += moveDirection * Time.deltaTime;
moveDirection.y -= bulletGravity * Time.deltaTime;
lifeTime -= Time.deltaTime;
if (lifeTime < 0)
Destroy(gameObject);
}
Comment
Best Answer
Answer by jordanblythe104 · Feb 26, 2013 at 02:43 PM
Fixed it:
if (hit.transform.tag =="Enemy")
{
hit.transform.SendMessage("Damage", damage, SendMessageOptions.DontRequireReceiver);
hit.rigidbody.AddForce(transform.forward * force);
foundHit = false;
}
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
ragdoll force trouble 0 Answers
2d ragdoll, where to start? 1 Answer
Need Help with Shooting Script c# 5 Answers
The Drunk Walk 1 Answer