Bullet collision help

so i have a soldier and i want him to shoot an enemy but when he does i want the enemy to become a ragdoll also i can’t make the enemy read the bullet collision all though i know it can happen because i have a turret that can detect it i just dont know what code detects it

Player Gun Code:

var firing : boolean = false;
var accuracy : float;
private var bulletCaseGenerator : Transform;
private var bulletTraceGenerator : Transform;
private var muzzleFlashGenerator : Transform;
private var bulletCaseGeneratorScript : bulletCaseGenerator;
private var bulletTraceGeneratorScript : bulletTraceGenerator;
private var muzzleFlashGeneratorScript : muzzleFlashGenerator;

function Start(){
    bulletCaseGenerator = transform.Find("bulletCaseGenerator");
    bulletTraceGenerator = transform.Find("bulletTraceGenerator");
    muzzleFlashGenerator = transform.Find("muzzleFlashGenerator");
    bulletCaseGeneratorScript = bulletCaseGenerator.GetComponent("bulletCaseGenerator");
    bulletTraceGeneratorScript = bulletTraceGenerator.GetComponent("bulletTraceGenerator");
    muzzleFlashGeneratorScript = muzzleFlashGenerator.GetComponent("muzzleFlashGenerator");
    firing = false;
    //accuracy = 0.9;
}

function Update () {
    bulletCaseGeneratorScript.on = firing;
    bulletTraceGeneratorScript.on = firing;
    muzzleFlashGeneratorScript.on = firing;
    bulletTraceGeneratorScript.accuracy = accuracy;
    firing = false;
}

function Fire(){
    firing = true;
}

function SetAccuracy(accuracyValue : float){
    accuracy = accuracyValue;
}

Turret Code:

var targetRootName : String[];
var explosionPrefab : GameObject;
var blackSmokePrefab : GameObject;
private var rotatorAngleScan : float = 35;
private var rotatorAcceleration : float = 5.0;
private var firing : boolean = false;
private var bulletTraceGeneratorScript : bulletTraceGenerator;
private var muzzleFlashGeneratorScript : muzzleFlashGenerator;
private var spinningTurretScript : spinningTurret;
private var base : Transform;
private var rotator : Transform;
private var pitch : Transform;
private var barrel : Transform;
private var bulletTraceGenerator : Transform;
private var muzzleFlashGenerator : Transform;
private var laserSight : Transform;
private var laserSightScript : laserSight;
private var exploded : boolean = false;;
//Ai
private var foundTarget : boolean;
private var lastTargetfoundTime : float;
private var targetBufferTime : float;
private var targetTransform : Transform;
private var sentryHealth : float;
private var healthScript : health;
var useLaserToFindTargets : boolean = true;
var targetMaxDeltaAngle : float = 30;
private var targets : GameObject[];
//Rotator.
private var rotatorSpeed : float;
private var rotatorMaxSpeed : float = 60.0;
private var rotatorAngleTarget : float;
private var rotatorDirection : float = 1;
private var rotatorChangeDirectionTime : float;
private var rotatorChangeDirectionDelay: float = 1.0;
//Pitch.
private var pitchAngle : float;
private var pitchVelocity : float;
private var pitchTarget : float;
private var deadPitchAngle : float = 30;

function Start(){
    base = transform.Find("sentryGunBase");
    rotator = base.Find("sentryGunRotator");
    pitch = rotator.Find("sentryGunPitch");
    barrel = pitch.Find("sentryGunBarrel");
    bulletTraceGenerator = barrel.Find("bulletTraceGenerator");
    muzzleFlashGenerator = barrel.Find("muzzleFlashGenerator");
    spinningTurretScript = barrel.GetComponent("spinningTurret");
    bulletTraceGeneratorScript = bulletTraceGenerator.GetComponent("bulletTraceGenerator");
    muzzleFlashGeneratorScript = muzzleFlashGenerator.GetComponent("muzzleFlashGenerator");
    laserSight = pitch.Find("laserSight");
    laserSightScript = laserSight.GetComponent("laserSight");
    targetBufferTime = 2.0;
    healthScript = GetComponent("health");
}

function Update (){
    var sentryHealth = healthScript.health;
    var    barrelSpeed : float = spinningTurretScript.speed;
    var maxBarrelSpeed : float  = spinningTurretScript.maxSpeed;
    if(barrelSpeed > maxBarrelSpeed * 0.8){
        bulletTraceGeneratorScript.on = firing;
        muzzleFlashGeneratorScript.on = firing;
    }
    else{
        bulletTraceGeneratorScript.on = false;
        muzzleFlashGeneratorScript.on = false;   
    }
    spinningTurretScript.on = firing;
    if(bulletTraceGeneratorScript.on){
        rigidbody.AddForceAtPosition(bulletTraceGenerator.up* Time.deltaTime * Random.value * 1900, bulletTraceGenerator.position) ;
    }
    if(sentryHealth <= 0 && exploded == false){//Explosion.
        exploded = true;
        Instantiate(explosionPrefab,pitch.position,pitch.rotation);
        rigidbody.AddForce(Vector3.up*400.0);
        var newBlackSmoke : GameObject = Instantiate(blackSmokePrefab,pitch.position,pitch.rotation);
        newBlackSmoke.transform.parent = transform;
    }
    if(barrel.position.y < transform.position.y + 0.2 || sentryHealth == 0){
        collider.enabled = false;
        base.collider.enabled = true;
        base.collider.isTrigger = false;
        rotator.collider.enabled = true;
        rotator.collider.isTrigger = false;
        pitch.collider.enabled = true;
        pitch.collider.isTrigger = false;
        barrel.collider.enabled = true;
        barrel.collider.isTrigger = false;
        firing = false; //Deactivate if laying on the ground.
        laserSightScript.on = false;
        rotatorSpeed = Mathf.Lerp(rotatorSpeed,0, Time.deltaTime * rotatorAcceleration);
    }
    else{
        sentryAI();
    }
    rotator.localRotation.eulerAngles.z += rotatorSpeed * Time.deltaTime;
    //Pitch Angle.
    if(sentryHealth > 0){ //Alive.
        pitchAngle = 4.0;
    }
    else{
        pitchTarget = deadPitchAngle; //Dead.
        if(pitchAngle > pitchTarget + 1){
            pitchVelocity -= 3.0 * Time.deltaTime;
        }
        if(pitchAngle < pitchTarget -1){
            pitchVelocity += 3.0 * Time.deltaTime;
        }
        pitchVelocity = Mathf.Lerp(pitchVelocity,0,Time.deltaTime*5.0);
        pitchAngle += pitchVelocity;
    }
    if(pitchAngle > deadPitchAngle){
        pitchVelocity *= -1;
    }
    pitch.localRotation.eulerAngles.x = pitchAngle;
}

function sentryAI(){
    //Check for targets.
    var hit : RaycastHit;
    if (useLaserToFindTargets){ //This checks for targets using raycast (the laser).
        if (Physics.Raycast(bulletTraceGenerator.position, bulletTraceGenerator.forward, hit)){
            var isTarget : boolean = false;
            for (var i = 0; i < targetRootName.Length; i++){
                if (hit.transform.root.name == targetRootName[i]){
                    isTarget = true; //Check if what's ahead correspond to the target list.
                }
            }
            if(isTarget){
                foundTarget = true; //If what's ahead is a target.
                lastTargetfoundTime = Time.time;
                if(targetTransform == null){
                    targetTransform = hit.transform; //This is the target.
                }
            }
        }
    }
    else{ //This checks for targets using a deltaAngle (Makes the turrent start shooting sooner).
        targets = GetTargets();
        for (var n = 0; n < targets.Length; n++){
            var deltaAngle : float;
            deltaAngle = Vector3.Angle(targets[n].transform.position - transform.position, -rotator.up);
            Debug.DrawRay(transform.position, -rotator.up * 10.0);
            if(deltaAngle < targetMaxDeltaAngle){
                foundTarget = true;
                lastTargetfoundTime = Time.time;
                targetTransform = targets[n].transform;
            }
        }
    }
    //If target has been destroyed.
    if(targetTransform == null){
        foundTarget = false;
        firing = false;
    }
    //Target.
    if(foundTarget){
        firing = true;
        var targetPositionNoHeight : Vector3 = targetTransform.position;
        targetPositionNoHeight.y = rotator.position.y;
        var targetDirection = targetPositionNoHeight - rotator.position;
        var angleToTarget : float = Vector3.Angle(targetDirection, -rotator.up);
        var targetSide : float = rotator.InverseTransformPoint(targetPositionNoHeight).x;
        if(targetSide > 0){
            rotatorSpeed = Mathf.Lerp(rotatorSpeed,rotatorMaxSpeed, Time.deltaTime * rotatorAcceleration);
        }
        else{
            rotatorSpeed = Mathf.Lerp(rotatorSpeed,-rotatorMaxSpeed, Time.deltaTime * rotatorAcceleration);
        }
    }
    //No target.
    if(Time.time > lastTargetfoundTime + targetBufferTime){
        foundTarget = false;
        targetTransform = null;
        firing = false;
        var getRotatorAngle : float = rotator.localRotation.eulerAngles.z;
        if (getRotatorAngle > 180){
            getRotatorAngle -= 360;
        }
        if(rotatorDirection == 0){ //Choose new direction.
            rotatorChangeDirectionTime = Time.time + rotatorChangeDirectionDelay;
            if (getRotatorAngle > 0){
                rotatorDirection = -1;
            }
            else{
                rotatorDirection = 1;
            }
        }
        if(Time.time < rotatorChangeDirectionTime){
            rotatorSpeed = Mathf.Lerp(rotatorSpeed,0, Time.deltaTime * rotatorAcceleration);//Hold still.
        }
        if (rotatorDirection > 0 && Time.time > rotatorChangeDirectionTime){//Scan right.
            if(getRotatorAngle > rotatorAngleScan * 0.95){
                rotatorDirection = 0;
            }
            rotatorSpeed = Mathf.Lerp(rotatorSpeed,rotatorMaxSpeed, Time.deltaTime * rotatorAcceleration);
        }
        if(rotatorDirection < 0 && Time.time > rotatorChangeDirectionTime){//Scan left.
            if(getRotatorAngle < -rotatorAngleScan * 0.95){
                rotatorDirection = 0;
            }
            rotatorSpeed = Mathf.Lerp(rotatorSpeed,-rotatorMaxSpeed, Time.deltaTime * rotatorAcceleration);           
        }
    }
    else{
        rotatorSpeed = Mathf.Lerp(rotatorSpeed,0, Time.deltaTime * rotatorAcceleration);
    }   
}

function GetTargets() : GameObject[]{
    var returnList = new GameObject[targetRootName.Length];
    for (var i = 0; i < targetRootName.Length; i++){
        returnList[i] = GameObject.Find(targetRootName[i]);
    }
    return returnList;
}

I don’t want to fix the turret i just want a script that i add to any object to make take collision when i had just a cube with rigidbody and it worked fine but this enemy seems a little different

in order for collisions to work, both objects need to have a collider, and i think at least one of them has to have a rigidbody too. this is probably an issue of your component setup

rigidbody or character controller on at least one of them.

thank god people actually reply on this :smile: ive been waiting for weeks on help for this stuff

i know, it’s sad. This particular subforum doesnt seem to be getting much attention ;-;

Right now i’m just combing through it helping with everything that my knowledge is capable of (which sadly isn’t much)

well you try :slight_smile: i see most my post have many hundreds of views but its just people looking for answers

have you solved this issue yet?

try posting more info since there isn’t really enough here to help yo. screenshots of the component setup for the objects involved would be good

1 Like

it is not yet solved :frowning:
ok so almost all my assets are from the assets store
so:
Player: Unity Asset Store - The Best Assets for Game Making
Enemy: Unity Asset Store - The Best Assets for Game Making