- Home /
Bullet Shoot with RayCast don't destroy onCollisionEnter
Hi All! I've making an FPS Game and i have a charachter controller width attached a spawn object with attached the script for shooting.
if (curWeapon == "Sniper") {
if (Input.GetButtonDown ("Fire1")) {
Ray ray = cam.ScreenPointToRay (new Vector3 (Screen.width / 2, Screen.height / 2, 0));
RaycastHit hit = new RaycastHit ();
if (Physics.Raycast (ray, out hit)) {
Debug.Log ("Ray");
Debug.DrawLine (transform.position, hit.point, Color.red);
Debug.Log (hit.point);
Rigidbody instantiatedProjectile = Instantiate (projectile, transform.position, transform.rotation) as Rigidbody;
instantiatedProjectile.velocity = (hit.point - transform.position).normalized * 20;
instantiatedProjectile.rotation = Quaternion.LookRotation (instantiatedProjectile.velocity);
}
}
}
Attached to the projectile prefab i have this script:
public class BulletCollision : MonoBehaviour {
void OnCollisionEnter (Collision col)
{
Debug.Log ("Destroy");
Destroy (this.gameObject, 0.0f);
}
}
The problem is that the collision is detected but the projectile don't destroy...
The setting of the scene is:
Walls with mesh Collider
prefabs with rigidbody and sphere collider and the above script
spawn object with shooting script
Why the projectile pass through walls even if collisionenter is setted?
Thanks in advance.
Answer by Narv · Feb 03, 2014 at 05:37 PM
So the word "Destroy" is appearing in the log? is this when you shoot the walls or when you shoot anything else? Is the collider on the wall set to "trigger" by chance? does it have a rigidbody component on it for the collision? have you tried setting both to triggers and used "OnTriggerEnter" to see if it's a physics issue?
So, i have "Destroy" in console; everything i shoot don't destroy the bullet; the walls jhave only a meshcollider without trigger; the bullet has its rigidbody. No, i don't try the triggerEvent... now i try!
Ok, i've tried the trigger option: the projectile destroy the object triggered...
void OnTriggerEnter (Collider other)
{
Debug.Log ("Trigger");
Destroy (other.gameObject);
}
}
The debug says "Trigger". I want to destroy not the hitted object but the projectile... but.. how?